zoukankan      html  css  js  c++  java
  • oracle 日志恢复数据

    1:首先查找redo,如果redo有可供恢复的信息,就那redo中的信息进行恢复,此时一般在恢复时,类似如下:
    SQL> recover database;
    Media recovery complete.
    2:如果在redo中没有找到可供恢复的信息,oracle会去找archive log进行恢复,此时会有下面的提示:
    SQL> recover database;
    ORA-00279: change 25317158 generated at 08/27/2006 18:36:58 needed for thread 1
    ORA-00289: suggestion : /opt/oracle/product/9.2.0/dbs/arch/T0001S0000000030.ARC
    ORA-00280: change 25317158 for thread 1 is in sequence #30

    oracle在恢复完归档信息后,不会在去找redo文件继续进行完全恢复,此时要人工去指定在线redo进行恢复,这也是此种恢复的一个缺陷,rman恢复就不会有此问题。

    Oracle 的日志模式分为 archivelog (启用归档日志) 和 noarchivelog () 两种模式。
    查看数据库日志模式:
    select log_mode from v$database;

    如何启用Oracle的归档方式:
    1.参照以下内容编辑init.ora文件:
    log_archive_start = true
    log_archive_dest_1 = " LOCATION=D:OracleoradataORCLarchive "
    og_archive_format = %%ORACLE_SID%%T%TS%S.ARC
    2.关闭数据库
    svrmgrl> connect internal
    svrmgrl> shutdown normal
    3.然后启动实例并安装该数据库,但不打开数据库。
    svrmgrl> startup mount
    4.接着,发布下列更改数据库的命令。
    Svrmgrl> alter database archivelog;
    5.现在,数据库已经更改为归档方式,您可以打开数据库。
    svrmgrl> alter database open;
    提示:也可以使用DBA studio工具启用数据库的归档方式,操作很简单
     
     
    Oracle 归档日志还原数据(还原前请做好冷备份):
    sqlplus /nolog
    conn / as sysdba;
    archive log list;  (查看日志文件列表,查看单个日志文件可用 strings xxx.dbf to xx.txt)
     
    recover database until time '2011-09-15:15:00:00'; 
    (提示: 使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。) 
    基于时间的恢复(time-based recovery)
      为使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387(丢失重演日志)的时间,通过执行查询语句“select * from v$log_history where sequence#=387;”
    或者
    recover database until change 9999;
    alter database open resetlogs; (应用该命令前请确认已数据库已备份,如打开失败,日志将不可用)

    联机重演日志没有丢失应使用完成恢复,如联机重演日志损坏,而又没有备份,就只能进行不完全恢复。

    一、完全恢复:
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database;”
    4.按下ENTER,接受默认值。
    5.然后输入命令“alter database open;”完成数据库恢复。

    二、不完全恢复
    警告:
    应用不完成恢复前,必须将数据库做一次完全冷备份,因为应用不完全恢复后,联机重演日志将重置,以前的所有日志不可用。
    如果恢复不成功,数据库就不能使用了。再次强调,做完全冷备份后再应用不完全恢复。

    1).基于变化的恢复(change-based recovery)
        要 执行基于变化的恢复,需要知道丢失日志之前的系统写入归档重演日志的最大的变化号(SCN),然后可以启动恢复语句恢复数据库直到改变 scn_number,其中比scn_number是写到已归档重演日志文件顺序号386的SCN(即,小于丢失日志顺序号387的SCN)。可以从 V$log_history视图中得到SCN信息。

    select first_change# from v$log_history where sequence#=387;

    其中387为最后一个有效的日志文件号加1,该例是查找386.
    知道了SCN后,使用下述步骤完成恢复
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until change 9999;”
    4.在回答Oracle第一个归档重演日志建议信息时,输入“auto”,Oracle在找到第387号重演日志之前停止恢复。
    5.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)

    2).基于停止恢复(cancel-based recovery)
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until cancel;”,Oracle提示需要的第一个归档重演日志文件名.按下ENTER键接受缺省文件名,并且—路ENTER直到询问顺序号387的日志。输入“cancel”,停止恢复操作。
    4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认数据库已备份,如打开失败,日志将不可用)

    3).基于时间的恢复(time-based recovery)
    为 使用基于时间的恢复,必须知道记录在V$log_history归档重演日志序号387(丢失重演日志)的时间,通过执行查询语句 “select time from v$log_history where sequence#=387;”得到。本例得到的时间 是:2002-06-23 14:42:04

    现在开始实施恢复。
    1.使用命令“svrmgrl”调用行方式服务器管理;
    2.输入命令“connect internal”,然后输入命令“startup mount’;
    3.输入命令“recover database until time '2002/06/23 14:42:04';”,Oracle提示需要的第一个归档重演日志文件名,输入“auto”,Oracle恢复归档重演日志直到序号为387的日志,停止恢复操作。
    4.用命令“alter database open resetlogs;”打开数据库。(应用该命令前请确认已数据库已备份,如打开失败,日志将不可用)

    提示: 使用基于时间的恢复,时间的格式是YYYY/MM/DD HH24:MI:SS,并且用单引号括起。

  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/bolang100/p/6836067.html
Copyright © 2011-2022 走看看