这部分呈献了执行数据库闪的基本技术,通过时间表达式指定了希望的目标时间点、保证的或普通的还原点的名称、SCN。
场景:回退数据库到当前数据库incarnation中的时间点。回退数据库到刚好在最近的OPEN RESETLOGS之前的时间点。
默认在FLASHBACK DATABASE命令中使用的SCN是指数据库的incarnation的直接祖先路径中的SCN。
在数据库使用RESETLOGS选项打开之后,它并没有被抛弃,这个incarnation在这个路径中。
练习:执行闪回数据库操作
|
--1. 连接SQL*Plus到目标数据库,为FLASHBACK DATABASE确定希望的SCN、还原点、时间点 --1.1 确定在闪回数据库窗口中最早的SCN SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG; --1.2 闪回数据库可以达到的最近的SCN是数据库的当前的SCN SELECT CURRENT_SCN FROM V$DATABASE; --1.3 查询可用的保证的还原点 --注意:如果闪回窗口不能向回延伸到期望的目标时间点,并且在目标时间点没有保证的还原点,则可以使用数据库基于时间点的恢复来达到相同的结果 SELECT NAME, SCN, TIME, DATABASE_INCARNATION#, GUARANTEE_FLASHBACK_DATABASE FROM V$RESTORE_POINT WHERE GUARANTEE_FLASHBACK_DATABASE='YES';
NAME SCN TIME DATABASE_INCARNATION# GUA --------------- ---------- --------------------- --------------------- --- BEFORE_CHANGES 5753126 04-MAR-05 12.39.45 AM 2 YES --2. 一致地关闭数据库,确保不被任何实例打开,然后MOUNT数据库 SHUTDOWN IMMEDIATE; STARTUP MOUNT; --3. 重复步骤1中的查询。当数据库被关闭的时候,一些闪回日志被产生。 -- 如果因为快速恢复区空间的压力,一些闪回日志被删除,则你的目标SCN有可能达不到 -- 注意:如果当目标SCN超出了闪回窗口时运行FLASHBACK DATABASE,则FLASHBACK DATABASE会因为ORA-38729错误而失败, 此时数据库不会改变。 --4. 开启RMAN连接到目标数据库 --5. 运行SHOW命令来查看被配置的通道。在闪回操作过程中,RMAN可能需要从备份还原归档重做日志。 -- 查看通道是否被配置 SHOW ALL;
RMAN configuration parameters for database with db_unique_name PROD1 are: . . . CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS "SBT_LIBRARY=/usr/local/oracle/backup/lib/libobk.so"; -- 如果需要的设备和通道已经被配置了,则不需要其它的操作;否则 使用CONFIGURE命令配置自动通道或在RUN块中包含ALLOCATE CHANNEL命令 --6. 运行RMAN的FLASHBACK DATABASE命令 --6.1 指定SCN FLASHBACK DATABASE TO SCN 46963; --6.2 指定还原点 FLASHBACK DATABASE TO RESTORE POINT BEFORE_CHANGES; --6.3 指定时间 FLASHBACK DATABASE TO TIME "TO_DATE('09/20/05','MM/DD/YY')"; --如果FLASHBACK DATABASE命令完成了,则数据库保持MOUNT状态并且被恢复到指定的时间点 --7. 在SQL*Plus中以read-only方式打开数据库,运行查询来验证数据库的内容 ALTER DATABASE OPEN READ ONLY; -- 如果满足于结果,则执行完步骤8后结束,否则跳转到第9步。 --8. 如果满足结果,则执行下面互相排它的操作: --a. 通过带RESETLOGS选项打开数据库,使数据库可以更新;如果数据库当前是只读打开,则执行下面的命令:
SHUTDOWN IMMEDIATE STARTUP MOUNT ALTER DATABASE OPEN RESETLOGS; --注意:在执行了OPEN RESETLOGS选项之后,则在闪回数据库目标SCN之后的数据库改变都被抛弃. -- 不过可以使用"回退数据库到被抛弃的incarnation分支中的SCN"技术来回退数据库到保留在闪回窗口的SCN范围。
--b. 使用Oracle数据泵导出来进行对象的逻辑备份,然后使用RMAN来恢复数据库到当前的时间点。 -- 这个步骤通过重新应用在redo日志中的所有改变来撤销闪回数据库的影响,使数据库回到最近的SCN -- 在以读写方式重新打开数据库后,可以使用数据库泵导入工具导入被导出的对象 RECOVER DATABASE; --9. 如果你发现使用了错误的还原点、SCN或时间点,则MOUNT数据库,而后执行下面互斥的操作: --9.1 如果你选择的目标时间点不够向前,则使用另一个闪回数据库命令,在时间更向前回退数据库 FLASHBACK DATABASE TO SCN 42963; --比当前的SCN要早 --9.2 如果选择的目标SCN太往前了,则使用RECOVER DATABASE UNTIL TO 来使数据库向前前进到希望的SCN RECOVER DATABASE UNTIL SCN 56963; --比当前的SCN要晚 --9.3 如果想完全撤销FLASHBACK DATABASE命令的影响,则可以进行完全恢复.重新应用对数据库的所有改变,使数据库到达最近的SCN RECOVER DATABASE; |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1097338/ ,如需转载,请注明出处,否则将追究法律责任。