继续使用前面的试验环境,可以看见user1用户下面有两条记录
- SQL> show user
- USER 为 "USER1"
- SQL> select * from test;
- ID VALUE
- ---------- --------------------
- 1 a
- 2 b
SQL> show user
USER 为 "USER1"
SQL> select * from test;
ID VALUE
---------- --------------------
1 a
2 b
现在我就正常关闭数据库,删除现在的最新的数据文件
- SQL> conn /as sysdba
- 已连接。
- SQL> shutdown immediate
- 数据库已经关闭。
- 已经卸载数据库。
- ORACLE 例程已经关闭。
- SQL> ! rm -rf /u01/app/oracle/oradata/orcl/ttb1.dbf
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/ttb1.dbf
启动数据库会发现缺少数据文件
- SQL> conn /as sysdba
- 已连接到空闲例程。
- SQL> startup
- ORACLE 例程已经启动。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 117443880 bytes
- Database Buffers 46137344 bytes
- Redo Buffers 2924544 bytes
- 数据库装载完毕。
- ORA-01157: 无法标识/锁定数据文件 14 - 请参阅 DBWR 跟踪文件
- ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 117443880 bytes
Database Buffers 46137344 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 14 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
还记得前面备份过一次ttb1表空间吗,但是它不是最新的数据文件
- SQL> ! cp /u01/app/oracle/backup/ttb1.dbf /u01/app/oracle/oradata/orcl/ttb1.dbf
- SQL> select status from v$instance;
- STATUS
- ------------
- MOUNTED
- SQL> alter database open;
- alter database open
- *
- 第 1 行出现错误:
- ORA-01113: 文件 14 需要介质恢复
- ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
SQL> ! cp /u01/app/oracle/backup/ttb1.dbf /u01/app/oracle/oradata/orcl/ttb1.dbf
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01113: 文件 14 需要介质恢复
ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
将数据文件离线就能够open数据库了
- SQL> alter database datafile 14 offline;
- 数据库已更改。
- SQL> alter database open;
- 数据库已更改。
- SQL> select * from v$recover_file;
- FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
- ---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
- 14 OFFLINE OFFLINE 1004104 08-10月-11
- SQL> recover datafile 14;
- 完成介质恢复。
- SQL> alter database datafile 14 online;
- 数据库已更改。
SQL> alter database datafile 14 offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
14 OFFLINE OFFLINE 1004104 08-10月-11
SQL> recover datafile 14;
完成介质恢复。
SQL> alter database datafile 14 online;
数据库已更改。
查看结果
- SQL> conn user1/user1
- 已连接。
- SQL> select * from test;
- ID VALUE
- ---------- --------------------
- 1 a
- 2 b