ARCHIVELOG模式下用户管理的完全恢复(1)——恢复关闭的数据库!

 现在有一个用户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

说明:这里能完全恢复,是因为联机日志文件没有丢失。

你可能感兴趣的:(ARCHIVELOG模式下用户管理的完全恢复(1)——恢复关闭的数据库!)