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
    纺织软件
  • 相关阅读:
    大数据平台R语言web UI应用架构 设计与开发
    R 报错:package ‘***’ is not available (for R version ****) 的解决方案
    shiny server SparkR web展示界面(二)
    shiny server SparkR web展示界面(一)
    Cento OS 6.5 YUM 安装 R 的方法
    Linux 下建立 Git 与 GitHub 的连接
    【linux】Ubuntu16.04中文输入法安装
    【python练手】获取城市天气质量
    【转载】【python】python练手项目
    【转载】【技巧总结】PyCharm怎么克隆github上开源的项目
  • 原文地址:https://www.cnblogs.com/yiwuya/p/1289698.html
Copyright © 2011-2022 走看看