分享一个备份脚本.备份目录结构如下:
[oracle@bre1 ~]$ tree backup
backup
|-- file
| `-- 20200804
| |-- arch_0jv70o06_1_1_20200804.bak
| |-- dbfull_0dv70o00_1_1_20200804.bak
| |-- dbfull_0ev70o00_1_1_20200804.bak
| |-- dbfull_0fv70o00_1_1_20200804.bak
| |-- dbfull_0gv70o01_1_1_20200804.bak
| |-- dbfull_0hv70o02_1_1_20200804.bak
| `-- dbfull_0iv70o03_1_1_20200804.bak
|-- log
`-- scripts
`-- backup.sh
其中file目录下会按照时间自动创建目录,每次当天的备份存放到此目录下.log下存放的备份产生的日志文件.scripts下存放的备份脚本.
全量备份脚本:
. /home/oracle/.bash_profile
#export BACKUP_HOME=/home/oracle/backup
export BACKUP_HOME=$(cd `dirname $0`/../; pwd)
export OPERTIME=`date +'%Y%m%d'`
BACKUP_DIR=$BACKUP_HOME/file/$OPERTIME
mkdir -p $BACKUP_HOME/file $BACKUP_HOME/log $BACKUP_HOME/scripts $BACKUP_DIR
rman target / log=$BACKUP_DIR/log/dbfull_`date "+%Y%m%d%H%M%S"`.log <<EOF
run{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
allocate channel ch4 device type disk;
backup as compressed backupset full database filesperset 1 format '$BACKUP_DIR/dbfull_%U_%T.bak';
backup current controlfile format '$BACKUP_DIR/control_%U_%T.bak';
backup as compressed backupset archivelog from time "sysdate-3" not backed up format '$BACKUP_DIR/arch_%U_%T.bak';
crosscheck archivelog all;
delete noprompt expired archivelog all;
report obsolete;
delete noprompt obsolete;
crosscheck backup;
delete noprompt expired backup;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
}
EOF
备份归档日志脚本如下:
. /home/oracle/.bash_profile
#export BACKUP_HOME=/home/oracle/backup
export BACKUP_HOME=$(cd `dirname $0`/../; pwd)
export OPERTIME=`date +'%Y%m%d'`
BACKUP_DIR=$BACKUP_HOME/file/$OPERTIME
mkdir -p $BACKUP_HOME/file $BACKUP_HOME/log $BACKUP_HOME/scripts $BACKUP_DIR
rman target / log=$BACKUP_DIR/log/arch_`date "+%Y%m%d%H%M%S"`.log <<EOF
run{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
allocate channel ch4 device type disk;
backup as compressed backupset archivelog from time "sysdate-3" not backed up format '$BACKUP_DIR/arch_%U_%T.bak';
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'sysdate-3';
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
}
EOF
crontab建议每隔两小时备份一次归档日志.每天凌晨全量备份.如果需要增量备份,则自行修改脚本.