zoukankan      html  css  js  c++  java
  • 完全恢复-介质恢复

    恢复阶段

    1、损坏或丢失文件从备份中还原

    2、从归档和在线日志文件必要的被应用来改变数据,回滚块也在这时生成,这个称为前滚或恢复缓存

    3、数据库可能包含提交、不提交的改变数据

    4、回滚块被使用于任何未提交的数据被回滚,这个称为回滚或事务恢复

    5、数据库现在为恢复状态

    无开启归档模式恢复

    A、好处:

    执行简单,出错率低

    恢复时间就是还原所有的文件花费的时间

    B、不利:

    数据丢失,必须手工应用

    整个数据库被还原到关闭备份的最后一个时间点

    带有重做日志文件的备份非归档的恢复

    SQL>SHUTDOWN ABORT

    还原数据:

    UNIX: cp /BACKUP/*  /databases/db01/ORADATA

    NT: copy d:disk1ackup*.*  d:disk1data

    复制完成,开启实例

    CONN /AS SYSDBA

    STARTUP

    不带有重做日志文件的备份非归档的恢复

    关闭数据库

     shutdown immediate

    还原数据文件和控制文件

    数据文件的恢复 cp /db01/backup/*dbf /ORADATA/*

    控制文件恢复 cp /db01/backup/*.ctl /ORADTA

    没有备份在线日志,无法应用在线日志

    recover database until cancel

    SQL> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> startup mount;
    ORACLE 例程已经启动。
    
    Total System Global Area  612368384 bytes
    Fixed Size                  1250428 bytes
    Variable Size             239078276 bytes
    Database Buffers          364904448 bytes
    Redo Buffers                7135232 bytes
    数据库装载完毕。
    SQL> alter database open;
    alter database open
    *
    第 1 行出现错误:
    ORA-00338: 日志 1 (用于线程 1) 比控制文件更新
    ORA-00312: 联机日志 1 线程 1: 'D:ORADATAORCLREDO01.LOG'
    
    
    SQL> recover database until cancel;
    完成介质恢复。
    SQL> alter database open;
    alter database open
    *
    第 1 行出现错误:
    ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    
    
    SQL> alter database open restlogs;
    alter database open restlogs
                        *
    第 1 行出现错误:
    ORA-02288: 无效的 OPEN 模式
    
    
    SQL> alter database open resetlogs;
    
    数据库已更改。
    

      

    查看数据字典-哪个文件需要恢复

    V$RECOVER_FILE决定哪个文件需要恢复
    
    V$ARCHIVED_LOG罗列全部的归档日志
    
    V$RECOVERY_LOG罗列全部归档日志需要恢复的
    
    SQL> create tablespace tbs datafile '/u01/test01.dbf' size 100M;
    
    表空间已创建。
    
    #在归档模式下
    
    alter DATABASE  datafile '/u01/test01.dbf' offline;
    
    #不在归档下
    
    alter DATABASE  datafile '/u01/test01.dbf' offline DROP ;
    
    SQL> select * from v$recover_file;
    
    FILE# ONLINE ONLINE_STA ERROR CHANGE# TIME
    ---------- ---------- ---------- ---------- ---------- ---------------
    5 OFFLINE OFFLINE 1093567 05-4月 -15
    
    ERROR列有两种可能
    
    为NULL错误为止
    
    如果恢复不需要OFFLINE NORMAL
    
    CHANGE#列返回SCN从恢复开始
    
    例子阐述:归档模式下
    
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    我只有3组日志组,最旧的会被替换掉。
    
    在查看v$recovery_log
    SQL> select * from v$recovery_log;
    
       THREAD#  SEQUENCE# TIME           ARCHIVE_NAME
    ---------- ---------- -------------- ------------------------------
             1          3 02-4月 -15     D:FLASH_RECOVERY_AREAORCLAR
                                         CHIVELOG2015_04_06O1_MF_1_3_
                                         BL4WZX0Z_.ARC
    
    说明:v$log之前sequence=3的已经被替换了,只能在归档在恢复
    
    SQL> alter database datafile 7 online;
    alter database datafile 7 online
    *
    第 1 行出现错误:
    ORA-01113: 文件 7 需要介质恢复
    ORA-01110: 数据文件 7: 'D:ORADATAORCLGULL01.DBF'
    
    
    SQL> recover datafile 7;
    ORA-00279: 更改 1129093 (在 04/02/2015 21:26:50 生成) 对于线程 1 是必需的
    ORA-00289: 建议:
    D:FLASH_RECOVERY_AREAORCLARCHIVELOG2015_04_06O1_MF_1_3_%U_.ARC
    ORA-00280: 更改 1129093 (用于线程 1) 在序列 #3 中
    
    
    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    已应用的日志。
    完成介质恢复。
    
    SQL> alter database datafile 7 online;
    
    数据库已更改。
    
    备注说明:
    也可以使用 直接使用recover automatic datafile 7;
    
    再次把归档备份的另外的目录下,可以采用指定归档文件的位置恢复
    
    
    SQL> recover automatic datafile 7;
    ORA-00279: 更改 1143303 (在 04/06/2015 20:11:52 生成) 对于线程 1 是必需的
    ORA-00289: 建议:
    D:FLASH_RECOVERY_AREAORCLARCHIVELOG2015_04_06O1_MF_1_6_%U_.ARC
    ORA-00280: 更改 1143303 (用于线程 1) 在序列 #6 中
    ORA-00278: 此恢复不再需要日志文件
    'D:FLASH_RECOVERY_AREAORCLARCHIVELOG2015_04_06O1_MF_1_6_BL4Y290Z_.ARC'
    ORA-00308: 无法打开归档日志
    'D:FLASH_RECOVERY_AREAORCLARCHIVELOG2015_04_06O1_MF_1_6_BL4Y290Z_.ARC'
    ORA-27041: 无法打开文件
    OSD-04002: 无法打开文件
    O/S-Error: (OS 2) 系统找不到指定的文件。
    
    
    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    filename
    ORA-00308: 无法打开归档日志 'filename'
    ORA-27041: 无法打开文件
    OSD-04002: 无法打开文件
    O/S-Error: (OS 2) 系统找不到指定的文件。
    
    
    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    D:FLASH_RECOVERY_AREAORCLARCHIVELOGO1_MF_1_6_BL4Y290Z_.ARC
    已应用的日志。
    完成介质恢复。
    SQL>



     

    可以通过v$datafile_header的checkpoint_change#到v$archived_log.FIRST_CHANGE#和next_change#,确定需要恢复那些归档

      

    RECOVER 命令的使用

    A、在mount状态下

    recover [AUTOMATIC] database或recover [AUTOMATIC] datafile '/u01/test01.dbf';

    B、数据库打开下的恢复

    recover [AUTOMATIC] tablespace users或recover [AUTOMATIC] datafile 3;

    AUTOMATIC自动应用归档日志和重做日志文件,不使用AUTOMATIC只会应用重做日志

    更改普通数据文件(不是系统用的)的目录

    SQL> alter database datafile 7 offline;
    
    数据库已更改。
    
    SQL> alter database rename file 'D:ORADATAORCLGULL01.DBF' to 'D:ORADATAGULL
    01.DBF'
      2  ;
    
    操作系统中拷贝文件的指定的目录
    
    SQL> recover datafile 7;
    完成介质恢复。
    SQL> alter database datafile 7 online;
    
    数据库已更改。
    

    系统文件的恢复

    在使用过程无法使系统数据文件脱机

    SQL> alter database datafile 1 offline;
    alter database datafile 1 offline
    *
    第 1 行出现错误:
    ORA-01541: 系统表空间无法脱机; 如有必要请关闭
    

     需要更改系统文件system的路径,只能在mount状态下进行。

    SQL> shutdown immediate;
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    
    操作系统数据文件拷贝
    
    SQL> startup mount;
    ORACLE 例程已经启动。
    
    Total System Global Area  612368384 bytes
    Fixed Size                  1250428 bytes
    Variable Size             234883972 bytes
    Database Buffers          369098752 bytes
    Redo Buffers                7135232 bytes
    数据库装载完毕。
    SQL> alter database datafile 1 offline;
    
    数据库已更改。
    
    SQL> alter database rename file 'D:ORADATAORCLSYSTEM01.DBF' to 'D:ORADATASY
    STEM01.DBF';
    
    数据库已更改。
    
    SQL> alter database datafile 1 oNline;
    
    数据库已更改。
    
    SQL> alter database open;
    
    数据库已更改。
    
    SQL>
    

    数据文件丢失无备份的恢复数据文件

    如数据库关闭状态下,数据库MOUNT状态下,使数据文件(无备份)OFFLINE,打开数据库,用户只能使用这个表空间。

    如数据库在打开状态,立即把对应的表空间offline状态

    SQL> alter TABLESPACE GULL OFFLINE IMMEDIATE;
    
    表空间已更改。
    
    
    SQL> select * from v$recover_file;
    
         FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
    ---------- ------- ------- -------------------- ---------- --------------
             7 OFFLINE OFFLINE FILE NOT FOUND                0
             8 OFFLINE OFFLINE                         1147508 06-4月 -15
    
    
    
    SQL> alter database create datafile 'D:ORADATAGULL01.DBF';
    
    数据库已更改。
    
    
    SQL> select * from v$recover_file;
    
         FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
    ---------- ------- ------- -------------------- ---------- --------------
             7 OFFLINE OFFLINE UNKNOWN ERROR            579936 03-3月 -15
             8 OFFLINE OFFLINE                         1147508 06-4月 -15
    
    归档文件需要都在才能恢复
    SQL> recover automatic tablespace gull;
    
    表空间在线
    
    alter tablespace gull online;
    

      

    只读表空间的恢复

    1、备份之前的表空间是read-only,现在还是read-only。

    这样恢复不需要任何的redo log

    SQL> alter tablespace gull read only;
    
    表空间已更改。
    
    把表空间的数据文件gull01备份
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    把之前备份的gull01直接替换
    
    不需要做任何恢复就可以使用
    

      2、表空间现在是read-wirte,备份是通过read-only,需要应用redo和归档

    SQL> create tablespace gull datafile 'd:oradatagull01.dbf' size 20M;
    
    表空间已创建。
    
    SQL> alter tablespace gull read only;
    
    表空间已更改。
    
    备份数据文件gull01
    
    SQL> alter tablespace gull read write;
    
    表空间已更改。
    
    SQL> conn gull/oracle
    已连接。
    SQL> create table test0408 as select *from  dba_objects;
    
    表已创建。
    
    SQL> alter system checkpoint;
    
    系统已更改。
    
    SQL> alter system checkpoint;
    
    系统已更改。
    
    SQL> alter system checkpoint;
    
    系统已更改。
    
    SQL> alter system switch;
    alter system switch
                      *
    第 1 行出现错误:
    ORA-01900: 需要 LOGFILE 关键字
    
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter system switch logfile;
    
    系统已更改。
    
    SQL> alter database datafile 7 online;
    alter database datafile 7 online
    *
    第 1 行出现错误:
    ORA-01113: 文件 7 需要介质恢复
    ORA-01110: 数据文件 7: 'D:ORADATAGULL01.DBF'
    
    
    SQL> recover automatic datafile 7;
    完成介质恢复。
    SQL> alter database datafile 7 online;
    
    数据库已更改。
    
    SQL> select count(*) from  test0408;
    
      COUNT(*)
    ----------
         50365
    
    SQL>
    

      3、现在为read-only,之前为read-write

    先要把对应的文件改为offline,在恢复

    SQL> create table test040801 as select *from  dba_objects;
    
    表已创建。
    
    SQL> alter tablespace gull read only;
    
    表空间已更改。
    
    SQL> create table test040802 as select *from  dba_objects;
    create table test040802 as select *from  dba_objects
                                             *
    第 1 行出现错误:
    ORA-01647: 表空间 'GULL' 是只读, 无法在其中分配空间
    
    
    SQL> alter tablespace gull read write;
    alter tablespace gull read write
    *
    第 1 行出现错误:
    ORA-01122: 数据库文件 7 验证失败
    ORA-01110: 数据文件 7: 'D:ORADATAGULL01.DBF'
    ORA-01208: 数据文件是旧的版本 - 不能访问当前版本
    
    
    SQL> recover datafile 7;
    ORA-00283: 恢复会话因错误而取消
    ORA-01124: 无法恢复数据文件 7 - 文件在使用中或在恢复中
    ORA-01110: 数据文件 7: 'D:ORADATAGULL01.DBF'
    
    
    SQL> alter database datafile 7 offline;
    
    数据库已更改。
    
    SQL> recover automatic datafile 7;
    完成介质恢复。
    SQL> alter tablespace gull read write;
    alter tablespace gull read write
    *
    第 1 行出现错误:
    ORA-01135: DML/query 访问的文件 7 处于脱机状态
    ORA-01110: 数据文件 7: 'D:ORADATAGULL01.DBF'
    
    
    SQL> alter database datafile 7 online;
    
    数据库已更改。
    
    SQL> alter tablespace gull read write;
    
    表空间已更改。
    
    SQL> select count(*) from test040801;
    
      COUNT(*)
    ----------
         50366
    
    SQL>
    

      

  • 相关阅读:
    JQuery基础知识总结
    抽象方法与虚方法
    关于性能的几个术语
    T-SQL基础知识
    学习materialize
    VS2013 启用avalon 智能提示 Intelligence
    推荐一款开源的C#TCP通讯框架
    js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径(转载)
    HTML5的 input:file上传类型控制(转载)
    tinymce4.x 上传本地图片 (转载)
  • 原文地址:https://www.cnblogs.com/gull/p/4382293.html
Copyright © 2011-2022 走看看