用户管理的完全恢复是指当数据文件出现介质失败时,使用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;
完成介质恢复。
完成介质恢复。
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;
数据库已更改。