RMAN多种备份脚本分享

来源:互联网 发布:艾默生网络能源年终奖 编辑:程序博客网 时间:2024/05/21 20:36

1.关于RMAN备份的相关参数介绍:

命令行参数

描述

TARGET

为目标数据库定义的一个连接字符串,当连接到一个目标数据库时,该连续是SYSDBA连接。该用户拥有启动和关闭数据库的权利,必须属于OSDBA组,必须建立一个口令文件允许SYSDBA连接。

CATALOG

连接到恢复目录。

NOCATALOG

不运用恢复目录。与CATALOG参数互斥

CMDFILE

定义了输出命令文件名称的字符串。当运行RMAN时,可以运行命令文件或者交互式运行

LOG & MSGLOG

定义了包含RMAN输出信息的文件的字符串,LOG参数只能特别运用在命令行中。不能在RMAN中启动SPOOLING,当应用日志文件时,输出的信息并不在屏幕上显示

TRACE

类似于log参数,将产生一个显示RMAN输入信息的文件。使用TRACE在屏幕上也显示。

APPEND

特殊用法,如果消息日志文件存在则将消息追加到该文件中。经常与LOG联合使用

数据库OPEN时归档模式下RMAN可以备份。

数据库OPEN时非归档模式下RMAN只能备份READ ONLY或OFFLINE有表空间或数据文件。

归档模式下RMAN全库备份时:

在数据库OPEN、MOUNT阶段都可以备份。数据库实例未启动,或者启动到NOMOUNT状态均不能备份。

非归档模式下RMAN全库备份时:

只能在MOUNT状态下备份。

.注意一:让RMAN输出日志的方法有:

rman log='/home/Oracle/app/oradataback/db_rman1.log' append <<EOF
connect target /;

rman   log /home/oracle/rman-arch`date +%Y%m%d-%H:%M`.log <<EOF
connect target /;

注意二:关于归档日志的删除参数delete all input:

backup archivelog all delete all input命令在删除备份归档时delete all input与 delete input区别
如果只配置了一个归档目录,两个参数没有区别。
如果配置了一个以上归档目录--log_archive_dest_n参数,比如两个,则:
DELETE ALL INPUT 会将两个归档目录下的归档日志都删除
DELETE INPUT则只删除其中一个--比如备份时是使用log_archive_dest_1中的归档日志,则删除log_archive_dest_1中的归档日志。


注意三:备份归档日志时,可以考虑在脚本前写上cross check archivelog all;命令。

如果在使用RMAN备份时,在操作系统中删除归档日志未在RMAN中执行cross check archivelog all;时,备份会报错:RMAN-06059: expected archived log not found, loss of archived log compromises recoverability 。这时,可以手动执行cross check archivelog all;命令后再进行备份,也可以直接把cross check archivelog all;命令写到备份脚本里。

我这里并未将此语句写入到备份脚本中,因为考虑生产环境中如果归档日志不全可能导致在后期的数据库恢复中不能完全恢复,所以宁肯备份报错以便及早发现问题。

说明:分享的脚本在安装在Linux的ORACLE 11G测试环境经过测试,如在自己环境使用请修改相应参数。使用类似source /home/oracle/.bash_profile语句可以确保在linux定时任务中执行成功,如果需要在WIN下使用,请酌情修改。

注意四:控制文件自动备份的开启
应该开启控制文件自动备份,命令是:
CONFIGURE CONTROLFILE AUTOBACKUP ON;      
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/%F';  
---以下有脚本默认开启控制文件自动备份。

注意五:写备份脚本的小技巧:

可以在备份前增加备份前--校验归档日志文件
crosscheck archivelog all;
delete noprompt expired archivelog all;
备份后-校验备份集并删除过期及误删除的备份信息
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;

2.关于差异与增量备份概念的简单介绍:

差异增量Differential--  默认的方式:    备份同一级或上一级备份后的变化

第一次0级备份,是全备。
然后1级是第0级备份以来的变化的备份。
此时再做1级备份,备份的是从上一个1级备份后的变化。
再做2级备份,则是从第二个1级备份后的变化。
此时再做1级备份,则备份从第二个1级备份后的变化,---忽略2级备份的。

累积增量Cumulative--需要指定:   备份上一级备份后的变化

第一次0级备份,是全备。然后1级是第0级备份以来的变化的备份。
此时再做1级备份,备份的是从上一个0级备份后的变化。   --------------也就是同级别的备份不被认同。
做2级备份,则是从第二个1级备份后的变化。
此时再做1级备份,则备份从0级备份后的变化

3.只备份归档文件,指定备份目录及备份文件格式

指定的生成日志及备份文件的文件位置、格式。日志格式类似这样:rman-arch20130912-1634.log

[oracle@bys001 ~]$ cat archback.sh 
#!/bin/sh
source /home/oracle/.bash_profile
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/rman-arch`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run{
backup archivelog all delete input
format '/backup/archlog/arch_%d_%T_%s';
}
exit
如果归档日志需要备份两份,在RMAN中可以直接设置进行修改。需要在备份集中用%c的命令格式能备份成功。示例如下:
 %c Copy number for multiple copies in a duplexed backup   备份片的多个copy的序号
 
RMAN> CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
RMAN> backup archivelog all format '/home/oracle/backup/%t_%d_%u_%c.arc';

4.删除归档日志的脚本:我这里是删除一天前的归档日志

#!/bin/sh
#su - oracle
source /home/oracle/.bash_profile
#########back arch test 0704
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/rman-arch`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run{
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'sysdate-1' ;
}
exit

5.全库备份脚本,包括归档日志及控制文件、SPFILE参数文件

[oracle@bys001 ~]$ cat fullback.sh 
#!/bin/sh
source /home/oracle/.bash_profile
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/backfull-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup full tag 'bys001-full' database
format "/backup/full/bys001full_%d_%t_%s"
plus archivelog
format "/backup/full/bys001arch_%d_%t_%s"
delete all input;
}
exit
###############下面是加强版:
[oracle@bys001 ~]$ cat fullback.sh
#!/bin/sh
source /home/oracle/.bash_profile
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/backfull-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
crosscheck archivelog all;
delete noprompt expired archivelog all;

backup full tag 'bys001-full' database
format "/backup/full/bys001full_%d_%t_%s"
plus archivelog
format "/backup/full/bys001arch_%d_%t_%s"
delete all input;
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;

}
exit

6.差异增量Differential备份脚本--有0、1、2三级%%%这是默认的增量备份方式;差异增量Differential是默认备份方式,

0级差异增量备份脚本

[oracle@bys001 ~]$ cat back0.sh 
#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level0
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back0-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup incremental level=0 tag 'bys001-0' database
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit

1级差异增量备份脚本

[oracle@bys001 ~]$ cat back1.sh 
#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level 1
##########
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back1-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup incremental level=1 tag 'bys001-1' database
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit

2级差异增量备份脚本

[oracle@bys001 ~]$ cat back2sh 

#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level 2
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back2-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup incremental level=2 tag 'bys001-2' database
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit


7.cumulative累积增量备份--有0、1、2三级

0级累积增量备份脚本

#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level 0 ---cumulative
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back0-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup incremental level=0 cumulative tag 'bys001-0' database 
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit

1级累积增量备份脚本

#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level 1 --cumulative
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back1-`date +%Y%m%d-%H%M`.log <<EOF
connect target /;
run {
backup incremental level=1 cumulative tag 'bys001-1' database 
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit

2级累积增量备份脚本

这个脚本里使用了服务名来登陆RMAN。最好先在RMAN中使用connect target sys/sys@192.168.1.212:1521/bys001;确认登陆正常再写入脚本。

当然也可以使用 rman target sys/sys@bys001

#!/bin/sh
source /home/oracle/.bash_profile
#########rman-back level 2 ---cumulative
/u01/app/oracle/product/11.2.0/dbhome_1/bin/rman   log /home/oracle/back2-`date +%Y%m%d-%H%M`.log <<EOF
connect target sys/sys@192.168.1.212:1521/bys001;
run {
backup incremental level=2 cumulative  tag 'bys001-2' database 
format "/backup/full/bys001full_%d_%t_%s" 
plus archivelog 
format "/backup/full/bys001arch_%d_%t_%s" 
delete all input;
}
exit


8.WINDOWS下的备份脚本

先创建一个BAT文件 如下:调用f:\arch_rman.sql中的备份命令,所生成日志格式是:f:\backlog\arch20130304-2050.log

rman  target / cmdfile=f:\arch_rman.sql log f:\backlog\arch%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%%time:~3,2%.log

f:\arch_rman.sql中的备份命令:

list backup;
report obsolete;
delete obsolete;
run {
backup  database
format 'f:\backup\orclfullback_%d_%t_%s'
plus archivelog
format 'f:\backup\orclarch_%d_%t_%s' 
delete all input;
}
exit