ORACLE RMAN 备份策略及设置(Windows篇)
备份策略制定
数据量&需求 | 备份策略 | 恢复所需文件 |
---|---|---|
数据量100G 一下 | 一天做一次level 0的备份(全备) | 恢复的时候,会使用最新的那一 份备份和归档进行恢复 |
数据量100G -500G | 周日做一次level 0的备份,其它工作日做level 1的增量备份 | 恢复的时候,会使用周日的那一次level 0的做恢复,再加上工作日的 level 1的增量以及归档恢复到最新状态 |
数据量500G -1T对恢复时间要求高 | 周日做一次level 0的备份,其它工作日做level 1的增量备份 | 恢复的时候,会使用周日的那一次 level 0的做恢复,再加上工作日的 level 1的增量以及归档恢复到最新状态 |
数据量500G以上对恢复时间无要求 | 每月初的周日做一次 level 0的备份,其它周日做level 1的增量备份,其它工作日做level 2 的增量备份。例:2021- 10-01 做 level 0 的备份,7、14、21、28 号做 level 2的 incremental level 1 的备份,其它日做 incremental level 2的备份 | 假如 10 月 29 号发生数据库损 坏,可以使用月初周末的 1 号那 天的 level0 的做恢复,然后依次 使用 7、14、21、28 号做 level2 的 incremental level 1 的备份恢 复,再使用 29 号的 incremental level 2 备份恢复,最 后使用归档恢复到最新状态 |
创建备份目录
在 D 盘中新建 orcl 文件夹以及子文件夹 archive(归档)control(控制)log(日志),如下:
D
-orcl
--archive
--control
--log
查看归档并启用
要用到RMAN备份,必须先开启存档模式
sqlplus / as sysdba (cmd 下输入此命令)
SQL> archive log list; (查看是否开启存档模式)
如果未开启,执行下面语句开启
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount; (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
SQL> alter system set log_archive_dest_1='location=D:\orcl\archive'; (修改归档路径)
注:修改归档模式后,需要做一次完全备份,等配置完计划任务后,立即执行完全备份
设置RMAN参数
rman target / (cmd 下输入此命令)
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
RMAN> CONFIGURE BACKUP OPTIMIZATION ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:\orcl\control\%F';
RMAN> show all;
创建备份脚本
全备
rmanbackup_full.txt
connect target /
run{
backup incremental level 0 database format 'D:\orcl\rmanbackup\backup_%d_%T_%s';
backup archivelog all format 'D:\orcl\rmanbackup\arch_%d_%T_%s' delete all input;
delete noprompt obsolete device type disk;
alter system archive log current;
crosscheck backup;
delete noprompt expired backup;
}
第一行是连接数据库 RMAN。
第二行开始是 RMAN 的 run 块,里面写相关的命令,注意 delete 命令都需要添加 noprompt 来实现无提示的自动运行效果。
run 块中的第一行就是 0 级备份的语句。
run 块中的第二行就是备份归档日志并删除的语句。
run 块中的第三行是删除被标记为过期的备份文件,就是删除 7 天之前最后一个全备和那 次全备之前的所有 1 级 2 级备份和归档日志。这里一定要注意,是 7 天之前的最后一个全 备,可能是 7天前的某个全备。
run 块中的第四行是重做归档日志文件,让备份完毕后新的归档日志以当前的全备为起始, 防止产生归档日志断续的问题,也可以在恢复的时候自动寻找最近的一次全备然后开始逐条 sql 恢复。
run 块中第五行是检查备份文件物理上有没有缺失的状况,可以不执行这条语句。这条语句 的主要作用是如果你从磁盘上物理删除了之前的某次备份,可以通过这个检查出来
run 块中第六行是删除上面那一条发现的,物理磁盘已经丢失但控制文件还记录的备份文件, 删除物理已经丢失的文件可以在回滚数据库的时候减少无意义的报错。
批处理文件:rmanbackup_full.bat
set oracle_sid=orcl
set nls_lang=simplified chinese_china.zhs16gbk
rman cmdfile= D:\orcl\rmanbackup\rmanbackup_full.txt >>
D:\orcl\rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log
增量
rmanbackup_incremental.txt
connect target /
run{
alter system archive log current;
backup incremental level 1 database format 'D:\orcl\backup_%d_%T_%s';
}
批处理文件:rmanbackup_incremental.bat
set oracle_sid=orcl
set nls_lang=simplified chinese_china.zhs16gbk
rman cmdfile=D:\orcl\rmanbackup_incremental.txt >>
D:\orcl\log\rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log
累计
rmanbackup_cumulative.txt
connect target /
run{
alter system archive log current;
backup incremental level 1 cumulative database format 'C:\orcl\backup_%d_%T_%s';
}
批处理文件:rmanbackup_cumulative.bat
set oracle_sid=orcl
set nls_lang=simplified chinese_china.zhs16gbk
rman cmdfile=D:\orcl\rmanbackup_cumulative.txt >>
D:\orcl\log\rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log
创建备份任务执行bat
来源:https://blog.csdn.net/zs245584910/article/details/125216575