ITPub博客

首页 > 数据库 > Oracle > Backup And Recovery User's Guide-执行数据库时间点恢复

Backup And Recovery User's Guide-执行数据库时间点恢复

原创 Oracle 作者:LuiseDalian 时间:2014-02-28 21:11:17 0 删除 编辑

执行数据库时间点恢复

为了进行恢复,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命令在过程的开始设置目标时间,这样可以避免错误。

而不是在RESTORERECOVER命令中单独地使用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_LANGNLS_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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5676470