现在有一个用户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
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
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/
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> 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> 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> 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
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
说明:这里能完全恢复,是因为联机日志文件没有丢失。