Restore Points 制定回退方案
Restore Points 制定回退方案
背景:Flashback Database 和 restore points 都可以提供一个基于时间点的回滚。
理论:
1) Normal Restore Points
对于Normal Restore Points, point的名称和SCN 保存在控制文件里。
Normal restore points 信息保存在控制文件中,属轻量级别,即使我们没有手工的删除这些points 信息,控制文件也会有删除这些信息,所以对于Normal restore points,我们不要其他的维护操作。
Restore Point 同Flashback Database 一样,也会产生image 文件,在没有启用Flashback Database的情况下,只在开始时创建一次image,并保存在FRA中。
2) Guaranteed Restore Points
Guaranteed restore points 的信息也是保存在控制文件里的,本质的不同是Guaranteed restore points 不会自动的删除,必须手工的清除这些信息。
如果我们创建了Guaranteed restore point,那么即使我们没有启用Flashback Database,那么我也可以恢复到我们创建的point。 但如果我们同时启用了Flashback Database,那么guaranteed restore point 会强制保留从那个point 依赖的flashback log 文件。 这样我们就会rewind从我们创建point 以来的任一个SCN。
一句话表示,就是在不启用FlashbackDatabase 的情况下, Guaranteed restore point 只能rewind到我们创建的点对应的SCN.
当我们创建了一个Guaranteed Restore Points,并且我们没有启动Flashback Database,那么在这种情况下,DB 会也会创建一个block 的镜像,并存在FRA空间里,这个和Flashback Database 的一致,那么不同的时,Flashback Database 会每隔一段时间创建一个block的image,而Restore Points 只在开始时创建一次,那么恢复的时候也就只能恢复到这个时间点。
这里要注意一点,我们创建Restore Point的名称和对应的SCN是保存在控制文件里的,这点前面有说明。
在不启用Flashback Database 的情况下,我们创建Guaranteed Restore Points,只创建一次image,那么会节省很多的FRA空间,这种方法在对数据库进行升级的时候很有用,在升级之前我们创建一次Guaranteed Restore Point,然后升级DB,如果升级失败,我们回退,如果升级生成,我们删除Restore Point。
实际上,在我们进行变更操作之前,只需要创建一个镜像就可以了,不需要时时记录变化。而Resotre Points 恰好满足我们的需求,又节省空间,并且恢复速度还快,因为它不像RMAN 那样需要进行restore。所以用他非常方便。
注:
guaranteed模式下只要有足够的闪回区,不会受DB_FLASHBACK_RETENTION_TARGE参数影响。
normal还原点至少保留2048个,保留的个数据受CONTROL_FILE_RECORD_KEEP_TIME参数决定,默认值是7天。
创建guaranteed还原点,必须满足以下条件:
a.创建一个guaranteed 还原点必须有SYSDBA系统权限。创建一个normal还原点,你必须有SELECT ANY DICTIONARY or FLASHBACK ANY TABLE privilege
b.必须创建flash recovery area
配置flash recover area共需要二个参数(DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE)这两个参数可以在数据库运行过程中在线修改,修改后立即生效,比如以下列子:
SQL>alter system set db_recovery_file_dest='+XXXX' scope=both;
SQL>alter system set db_recovery_file_dest_size='10g' scope=both sid='*';
c.数据库必须是归档模式(如果是担保还原点,归档目录必须是共享的。
操作流程:
1.先创建restore point
SQL> create restore point upgrade_point guarantee flashback database;
Restore point created.
2. 查看我们创建的restore point
SQL> select * from v$restore_point;
3. 进行打补丁或者升级等大动作
。。。。。
4.如果失败,就进行回滚
注意:执行Flashback Database时,DB 不能处于open状态.
SQL> shutdown immediate
SQL> startup mount;
SQL> select open_mode from v$database;
SQL>select * from v$restore_point;
SQL> flashback database to restore point upgrade_point;
--提示必须用Resetlogs打开:
SQL> alter database open resetlogs;
SQL>@?/rdbms/admin/utlrp.sql (重新编译失效对象)
SQL> drop restore point upgrade_point;
SQL>select * from v$restore_point;