Linux平台下的Oracle自动备份策略(RMAN)

浏览: 4383
基于Linux下 Oracle 备份策略(RMAN)
      对于 Oracle 数据库的备份与恢复,尽管存在热备,冷备以及逻辑备份之外,使用最多的莫过于使用RMAN进行备份与恢复。而制定RMAN备份策略则是基于数据库丢失的容忍程度,即恢复策略来制定。在下面的备份策略中,给出的是一个通用的备份策略。在该备份策略中,使用了catalog方式来保持备份脚本以及备份信息。在实际环境中应根据具体的情况对此进行相应的调整。
 
环境配置
操作系统:Linux SUSE
数据库:Oracle 11
相关变量值:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
备份的数据库实例名:test
备份的目标目录:/backup_rman
 
实现过程如下:
第一步:准备目录
mkdir /backup_rman
chown oracle:oinstall /backup_rman
chmod 755 /backup_rman
 
第二步:备份脚本程序的编写
1、创建备份脚本
切换到oracle用户,在oracle家目录下面创建bin目录,新建文件rman_backup.sh
mkdir bin
cd bin
touch rman_backup.sh
chmod 755 rman_backup.sh
编辑rman_backup.sh文件,添加如下内容:
#!/bin/bash
source /home/oracle/.bash_profile
/u01/app/oracle/product/10.2.0/db_1/bin/rman target / nocatalog cmdfile=/home/oracle/bin/rman_cmd log=/backup_rman/rman_full_`date +%Y%m%d%H%M`.log
2、创建rman的备份脚本文件
cd ~/bin
touch rman_cmd
编辑rman_cmd文件添加如下内容(根据需要,可以进行适当的修改):
crosscheck archivelog all;
delete noprompt expired archivelog all;
run {
        configure retention policy to recovery window of 4 days;
        configure controlfile autobackup off;
        allocate channel c1 device type disk  format '/backup_rman/rman_full_%T_%U' maxpiecesize=3G;
        allocate channel c2 device type disk  format '/backup_rman/rman_full_%T_%U' maxpiecesize=3G;
        allocate channel c3 device type disk  format '/backup_rman/rman_full_%T_%U' maxpiecesize=3G;
        backup database plus archivelog delete all input;
        backup current controlfile format '/backup_rman/rman_%T_CTL_%U';
        backup spfile format '/backup_rman/rman_%T_SPFILE_%U';
        release channel c1;
        release channel c2;
        release channel c3;
}
crosscheck backupset;
delete noprompt expired backup;
delete noprompt obsolete;
crosscheck archivelog all;
delete noprompt expired archivelog all;
 
第三步:添加crontab计划任务
使用oracle用户添加例行任务:
crontab -e
新打开的窗口中添加一下内容:
0 24 * * * /home/oracle/bin/rman_backup.sh
(*/3 * * * * /home/oracle/bin/rman_backup.sh)
注,括号内的可以是做测试的时候用的,每三分钟执行一次备份,例为每天凌晨24点执行备份
 
 
第四步:执行验证:
1、crontab成功执行验证:
在root下执行tail -f /var/log/cron,监控cron日志来确保crontab的成功执行:
Aug 31 00:20:06 model crontab[6380]: (oracle) BEGIN EDIT (oracle)
Aug 31 00:20:48 model crontab[6380]: (oracle) REPLACE (oracle)
Aug 31 00:20:48 model crontab[6380]: (oracle) END EDIT (oracle)
Aug 31 00:21:01 model crond[26958]: (oracle) RELOAD (cron/oracle)
Aug 31 00:21:01 model crond[6412]: (oracle) CMD (/home/oracle/bin/rman_backup.sh)
Aug 31 00:24:01 model crond[6621]: (oracle) CMD (/home/oracle/bin/rman_backup.sh)
2、查看rman是否执行,并且执行成功
a.可在rman执行的时候执行ps -ef | grep rman | grep -v grep来查看rman进程是否成功启动
b.查看/backup_rman目录中是否有备份生成的文件:
$ oracle@model /backup_rman> ls
rman_20120831_CTL_0mnjvu15_1_1     rman_full_20120831_0injvtrq_1_1
rman_20120831_CTL_0vnjvu57_1_1     rman_full_20120831_0jnjvtvs_1_1
rman_20120831_SPFILE_0nnjvu18_1_1  rman_full_20120831_0knjvu0c_1_1
rman_20120831_SPFILE_10njvu5a_1_1  rman_full_20120831_0lnjvu13_1_1
rman_full_201208310021.log         rman_full_20120831_0onjvu1a_1_1
rman_full_201208310024.log         rman_full_20120831_0pnjvu1e_1_1
rman_full_20120831_0dnjvtrg_1_1    rman_full_20120831_0qnjvu1e_1_1
rman_full_20120831_0enjvtrg_1_1    rman_full_20120831_0rnjvu1i_1_1
rman_full_20120831_0fnjvtrg_1_1    rman_full_20120831_0snjvu4s_1_1
rman_full_20120831_0gnjvtrp_1_1    rman_full_20120831_0tnjvu52_1_1
rman_full_20120831_0hnjvtrp_1_1    rman_full_20120831_0unjvu55_1_1

验证结果:rman自动备份任务执行成功!
 
 
Linux平台下的Oracle自动备份策略(RMAN)实际案例演示
这是全库备份脚本的内容,是生产上用的
[oracle@11g ~]$ cat backup.sh
export ORACLE_SID=XXXX
rman target / nocatalog log /backup/rman_log/rman_`date +%y%m%d`.log  <<EOF
run
{
configure retention policy to recovery window of 14 days;    保留备份文件14天(时间按需要定)
configure controlfile autobackup on;    打开控制文件自动备份
configure controlfile autobackup format for device type disk to '/backup/rman/control_%F'; 控制文件备份路径和格式(修改路径即可,控制文件格式control_%F不用改)
allocate channel c1 type disk;    分配两个备份通道,并行备份
allocate channel c2 type disk;
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';    切归档
backup full tag 'full' format='/backup/rman/full_%U'
database plus archivelog format='/backup/rman/arch_%d_%T_%s';    备份全库数据和归档日志(修改备份路径)    
release channel c1;
release channel c2;
}
allocate channel for maintenance device type disk;
crosscheck backupset;        检查备份集,删除过期备份集
delete noprompt obsolete;
delete archivelog until time "sysdate - 14";        保留14天内的归档日志备份
YES
exit
EOF


在数据库中检查:
SQL> show parameter control_file_record_keep_time;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     16
一般control_file_record_keep_time的值应该大于RAMN中配置的备份集保留时间。
 
生产环境的备份如下
#!/bin/bash
export ORACLE_SID=orcl
rman target / nocatalog log /home/oracle/oradata/backup_rman/log/rman_`date +%y%m%d`.log <<EOF
run
{
configure retention policy to recovery window of 7 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to '/home/oracle/oradata/backup_rman/control_%F';
allocate channel c1 type disk;
allocate channel c2 type disk;
sql 'ALTER SYSTEM ARCHIVE LOG CURRENT';
backup full tag 'full' format='/home/oracle/oradata/backup_rman/full_%U_%T'
database plus archivelog format='/home/oracle/oradata/backup_rman/arch_%d_%T_%s';
release channel c1;
release channel c2;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;
delete noprompt archivelog until time "sysdate - 7";
exit
EOF

1.jpg


2.jpg


3.jpg


 
推荐 0
本文由 梁勇 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册