现在有一个用户user1默认表空间是ttb1。
SQL> conn /as sysdba 已连接。 SQL> select file_id,file_name,tablespace_name from dba_data_files where tablespace_name = 'TTB1'; FILE_ID FILE_NAME TABLESPACE_NAME ---------- ------------------------------------------------------------ ------------------------------ 14 /u01/app/oracle/oradata/orcl/ttb1.dbf TTB1 SQL> select username,default_tablespace from dba_users where default_tablespace = 'TTB1'; USERNAME DEFAULT_TABLESPACE ------------------------------ ------------------------------ USER1 TTB1
表test里面有一条记录
SQL> conn user1/user1 已连接。 SQL> create table test(id int,value varchar2(20)); 表已创建。 SQL> insert into test values(1,'a'); 已创建 1 行。 SQL> commit; 提交完成。 SQL> select * from tab; TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- TEST TABLE SQL> select * from test; ID VALUE ---------- -------------------- 1 a
关闭数据库,备份表空间ttb1
SQL> conn /as sysdba 已连接。 SQL> shutdown immediate 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> ! cp /u01/app/oracle/oradata/orcl/ttb1.dbf /u01/app/oracle/backup/
打开数据库,再想test表中插入一条记录,模拟数据库异常关闭,并且ttb1表空间数据文件丢失。
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 数据库装载完毕。 数据库已经打开。 SQL> conn user1/user1 已连接。 SQL> insert into test values(2,'b'); 已创建 1 行。 SQL> commit; 提交完成。 SQL> select * from test; ID VALUE ---------- -------------------- 1 a 2 b SQL> conn /as sysdba 已连接。 SQL> shutdown abort 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> ! 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> recover datafile 14; 完成介质恢复。 SQL> alter database open; 数据库已更改。 SQL> select status from v$instance; STATUS ------------ OPEN SQL> conn user1/user1 已连接。 SQL> select * from test; ID VALUE ---------- -------------------- 1 a 2 b
说明:这里能完全恢复,是因为联机日志文件没有丢失。