执行数据库时间点恢复
为了进行恢复,RMAN DBPITR还原在目标时间点之前的备份,然后使用增量备份或重做日志前滚数据库到目标时间点。
可以恢复到SCN、时间、日志序号、还原点。Oracle建议在重要的时间点创建还原点来使基于时间点的恢复更易于管理。
Oracle建议在可能的情况下执行闪回数据库而不是数据库时间点恢复。
使用备份的介质恢复应该是闪回技术不能用于撤销最近的改变时,最后的选择。
数据库时间点恢复的先决条件
数据库必须运行在归档模式
必须具有来自于DBPIRT的目标SCN之前的所有数据文件的备份,和在备份SCN和目标SCN之间的归档日志。
执行数据库时间点恢复
这部分描述DBPITR的基本步骤,这个过程假设如下:
n 在当前数据库incarnation中执行DBPITR,如果目标时间点不在当前的incarnation中,则参考18.6.3“恢复数据库到祖先incarnation”。
n 控制文件是当前的。如果需要还原备份的控制文件,则参考“使用备份控制文件执行恢复”(在第20章)
n 数据库正在使用当前的服务器参数文件。如果必须还原服务器参数文件,则参考“还原服务器参数文件”(第20章)
执行DBPITR,可以通过使用SET UNTIL命令在过程的开始设置目标时间,这样可以避免错误。
而不是在RESTORE和RECOVER命令中单独地使用UNTIL子句。
这可以确保从备份还原的数据文件具有足够早的时间戳,可以用于后序的RECOVER操作。
练习:执行DBPITR
--1. 确定结束恢复的时间、SCN、还原点、日志序号. 可以使用闪回查询功能来帮助你确定何时发生了逻辑损坏错误。 -- 如果对表开启了闪回数据归档,则可以查询存在于过去的数据。 -- 也可以使用预警日志来确定事件的时间,即从哪你必须恢复 -- 也可以使用SQL查询来确定包含目标SCN的日志序号,然后一直恢复到这个日志。 -- 下面的查询列出当前数据库incarnation中的所有日志 SELECT RECID, STAMP, THREAD#, SEQUENCE#, FIRST_CHANGE# FIRST_TIME, NEXT_CHANGE# FROM V$ARCHIVED_LOG WHERE RESETLOGS_CHANGE# = ( SELECT RESETLOGS_CHANGE# FROM V$DATABASE_INCARNATION WHERE STATUS = 'CURRENT');
RECID STAMP THREAD# SEQUENCE# FIRST_CHAN FIRST_TIM NEXT_CHANG ---------- ---------- ---------- ---------- ---------- --------- ---------- 1 344890611 1 1 20037 24-SEP-05 20043 2 344890615 1 2 20043 24-SEP-05 20045 3 344890618 1 3 20045 24-SEP-05 20046 -- 例,如果你发现用户在9:02意外地删除了一个表空间,则可以恢复到9:00,刚好在删除之前,但会丢失这个时间之后的改变。 --2. 如果你正在使用目标时间表达式而不是SCN,则在调用RMAN之前要确定时间格式环境变量是正确的 NLS_LANG = american_america.us7ascii NLS_DATE_FORMAT="Mon DD YYYY HH24:MI:SS" --3. 连接RMAN到目标数据库,使数据库进入MOUNT状态 SHUTDOWN IMMEDIATE; STARTUP MOUNT; --4. 在一个RUN块中执行下列操作 -- a. 使用SET UNTIL指定目标时间、还原点、SCN或日志序号。 如果指定一个时间则时间的格式为NLS_LANG和NLS_DATE_FORMAT环境变量指定的。 -- b. 如果自动通道没有被配置,则手动地根据需要分配磁盘或磁带通道。 -- c. 还原和恢复数据库 RUN { SET UNTIL SCN 1000; RESTORE DATABASE; RECOVER DATABASE; }
-- 其它的形式 SET UNTIL TIME 'Nov 15 2004 09:00:00'; --使用时间表达式 SET UNTIL SEQUENCE 9923; --使用日志序号 SET UNTIL RESTORE POINT before_update; --使用还原点
--5. 在SQL*Plus中以read-only方式打开数据库,根据需要执行一些查询确定逻辑损坏已经被回退了。 ALTER DATABASE OPEN READ ONLY; -- 如果对数据库的状态满意,则执行完第6步后结束;如果结果不是希望的,则你可能选择了错误的SCN。 -- 此时应该更深入地调查一下这种不需要的改变,并确定一个新的目标SCN,重复DBPITR --6. 如果对希望的结果满意,则可执行下面互斥的操作之一 -- a.以读写方式打开数据库,丢弃所有在目标SCN之后的改变。 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE OPEN RESETLOGS; -- 如果数据文件是脱机的,则OPEN RESETLOGS操作会失败,除非数据文件是正常脱机或是只读的。 -- 在RESETLOGS之后,可以使只读的文件或正常脱机的表空间联机,因为它们不需要任何redo -- b. 使用Data Pump Export工具从数据库中导出一个或多个数据库对象。然后可以恢复数据库到当前的时间点,然后重新导入前面导出的对象。 -- 这样就可以使这些对象回到不希望的改变之前的状态,并且不会丢失其它的改变。 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1097342/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1097342/