Windows下Oracle11g增量备份与恢复
作者:张春醒
备份数据库到指定硬盘,最坏的情况下,允许丢失一天的数据。
假定数据库的备份任务作如下安排:
星期一:完全备份(A)
星期二:增量备份(B)
星期三:增量备份(C)
星期四:增量备份(D)
星期五:累计备份(E)
星期六:增量备份(F)
星期日:增量备份(G)
假设在星期日,数据库遭到意外破坏,数据库管理员可按以下步骤来恢复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构
第二步:创建一个足够大的附加回段
第三步:完全增量导入A (恢复数据库必须要存在一个完全增量备份)
第四步:累计增量导入E
第五步:最近增量导入F
(1)查看归档模式
sqlplus / as sysdba (cmd下输入此命令,不要省略/前后的空格!)
SQL> archive log list;
我自己操作的时候出现了:ORA-12560: TNS: 协议适配器错误
所以使用的是:
sqlplus sys/sys@orcl as sysdba
SQL> archive log list;
(2)启用归档模式
sqlplus / as sysdba
SQL> shutdown immediate; (立即关闭数据库)
SQL> startup mount (启动实例并加载数据库,但不打开)
SQL> alter database archivelog; (更改数据库为归档模式)
SQL> alter database open; (打开数据库)
SQL> alter system archive log start; (启用自动归档)
(注意:一般修改归档模式后,需要做一次完全备份,因为归档前的日志
已经没用了。我们这儿暂时不做,等到配置完计划任务后,再做完全备份)
SQL> exit;
先手工创建D:\backup文件夹
(1)创建“完全”备份脚本
即备份整个数据库。
创建文件:d:\rmanbackup_full.txt(文件路径和名称都可以自拟)
内容:
run{
backup incremental level 0 database format 'D:/backup/backup_%d_%T_%s';
}
创建文件:d:\rmanbackup_full.bat(文件路径和名称都可以自拟)
内容:
rman target /
nocatalog CMDFILE 'd:/rmanbackup_full.txt' LOG 'd:/rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';
如果待会运行的时候还会出现:ORA-12560: TNS: 协议适配器错误,则将文件修改为:
rman target sys/sys@orcl
nocatalog CMDFILE 'd:/rmanbackup_full.txt'
LOG 'd:/rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';
(2)创建“差异”备份脚本
备份上一次备份后改变的数据。
创建文件:d:\rmanbackup_incremental.txt (文件路径和名称都可以自拟)
内容:
run{
backup incremental level 1 database format 'D:/backup/backup_%d_%T_%s';
}
创建文件:d:\rmanbackup_incremental.bat (文件路径和名称都可以自拟)
内容:
rman target / nocatalog CMDFILE 'd:/rmanbackup_incremental.txt' LOG 'd:/rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';
跟上面一样,如果出现那个错误,就将sys/sys@orcl加上
(3)创建“累计”备份脚本
累计型导出方式只是导出自上次“完全”导出之后数据库中变化了的信息。
创建文件:d:\rmanbackup_cumulative.txt (文件路径和名称都可以自拟)
内容:
run{
backup incremental level 1 cumulative database format 'D:/backup/backup_%d_%T_%s';
}
创建文件:d:\rmanbackup_cumulative.bat (文件路径和名称都可以自拟)
内容:
rman target / nocatalog CMDFILE 'd:/rmanbackup_cumulative.txt' LOG 'd:/rmanbackup_%DATE:~0,4%_%DATE:~5,2%_%DATE:~8,2%.log';
出现错误则同上
(1)手工执行rmanbackup_full.bat
D:\>rmanbackup_full.bat
(3)使用rman命令查看备份信息
rman target / (cmd命令行下输入此命令)
RMAN>list backup;
我使用的依然是:
rman target sys/sys@orcl
RMAN>list backup;
(4)若想删除,可使用delete backup指令
(1)计划任务的时间安排
我们创建7个计划任务,分别对应以下时间点。假定任务执行时间是每天晚上23:00.
星期一:完全备份(A)
星期二:增量备份(B)
星期三:增量备份(C)
星期四:增量备份(D)
星期五:累计备份(E)
星期六:增量备份(F)
星期日:增量备份(G)
(2)创建一个计划任务
⑨选择“不管用户是否登陆都要运行”,勾选“不存储密码”,确定
(3)建议立即进行测试
为了测试上述建立的计划任务,需把计划任务的执行时间,改到当天当前时间后的2分钟左右。然后注销计算机,等待5分钟。
5分钟后,登陆计算机,查看刚才的计划任务执行是否成功,有没有生成备份的数据库文件。
测试后,请把计划任务的时间,复原。
(4)创建其他计划任务
请模仿以上步骤,继续创建其他6个计划任务。
(1)尽力对整个数据库进行完全恢复
本操作,恢复到数据库崩溃前的那个点。若数据库没有错误,该命令执行后,没有任何效果。
rman target / (命令行下输入此命令,我用的是 rman target sys/sys@orcl)
rman>shutdown immediate; (立即关闭数据库)
rman>startup mount; (启动实例并加载数据库,但不打开)
rman>restore database;
rman>recover database;
rman>alter database open;
(2)恢复到历史中的一个备份
rman target / (命令行下输入此命令,我用的是 rman target sys/sys@orcl)
rman>shutdown immediate; (立即关闭数据库)
rman>startup mount; (启动实例并加载数据库,但不打开)
RMAN> run {
set until time "to_date('2014-07-03 19:04:00','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}