1. 程式人生 > >shell判斷oracle主備數據庫備份腳本

shell判斷oracle主備數據庫備份腳本

rman 自動備份腳本 判斷主備數據庫


1. 腳本如下

說明:按照客戶要求,在主備數據庫上同時部署腳本,自動判斷是否是主庫,如果是主庫則進行備份,備庫不需要備份,記錄日誌為備份庫即可,以下腳本僅供參考,可以進一步優化。

腳本說明:

1、DATABASE_ROLE查看主備庫角色變量

2、Main()函數 數據庫備份腳本

3、根據主備庫關鍵字判斷是否執行main()函數

#!/bin/bash

# Author:roidba

# filename:/backup/backup.sh

#logfile:/backup/rman_fullbackup.log

ORACLE_SID=orcl; export ORACLE_SID

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME

PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin

####variables###

DATABASE_ROLE=`sqlplus -silent "/as sysdba" <<EOF

SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF

select DATABASE_ROLE from v\\\$database;

EXIT;

EOF`

###function###

main()

{

($ORACLE_HOME/bin/rman <<EOF

connect target /

run {

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE BACKUP OPTIMIZATION ON;

allocate channel d1 type disk;

allocate channel d2 type disk;

backup as compressed backupset database format '/backup/fulldbbakcup_%s_%p_%t.rmn' tag='

fulldbbackup' include current controlfile;

backup as compressed backupset archivelog all format '/backup/backup_archive_%s_%p_%t.arc';

release channel d1;

release channel d2;

crosscheck backup;

delete noprompt expired backup;

delete noprompt archivelog until time 'sysdate - 3' backed up 1 times to device type disk;

delete noprompt backupset of archivelog until time 'sysdate - 3' ;

delete noprompt backupset of database completed before 'sysdate - 3';

}

exit;

EOF

)

}

###if-then-else###

if [ "$DATABASE_ROLE" = "PRIMARY" ];

then

main

echo "***database role is primary*** " >>/backup/rman_fullbackup.log

else

echo "database role is standby"

fi

2. 自動備份,使用crontab調度

sh /backup/rman_backup.sh >>/backup/rman_fullbackup.log &

crontab -e

07 20 * * * sh /backup/rman_backup.sh >>/backup/rman_fullbackup.log &

3. 理解crontab格式

<roidb01:orcl:/backup>$more /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

# For details see man 4 crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

<roidb01:orcl:/backup>$


shell判斷oracle主備數據庫備份腳本