说明:这里的备份策略以周日全备,周一到周六归档备份为例
全库备份脚本
[oracle@db02 ~]$ cat rman.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '###################################################################'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '------------Start FULL Database Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
rman target / nocatalog log /tmp/full.log append<<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
backup database format '/u01/backup/full_%d_%T_%s_%p';
SQL 'alter system archive log current';
SQL 'alter system archive log current';
backup archivelog all delete input format '/u01/backup/arch_%d_%T_%s_%p';
backup current controlfile format '/u01/backup/ctl_%d_%T_%s_%p';
backup spfile format '/u01/backup/spfile_%d_%T_%s_%p';
}
EOF
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '--------------End Full Database Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
rman target / nocatalog log /tmp/full.log append<<EOF
allocate channel for maintenance type disk;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
EOF
echo '-------------------------------------------------------------------'>>/tmp/full.log
echo '###################################################################'>>/tmp/full.log
echo '-------------------------------------------------------------------'>>/tmp/full.log
exit
二备份归档日志
[oracle@db02 ~]$ cat arch_backup.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '------------Start Database Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '/u01/backup/arch/arch_%d_%T_%s_%p' delete input ;
backup current controlfile format '/u01/backup/arch/ctl_%d_%T_%s_%p';
}
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '---------------End Databae Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
allocate channel for maintenance type disk;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
exit
注意如果是DG环境
–如果有dg备库,需要配置归档删除策略,防止备库收到不归档就被删除了。
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
[oracle@db02 ~]$ cat arch_backup_dg.sh
#!/bin/bash
export ORACLE_SID=orcl
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '------------Start Database Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
run{
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format '/u01/backup/arch/arch_%d_%T_%s_%p' delete input ;
backup current controlfile format '/u01/backup/arch/ctl_%d_%T_%s_%p';
}
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '---------------End Databae Arch Backup at:'`date +%Y-%m-%d:%H:%M:%S`>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
rman target / nocatalog log /tmp/arch.log append<<EOF
allocate channel for maintenance type disk;
crosscheck backup;
crosscheck archivelog all;
delete noprompt obsolete;
delete noprompt expired backup;
delete noprompt expired archivelog all;
EOF
echo '-------------------------------------------------------------------'>>/tmp/arch.log
echo '###################################################################'>>/tmp/arch.log
echo '-------------------------------------------------------------------'>>/tmp/arch.log
exit
–或者这样写每次只备份和删除半天前的归档
backup archivelog until time ‘sysdate-1/2’ all delete input format ‘/orabak/fullbak/arch%D%s%p%T’;
[oracle@db02 ~]$ crontab -l
0 1 * * 0 bash /home/oracle/rman.sh
0 1 * * 1,2,3,4,5,6 bash /home/oracle/arch_backup.sh
版权声明:本文为博主原创文章,未经博主允许不得转载。
oracle
- 上一篇:Oracle查看所有tablespace容量
- 下一篇:sqlserver查看库大小