rman自动备份脚本

来源:互联网 发布:java 调用maven 编辑:程序博客网 时间:2024/05/16 09:30
一、单独备份
1、经典整库备份:backup as compressed backupset database include current controlfile plus archivelog delete all input;
2、tablespace:backup tablespace 名字;
3、数据文件:backup datafile n; (n:具体的数据文件编号select file_name,file_id,tablespace_name from dba_data_files;)
4、控制文件:backup current controlfile;或者backup database include current controlfile;
5、日志文件:backup archivelog all;或者 database plus archivelog;
6、参数文件:backup spfile;
7、全库备份脚本:
复制代码 代码如下:
run{   
allocate channel c1 type disk;   
backup full tag ‘dbfull' format ‘/backup/full%u_%s_%p' database   
include current controlfile;   
sql ‘alter system archive log current'; #在数据库进行全备份完成之后,需要执行该条命令将当前日志归档,备份归档日志时应该包括最后生成的归档
backup filesperset 3 format ‘/backup/arch%u_%s_%p'#filesperset 3设定每个备份集里文件不超过3个  
archivelog all delete input; #备份归档可选,可以单独定期备份   
release channel c1;    


二、增量备份
1、0级增量备份
复制代码 代码如下:
run{   
allocate channel c1 type disk;   
backup incremental level 0 tag ‘db0' format ‘/backup/db0%u_%s_%p'database 
include current controlfile;  ;   
sql 'alter system archive log current';#在数据库进行全备份完成之后,需要执行该条命令将当前日志归档,备份归档日志时应该包括最后生成的归档
backup filesperset 3 format ‘/backup/arch%u_%s_%p'#filesperset 3设定每个备份集里文件不超过3个 
archivelog all delete input; #备份归档可选,可以单独定期备份   
release channel c1;    
}  

2、1级备份脚本 

复制代码 代码如下:
run{   
allocate channel c1 type disk;     
backup incremental level 1 tag ‘db1' format ‘/backup/db1%u_%s_%p'   
database skip readonly include current controlfile;      
backup filesperset 3 format ‘/backup/arch%u_%s_%p'#filesperset设定每个备份集里文件不超过3个
archivelog all delete input; #备份归档可选,可以单独定期备份   
release channel c1;     
}

RMAN备份脚本

--本地

创建文件夹
mkdir /home/oracle/backup
mkdir /home/oracle/backup/script
mkdir /home/oracle/backup/log
mkdir /home/oracle/backup/export


--备份目的地
mkdir /home/oracle/rman_backup

创建备份表空间

create tablespace rman_tbs datafile '/oradata/luke/rman_tbs01.dbf' size 1024M;

创建备份用户
create user rman identified by rman default tablespace rman_tbs temporary tablespace temp;


grant connect,resource ,recovery_catalog_owner to rman;


rman catalog rman/rman
create catalog tablespace rman_tbs;
connect target 
register database;
report schema;


configure retention policy to redundancy 2;
configure retention policy to recovery window of 7 days;


--倒出RMAN用户数据脚本exp_rman.par (即备份catalog库)


userid=rman/rman
file=/home/oracle/backup/export/rman.dmp
log=/home/oracle/backup/log/rman.log


-- 倒出RMAN数据SHELL脚本exp_rman.sh
#!/bin/bash
cd $HOME
. .bash_profile
cd $HOME/backup/script
exp parfile=exp_rman.par

-- 零级备份RMAN脚本level0_backup.rcv
connect catalog rman/rman
connect target 
run { 

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS; 
CONFIGURE CONTROLFILE AUTOBACKUP ON; 
allocate channel d1 type disk;
allocate channel d2 type disk;
backup incremental level 0 database format '/home/oracle/rman_backup/level0_%d_%s_%p_%u.bak'
tag='level 0' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d2;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--零级备份SHELL脚本的level0_backup.sh
#!/bin/bash
cd $HOME
. .bash_profile
cd $HOME/backup/script
rman cmdfile=level0_backup.rcv msglog=$HOME/backup/log/level0_backup.log
. /home/oracle/backup/script/exp_rman.sh

--一级差异增量备份RMAN脚本 level1_backup.rcv
connect catalog rman/rman
connect target 
run {
allocate channel d1 type disk;
backup incremental level 1 format '/home/oracle/rman_backup/level1_%d_%s_%p_%u.bak' tag = 'level 1' database;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--一级差异增量备份SHELL脚本level1_backup.sh

#!/bin/bash
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level1_backup.rcv msglog=$HOME/backup/log/level1.log
. /home/oracle/backup/script/exp_rman.sh

--二级差异增量备份RMAN脚本 level2_backup.rcv
connect catalog rman/rman
connect target 
run {
allocate channel d1 type disk;
backup incremental level 2 format '/home/oracle/rman_backup/level2_%d_%s_%p_%u.bak' tag = 'level 2' database;
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/rman_backup/log_%d_%s_%p_%u.bak' delete all input;
release channel d1;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
resync catalog;

--二级差异增量备份SHELL脚本level2_backup.sh
#!/bin/bash
cd $HOME
. .bash_profile
cd /home/oracle/backup/script
rman cmdfile=level2_backup.rcv msglog=$HOME/backup/log/level2.log
. /home/oracle/backup/script/exp_rman.sh

提高 RMAN增量备份性能

alter database enable block change tracking using file
'/u01/app/oracle/admin/devdb/bdump/luke.log';

desc v$block_change_tracking;

linux下定时执行备份脚本

crontab -e -u oracle
SHELL=/bin/bash --以下脚本在bash下执行
MAILTO=oracle --执行日志以邮件形式邮给oracle用户,可以/var/spool/mail/oracle下查收
10 1 * * 0 /home/oracle/backup/script/level0_backup.sh
10 1 * * 1 /home/oracle/backup/script/level2_backup.sh
10 1 * * 2 /home/oracle/backup/script/level2_backup.sh
10 1 * * 3 /home/oracle/backup/script/level1_backup.sh
10 1 * * 4 /home/oracle/backup/script/level2_backup.sh
10 1 * * 5 /home/oracle/backup/script/level2_backup.sh
10 1 * * 6 /home/oracle/backup/script/level2_backup.sh

一周差异备份策略:
备份目标库和catalog库
周日0级全备,周一周二为2级,周三为1级,周四周五周六为2级。
每天凌晨1点10分开始备份


零级备份
backup incremental level 0 database;
一级差异增量 差异增量默认增量备份方式
backup incremental level 1 database;
一级累计增量
backup incremental level 1 cumulative database;


0 0
原创粉丝点击