【ORACLE备份与恢复】用户管理的:基于取消的数据库不完全恢复

1、首先,关闭数据库,然后备份所有的数据文件,注意,包括:system表空间的文件,用户表空间的文件、undo表空间的文件。


2、登录数据库,然后,创建一个表data01,并插入数据,提交,创建表data02、data03,并插入数据,提交,同时归档当前日志。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 1068937216 bytes
Fixed Size                  2182592 bytes
Variable Size             675283520 bytes
Database Buffers          385875968 bytes
Redo Buffers                5595136 bytes
数据库装载完毕。
数据库已经打开。
SQL> create table data01(v int) tablespace data01;

表已创建。

SQL> insert into data01 values(1);

已创建 1 行。

SQL> commit;

提交完成。

SQL> alter system switch logfile;

系统已更改。

SQL> create table data02 tablespace data01 as select * from dba_objects;

表已创建。

SQL> insert into data02 select * from dba_objects;

已创建12644行。

SQL> alter system switch logfile;

系统已更改。

SQL> create table data03 tablespace data01 as select * from dba_objects where 1=0;

表已创建。

SQL> insert into data03 select * from dba_objects;

已创建12645行。

SQL> alter system archive log current;

系统已更改。

SQL> commit;

提交完成。

SQL> alter system archive log current;

系统已更改。


3、关闭系统,删除存放data01、data02、data03数据的data01文件:

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

4、启动到mount,发现文件4,也就是data01文件是需要恢复的:

SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area 1068937216 bytes
Fixed Size                  2182592 bytes
Variable Size             675283520 bytes
Database Buffers          385875968 bytes
Redo Buffers                5595136 bytes
数据库装载完毕。
SQL> select file#,error from v$recover_file;

     FILE# ERROR
---------- -----------------------------------------------------------------
         4 FILE NOT FOUND

5、把所有的数据文件复制到指定的目录,注意,不仅是data01文件,还有其他所有的文件。


6、进行基于cancel的恢复,并用resetlogs选项来打开数据库:

SQL> recover database until cancel
ORA-00279: 更改 232570 (在 03/10/2014 21:03:03 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000015_0841612121.0001
ORA-00280: 更改 232570 (用于线程 1) 在序列 #15 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 232764 (在 03/11/2014 18:51:17 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000016_0841612121.0001
ORA-00280: 更改 232764 (用于线程 1) 在序列 #16 中
ORA-00278: 此恢复不再需要日志文件
‘D:\DEMO\ARCHIVE3\ARC0000000015_0841612121.0001‘


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 233240 (在 03/11/2014 19:36:19 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000017_0841612121.0001
ORA-00280: 更改 233240 (用于线程 1) 在序列 #17 中
ORA-00278: 此恢复不再需要日志文件
‘D:\DEMO\ARCHIVE3\ARC0000000016_0841612121.0001‘


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00279: 更改 233352 (在 03/11/2014 19:37:30 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001
ORA-00280: 更改 233352 (用于线程 1) 在序列 #18 中
ORA-00278: 此恢复不再需要日志文件
‘D:\DEMO\ARCHIVE3\ARC0000000017_0841612121.0001‘


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

ORA-00308: cannot open archived log
‘D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001‘
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。


SQL> recover database until cancel
ORA-00279: 更改 233352 (在 03/11/2014 19:37:30 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\DEMO\ARCHIVE3\ARC0000000018_0841612121.0001
ORA-00280: 更改 233352 (用于线程 1) 在序列 #18 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open resetlogs;

7、测试发现data01、data02、data03都已经恢复,跳过了日志序号为18的归档日志,这个序号为18的归档日志是在归档了data03表的操作之后,也就是归档了序号日志为17后,再次归档的日志,也就是序号为18的归档日志,所以这3个表才都恢复了:

SQL> select * from data01;

         V
----------
         1


SQL> select count(*) from data02;

  COUNT(*)
----------
     25288

SQL> select count(*) from data03;

  COUNT(*)
----------
         0

日志序号已重置为1,resetlogs的意思就是重置日志:

SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            d:\demo\archive3
最早的联机日志序列     1
下一个存档日志序列   1
当前日志序列           1

8、以resetlogs打开数据库后,过去的备份就不能直接使用,所以为了避免介质失败而无法恢复,必须要重新备份所有数据文件、控制文件:

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
D:\DEMO\SYSTEM01.DBF
D:\DEMO\SYSAUX01.DBF
D:\DEMO\UNDOTBS1.DBF
D:\DEMO\DATA01.DBF

SQL> alter database begin backup;

数据库已更改。


SQL> host copy d:\demo\system01.dbf d:\demo\backup1\system01.dbf;
已复制         1 个文件。

SQL> host copy d:\demo\sysaux01.dbf d:\demo\backup1\sysaux01.dbf;
已复制         1 个文件。

SQL> host copy d:\demo\undotbs01.dbf d:\demo\backup1\undotbs01.dbf;
系统找不到指定的文件。

SQL> host copy d:\demo\undotbs1.dbf d:\demo\backup1\undotbs1.dbf;
已复制         1 个文件。

SQL> host copy d:\demo\data01.dbf d:\demo\backup1\data01.dbf;
已复制         1 个文件。

SQL> alter database end backup;

数据库已更改。

SQL> alter database backup controlfile to ‘d:\demo\backup1\orcl.ctl‘ reuse;

数据库已更改。

SQL> alter system archive log current;

系统已更改。

【ORACLE备份与恢复】用户管理的:基于取消的数据库不完全恢复,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。