zoukankan      html  css  js  c++  java
  • 5. 用户管理的完全恢复

    用户管理的完全恢复是指当数据文件出现介质失败时,使用OS 命令复制数据文件备份,并使用SQL 恢复命令应用归档日志和重做日志,最终将数据文件恢复到失败点的状态。因为用户管理的恢复需要借助OS 命令转储备份文件,所以也被称为OS 完全恢复。通过使用OS 完全恢复,可以确保数据库不会丢失任何数据。注意,完全恢复只适用于ARCHIVELOG 模式。

    5.1 完全恢复简介

    5.1.1 诊断数据文件介质失败

    1. 在关闭状态下诊断数据文件介质失败

    当数据库处于关闭状态时,如果数据文件被误删除或者数据文件所在磁盘损坏,那么在打开数据库时后台进程DBWR 会将错误信息写入其跟踪文件,并且在屏幕上显示如下错误信息。

    SQL> startup
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              62915940 bytes
    Database Buffers          100663296 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'

    2. 在OPEN 状态下诊断数据文件丢失或损坏

    当数据库处于OPEN 状态时,如果数据文件出现介质失败,那么系统发出检查点时,ORACLE 会自动脱机相应的数据文件。

    SQL> conn scott/tiger;
    已连接。
    SQL> select * from emp;
    select * from emp
                  *
    第 1 行出现错误:
    ORA-00376: 此时无法读取文件 4
    ORA-01110: 数据文件 4: 'D:\DEMO1\USERS01.DBF'

     

    3. 在OPEN 状态下诊断数据块损坏

    当数据库处于OPEN 状态时,若数据文件的某个或某些数据块发生损坏,并且SQL 操作没有涉及到损坏数据块,那么不会显示任何错误信息;如果SQL 操作访问到损坏数据块,那么服务器进程会终止SQL 操作,将损坏数据块的信息写入ALERT 文件和用户进程跟踪文件,并且在屏幕上显示如下错误信息:

    SQL> select * from emp;
    select * from emp1
                  *
    ERROR 位于第一行:
    ORA-01578: ORACLE 数据块损坏(文件号4,块号 34)
    ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'

    5.1.2 转储数据文件到其他磁盘

    当执行恢复操作时,ORACLE 会根据控制文件所记载的信息来定位数据文件。如果数据文件备份被复制到其他磁盘,那么为了使得控制文件可以准确定位该数据文件备份,必须修改控制文件所记载的相应数据文件信息。当数据库处于MOUNT 状态时,DBA 可以改变任何数据文件的位置;当数据库处于OPEN 状态时,DBA 可以改变除SYSTEM 表空间之外所有其他表空间的数据文件位置。

    1. 在MOUNT 状态下改变数据文件位置

    MOUNT 状态下可以改变任何数据文件的位置,但该命令主要用于改变SYSTEM 表空间的数据文件位置。注意,在执行ALTER DATABASE RENAME FILE 命令之前,必须确保已经将数据副本复制到目标位置。

    SQL> startup mount
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              62915940 bytes
    Database Buffers          100663296 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。

    SQL> conn / as sysdba
    已连接。
    SQL> host copy d:\demo\system01.dbf d:\demo1\system01.dbf

    SQL> alter database rename file 'd:\demo\system01.dbf' to 'd:\demo1\system01.dbf' ;

    数据库已更改。

     

    2. 在OPEN 状态下改变数据文件位置

    当数据库处于OPEN 状态时,既可以使用ALTER TABLESPACE RENAME DATAFILE 命令改变数据文件位置,也可以使用ALTER DATABASE RENAME FILE 命令改变数据文件位置。要注意以下事项:

    • 当数据库处于OPEN 状态时,不能改变SYSTEM 表空间的数据文件位置。
    • 在修改数据文件位置之前,必须确保已经将副本文件复制到目标位置。
    • 在修改数据文件位置之前,必须首先使表空间或数据文件脱机。

    SQL> alter database datafile 'd:\demo\users01.dbf' offline;

    数据库已更改。

    SQL> host copy d:\demo\users01.dbf d:\demo1\users01.dbf;

    SQL> alter tablespace users rename datafile 'd:\demo\users01.dbf' to 'd:\demo1\users01.dbf';

    表空间已更改。

    5.1.3 完全恢复命令

    当使用用户管理的完全恢复时,在将数据文件备份复制到目标位置之后,还需要使用RECOVER DATABASE、RECOVER TABLESPACE 或 RECOVER DATAFILE 三种命令应用归档日志和重做日志。

    1. RECOVER DATABASE

    用于恢复数据库的多个数据文件。只能在MOUNT 状态下运行。此命令是SQL *Plus 命令,对应的SQL 恢复命令是ALTER DATABASE RECOVER DATABASE。

    SQL> recover database
    完成介质恢复。

    2. RECOVER TABLESPACE

    用于恢复一个或多个表空间的所有数据文件。只能在OPEN 状态下运行。此命令是SQL *Plus 命令,对应的SQL 恢复命令是ALTER DATABASE RECOVER TABLESPACE。

    SQL> recover tablespace users;
    完成介质恢复。

    3. RECOVER DATAFILE

    用于恢复一个或多个数据文件。可以在MOUNT 和OPEN 状态下运行。执行此命令时,既可以指定数据文件名称,也可以指定数据文件编号。此命令是SQL *Plus 命令,对应的SQL 恢复命令为ALTER DATABASE RECOVER DATAFILE。

    SQL> recover datafile 1;
    完成介质恢复。

    SQL> recover datafile 'd:\demo\system01.dbf';
    完成介质恢复。

    4. 比较RECOVER DATABASE 、RECOVER TABLESPACE 和 RECOVER DATAFILE 命令以使用RECOVER DATAFILE 命令

    RECOVER DATABASE :MOUNT 状态,大量数据文件出现介质失败

    RECOVER TABLESPACE :OPEN 状态,特定表空间的数据文件全部损坏

    RECOVER DATAFILE :MOUNT 和 OPEN 状态,数据文件较少或特定表空间的部分数据文件损坏(可适用于RECOVER DATABASE 和 RECOVER TABLESPACE 两种情况)。

    5.1.4 应用归档日志

    当执行用户管理的完全恢复时,需要应用归档日志和重做日志的事务变化。此时,如果归档日志所记载的事务变化在重做日志中仍然存在,那么服务器进程会直接应用重做日志的事务变化,而不会应用归档日志的事务变化。应用归档日志时,DBA 既可以按照ORACLE 的建议应用归档日志,也可以指定归档日志文件名。另外,如果完全恢复所需的归档日志在特定目录下全部存在,那么可以使用服务器进程自动应用归档日志。

    1. 使用ORACLE 建议的归档日志位置。

    执行恢复命令时,如果不指定归档位置,那么ORACLE 会提供建议应用的归档日志。

    SQL> recover datafile 1;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

    2. 指定归档日志位置

    如果在默认位置下不存在归档日志,那么当执行完全恢复时,可以指定归档日志位置。

    SQL> recover from 'c:\demo\archive' datafile 4;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: C:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL} 

     

    3. 自动应用归档日志

    如果完全恢复所需的归档日志都存放在特定目录中,那么可以使用服务器进程自动应用归档日志。自动应用归档日志有三种方法:

    • 在提示语法下指定AUTO

     SQL> recover datafile 4;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto

    • 在开始恢复之前设置自动恢复选项

    SQL> set autorecovery on
    SQL> recover datafile 4

    • 在恢复命令中指定自动恢复选项

    SQL> recover automatic datafile 4;
    完成介质恢复。

    5.1.5 查看恢复文件

    1. 列出需要恢复的数据文件

    SQL> select file#,error,change# from v$recover_file;

         FILE# ERROR                   CHANGE#
    ---------- -------------------- ----------
             4                          799995

     

    2. 列出日志历史信息

    SQL> select * from v$loghist;

       THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIME     SWITCH_CHANGE#
    ---------- ---------- ------------- -------------- --------------
             1          1        534907 02-9月 -08             543144
             1          2        543144 02-9月 -08             575915
             1          3        575915 04-9月 -08             600053
             1          4        600053 06-9月 -08             600058
             1          5        600058 06-9月 -08             602888
             1          6        602888 07-9月 -08             602908
             1          7        602908 07-9月 -08             624288
             1          8        624288 07-9月 -08             644475
             1          9        644475 07-9月 -08             664673
             1         10        664673 07-9月 -08             795591
             1         11        795591 09-9月 -08             795634
             1         12        795634 09-9月 -08             797096
             1         13        797096 09-9月 -08             799800

    3. 列出恢复要使用的归档日志

    SQL> select sequence#,archive_name from v$recovery_log;

    SEQUENCE# ARCHIVE_NAME
    ---------- --------------------------------------------------
            14 D:\DEMO\ARCHIVE\14_1_664374623.LOG
            15 D:\DEMO\ARCHIVE\15_1_664374623.LOG
            16 D:\DEMO\ARCHIVE\16_1_664374623.LOG
            17 D:\DEMO\ARCHIVE\17_1_664374623.LOG
            18 D:\DEMO\ARCHIVE\18_1_664374623.LOG
            19 D:\DEMO\ARCHIVE\19_1_664374623.LOG
            20 D:\DEMO\ARCHIVE\20_1_664374623.LOG
            21 D:\DEMO\ARCHIVE\21_1_664374623.LOG
            22 D:\DEMO\ARCHIVE\22_1_664374623.LOG
            23 D:\DEMO\ARCHIVE\23_1_664374623.LOG
            24 D:\DEMO\ARCHIVE\24_1_664374623.LOG
            25 D:\DEMO\ARCHIVE\25_1_664374623.LOG
            26 D:\DEMO\ARCHIVE\26_1_664374623.LOG
            27 D:\DEMO\ARCHIVE\27_1_664374623.LOG

    已选择14行。

    5.2 在MOUNT 状态下恢复数据文件

    MOUNT 状态下恢复SYSTEM 表空间数据文件步骤如下:

    (1) 装载数据库。

    (2) 确定需要恢复的数据文件。

    (3) 使用cp 或 copy 命令复制数据文件备份。

    (4) 恢复数据文件。

    (5) 打开数据库。 


    SQL> startup force mount
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              71304548 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    SQL> host del d:\demo\system01.dbf

    SQL> alter database open
      2  ;
    alter database open
    *
    第 1 行出现错误:
    ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 1: 'D:\DEMO\SYSTEM01.DBF'

    SQL> select file#,error from v$recover_file;

         FILE# ERROR
    ---------- -----------------------------------------------------------------
             1 FILE NOT FOUND

    SQL> alter database rename file 'd:\demo\system01.dbf' to 'd:\demo3\system01.dbf';

    数据库已更改。

    SQL> recover datafile 1;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00279: 更改 803033 (在 09/10/2008 10:37:57 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\15_1_664374623.LOG
    ORA-00280: 更改 803033 (用于线程 1) 在序列 #15 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\14_1_664374623.LOG'

    ORA-00279: 更改 803456 (在 09/10/2008 10:43:29 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\16_1_664374623.LOG
    ORA-00280: 更改 803456 (用于线程 1) 在序列 #16 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\15_1_664374623.LOG'

    ORA-00279: 更改 817043 (在 09/11/2008 11:13:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\17_1_664374623.LOG
    ORA-00280: 更改 817043 (用于线程 1) 在序列 #17 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\16_1_664374623.LOG'

    ORA-00279: 更改 817114 (在 09/11/2008 11:13:42 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\18_1_664374623.LOG
    ORA-00280: 更改 817114 (用于线程 1) 在序列 #18 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\17_1_664374623.LOG'

    ORA-00279: 更改 817121 (在 09/11/2008 11:14:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\19_1_664374623.LOG
    ORA-00280: 更改 817121 (用于线程 1) 在序列 #19 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\18_1_664374623.LOG'

    ORA-00279: 更改 817236 (在 09/11/2008 11:14:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\20_1_664374623.LOG
    ORA-00280: 更改 817236 (用于线程 1) 在序列 #20 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\19_1_664374623.LOG'

    已应用的日志。
    完成介质恢复。
    SQL> alter database open;

    数据库已更改。

    5.3 在OPEN 状态下恢复关闭后意外丢失的数据文件

    (1) 装载数据库。

    (2) 确定需要恢复的数据文件。

    (3) 使数据文件脱机。

    (4) 打开数据库。

    (5) 复制数据文件备份。

    (6) 恢复数据文件。

    (7) 使数据文件联机。

    SQL> startup force mount;
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              71304548 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    SQL> host del d:\demo\users01.dbf;

    SQL> alter database open;
    alter database open
    *
    第 1 行出现错误:
    ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 4: 'D:\DEMO\USERS01.DBF'

    SQL> select status from v$instance;

    STATUS
    ------------
    MOUNTED

    SQL> select file#,error from v$recover_file;

         FILE# ERROR
    ---------- -----------------------------------------------------------------
             4 FILE NOT FOUND

    SQL> alter database datafile 4 offline;

    数据库已更改。

    SQL> alter database open;

    数据库已更改。

    SQL> host copy d:\demo1\users01.dbf d:\demo\users01.dbf

    SQL> recover datafile 4;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00279: 更改 803033 (在 09/10/2008 10:37:57 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\15_1_664374623.LOG
    ORA-00280: 更改 803033 (用于线程 1) 在序列 #15 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\14_1_664374623.LOG'

    ORA-00279: 更改 803456 (在 09/10/2008 10:43:29 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\16_1_664374623.LOG
    ORA-00280: 更改 803456 (用于线程 1) 在序列 #16 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\15_1_664374623.LOG'

    ORA-00279: 更改 817043 (在 09/11/2008 11:13:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\17_1_664374623.LOG
    ORA-00280: 更改 817043 (用于线程 1) 在序列 #17 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\16_1_664374623.LOG'

    ORA-00279: 更改 817114 (在 09/11/2008 11:13:42 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\18_1_664374623.LOG
    ORA-00280: 更改 817114 (用于线程 1) 在序列 #18 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\17_1_664374623.LOG'

    ORA-00279: 更改 817121 (在 09/11/2008 11:14:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\19_1_664374623.LOG
    ORA-00280: 更改 817121 (用于线程 1) 在序列 #19 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\18_1_664374623.LOG'

    ORA-00279: 更改 817236 (在 09/11/2008 11:14:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\20_1_664374623.LOG
    ORA-00280: 更改 817236 (用于线程 1) 在序列 #20 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\19_1_664374623.LOG'

    已应用的日志。
    完成介质恢复。
    SQL> alter database datafile 4 online;

    数据库已更改。

     

    5.4 在OPEN 状态下恢复打开时意外丢失的数据文件

    (1) 确定需要恢复的数据文件。

    (2) 使数据文件脱机。

    (3) 复制数据文件备份。

    (4) 恢复表空间或数据文件。

    (5) 使表空间或数据文件联机。

     
    SQL> startup
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              71304548 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> select count(1) from scott.test;
    select count(1) from scott.test
                               *
    第 1 行出现错误:
    ORA-00376: 此时无法读取文件 4
    ORA-01110: 数据文件 4: 'E:\USERS01.DBF'

    SQL> select status from v$instance;

    STATUS
    ------------
    OPEN

    SQL> select file#,error from v$recover_file;

         FILE# ERROR
    ---------- -----------------------------------------------------------------
             4 FILE NOT FOUND

    SQL> alter database datafile 4 offline;

    数据库已更改。

    SQL> host copy d:\demo1\users01.dbf e:\users01.dbf

    SQL> select file#,error from v$recover_file;

         FILE# ERROR
    ---------- -----------------------------------------------------------------
             4

    SQL> recover datafile 4;
    ORA-00279: 更改 799995 (在 09/10/2008 09:17:19 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\14_1_664374623.LOG
    ORA-00280: 更改 799995 (用于线程 1) 在序列 #14 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00279: 更改 803033 (在 09/10/2008 10:37:57 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\15_1_664374623.LOG
    ORA-00280: 更改 803033 (用于线程 1) 在序列 #15 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\14_1_664374623.LOG'

    ORA-00279: 更改 803456 (在 09/10/2008 10:43:29 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\16_1_664374623.LOG
    ORA-00280: 更改 803456 (用于线程 1) 在序列 #16 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\15_1_664374623.LOG'

    ORA-00279: 更改 817043 (在 09/11/2008 11:13:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\17_1_664374623.LOG
    ORA-00280: 更改 817043 (用于线程 1) 在序列 #17 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\16_1_664374623.LOG'

    ORA-00279: 更改 817114 (在 09/11/2008 11:13:42 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\18_1_664374623.LOG
    ORA-00280: 更改 817114 (用于线程 1) 在序列 #18 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\17_1_664374623.LOG'

    ORA-00279: 更改 817121 (在 09/11/2008 11:14:00 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\19_1_664374623.LOG
    ORA-00280: 更改 817121 (用于线程 1) 在序列 #19 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\18_1_664374623.LOG'

    ORA-00279: 更改 817236 (在 09/11/2008 11:14:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\20_1_664374623.LOG
    ORA-00280: 更改 817236 (用于线程 1) 在序列 #20 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\19_1_664374623.LOG'

    ORA-00279: 更改 817393 (在 09/11/2008 11:14:57 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\21_1_664374623.LOG
    ORA-00280: 更改 817393 (用于线程 1) 在序列 #21 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\20_1_664374623.LOG'

    已应用的日志。
    完成介质恢复。
    SQL> col name format a50
    SQL> select name,status from v$datafile;

    NAME                                               STATUS
    -------------------------------------------------- -------
    D:\DEMO\SYSTEM01.DBF                               SYSTEM
    D:\DEMO\UNDOTBS01.DBF                              ONLINE
    D:\DEMO\SYSAUX01.DBF                               ONLINE
    E:\USERS01.DBF                                     OFFLINE
    D:\DEMO\QUERY.DBF                                  ONLINE

    SQL> alter database datafile 'e:\users01.dbf' online;

    数据库已更改。

    SQL> select count(1) from scott.test;

      COUNT(1)
    ----------
       1200000

     

    5.5 在OPEN 状态下恢复未备份数据文件

    (1) 装载数据库。

    (2) 确定需要恢复的数据文件。

    (3) 使数据文件脱机。

    (4) 打开数据库。

    (5) 重新建立数据文件。

    (6) 恢复数据文件。

    (7) 使数据文件联机。

    SQL> startup
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              71304548 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    数据库已经打开。
    SQL> create tablespace user01 datafile 'd:\demo\user01.dbf' size 500M;

    表空间已创建。

    SQL> create table scott.test01
      2  (
      3      code nvarchar2(20),
      4      name nvarchar2(20)
      5  )
      6  tablespace user01;

    表已创建。

    SQL> shutdown immediate
    数据库已经关闭。
    已经卸载数据库。
    ORACLE 例程已经关闭。
    SQL> host del d:\demo\user01.dbf

    SQL> startup
    ORACLE 例程已经启动。

    Total System Global Area  167772160 bytes
    Fixed Size                  1247900 bytes
    Variable Size              71304548 bytes
    Database Buffers           92274688 bytes
    Redo Buffers                2945024 bytes
    数据库装载完毕。
    ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
    ORA-01110: 数据文件 6: 'D:\DEMO\USER01.DBF'

    SQL> select status from v$instance;

    STATUS
    ------------
    MOUNTED

    SQL> select file#,error from v$recover_file;

         FILE# ERROR
    ---------- -----------------------------------------------------------------
             6 FILE NOT FOUND

    SQL> alter database datafile 6 offline;

    数据库已更改。

    SQL> alter database open;

    数据库已更改。

    SQL> alter database create datafile 'd:\demo\user01.dbf';

    数据库已更改。

    SQL> recover datafile 6;
    ORA-00279: 更改 848418 (在 09/11/2008 18:10:45 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\26_1_664374623.LOG
    ORA-00280: 更改 848418 (用于线程 1) 在序列 #26 中

    指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00279: 更改 848634 (在 09/11/2008 18:14:41 生成) 对于线程 1 是必需的
    ORA-00289: 建议: D:\DEMO\ARCHIVE\27_1_664374623.LOG
    ORA-00280: 更改 848634 (用于线程 1) 在序列 #27 中
    ORA-00278: 此恢复不再需要日志文件 'D:\DEMO\ARCHIVE\26_1_664374623.LOG'

    已应用的日志。
    完成介质恢复。
    SQL> alter database datafile 6 online;

    数据库已更改。

    E-MAIL:yiwuya@hotmail.com
    MSN:yiwuya@hotmail.com
    QQ:304899972
    纺织软件
  • 相关阅读:
    HUST 1372 marshmallow
    HUST 1371 Emergency relief
    CodeForces 629D Babaei and Birthday Cake
    CodeForces 629C Famil Door and Brackets
    ZOJ 3872 Beauty of Array
    ZOJ 3870 Team Formation
    HDU 5631 Rikka with Graph
    HDU 5630 Rikka with Chess
    CodeForces 626D Jerry's Protest
    【POJ 1964】 City Game
  • 原文地址:https://www.cnblogs.com/yiwuya/p/1289698.html
Copyright © 2011-2022 走看看