代码改变世界

10g跨越resetlogs时间点进行完全/不完全恢复

2011-12-30 16:44  Tracy.  阅读(718)  评论(0编辑  收藏  举报
一、全备份数据库

C:\> rman target /

RMAN> backup database plus archivelog delete all input;


二、进行数据的更改

C:\> sqlplus "/ as sysdba"

SQL > insert into tony.test select * from dba_objects ;
SQL > commit;

SQL > select count(*) from tony.test ;

COUNT(*)
----------
46598  

SQL > alter system switch logfile; 

 

SQL > insert into tony.test  select * from dba_objects ; 
SQL > commit;

SQL > select count(*) from tony.test ;

COUNT(*)
----------
93196   

SQL > alter system switch logfile;


SQL > insert into tony.test  select * from dba_objects ; 
SQL > commit;

SQL > select count(*) from tony.test ;

COUNT(*)
----------
139794   

SQL > alter system switch logfile;


SQL > insert into tony.test select * from dba_objects ;  

commit; 

SQL > select count(*) from tony.test ;

COUNT(*)
----------
186392

SQL > alter system switch logfile;

 


日志序列的情况如下:
SQL> select * from v$log_history where RECID > 45 ;  

RECID,STAMP,THREAD#,SEQUENCE#,FIRST_CHANGE#,FIRST_TIME,NEXT_CHANGE#,RESETLOGS_CHANGE#,RESETLOGS_TIME
46,760012033,1,9,537154,2011-08-24 10:26:00,537391,532087,2011-08-24 9:44:20
47,760012086,1,10,537391,2011-08-24 10:27:13,537561,532087,2011-08-24 9:44:20
48,760013089,1,11,537561,2011-08-24 10:28:06,539062,532087,2011-08-24 9:44:20

 

 

三、执行不完全恢复

SQL > shutdown immeidate ; 
SQL > startup mount ;

C:\>rman target /

恢复管理器: Release 10.2.0.4.0 - Production on 星期三 8月 24 09:38:47 2011
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
已连接到目标数据库: TEST (DBID=2057987867, 未打开)

RMAN> run {
 set until sequence 10 thread 1 ; 
 restore database;
 recover database;
 }

正在执行命令: SET until clause
使用目标数据库控制文件替代恢复目录

启动 restore 于 24-8月 -11
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
正将数据文件00002还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
正将数据文件00003还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
正将数据文件00004还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_NCSDF_TAG
20110824T081321_758JK4BQ_.BKP
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_NCSDF_TAG20110824T081321_758JK4BQ_
.BKP 标记 = TAG20110824T081321
通道 ORA_DISK_1: 还原完成, 用时: 00:01:17
完成 restore 于 24-8月 -11

启动 recover 于 24-8月 -11
使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 34 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00034_0759841435.001 存在于磁盘上
通道 ORA_DISK_1: 正在启动到默认目标的存档日志恢复
通道 ORA_DISK_1: 正在恢复存档日志
存档日志线程 =1 序列=33
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_ANNNN_TAG
20110824T081420_758JLXRF_.BKP
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_ANNNN_TAG20110824T081420_758JLXRF_
.BKP 标记 = TAG20110824T081420
通道 ORA_DISK_1: 还原完成, 用时: 00:00:02
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00033_0759841435.001 线程 =1 序列 =33
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00034_0759841435.001 线程 =1 序列 =34
介质恢复完成, 用时: 00:00:06
完成 recover 于 24-8月 -11

RMAN>

RMAN> sql 'alter database open resetlogs' ;

sql 语句: alter database open resetlogs

RMAN>

 

 

四、此时的数据库状态

C:\>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.4.0 - Production on 星期三 8月 24 11:09:50 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining Scoring Engine and Real Application Testing options

SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            D:\oracle\product\10.2.0\oradata\test\arch
最早的联机日志序列     1
下一个存档日志序列     1
当前日志序列           1
SQL> select count(*)  from tony.test;

  COUNT(*)
----------
     46598

SQL>

 

 

五、继续进行数据更改

SQL> create table tony.test2  as  select  *  from  dba_users;
SQL> alter system switch logfile;

SQL> select count(*) from tony.test2 ;

COUNT(*)
----------
18

SQL> insert into tony.test2  select * from  tony.test2 ;
SQL> commit;
SQL> alter system switch logfile;

SQL> select count(*)  from tony.test2 ;

  COUNT(*)
----------
        36


此时的日志序列:

SQL> select * from v$log_history where recid > 45 ;

RECID,STAMP,THREAD#,SEQUENCE#,FIRST_CHANGE#,FIRST_TIME,NEXT_CHANGE#,RESETLOGS_CHANGE#,RESETLOGS_TIME
46,760012033,1,9,537154,2011-08-24 10:26:00,537391,532087,2011-08-24 9:44:20
47,760012086,1,10,537391,2011-08-24 10:27:13,537561,532087,2011-08-24 9:44:20
48,760013089,1,11,537561,2011-08-24 10:28:06,539062,532087,2011-08-24 9:44:20
49,760013619,1,12,539062,2011-08-24 10:44:49,540420,532087,2011-08-24 9:44:20
50,760014917,1,1,537392,2011-08-24 11:07:39,538596,537392,2011-08-24 11:07:39
51,760014959,1,2,538596,2011-08-24 11:15:17,538620,537392,2011-08-24 11:07:39

 


六、再次执行恢复


SQL> shutdown immediate;
SQL> startup mount;

C:\> rman target /


RMAN> restore database;

启动 restore 于 24-8月 -11
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK

通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSTEM01.DBF
正将数据文件00002还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\UNDOTBS01.DBF
正将数据文件00003还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\SYSAUX01.DBF
正将数据文件00004还原到D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\USERS01.DBF
通道 ORA_DISK_1: 正在读取备份片段 D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_NCSDF_TAG
20110824T102502_758R81SW_.BKP
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TEST\BACKUPSET\2011_08_24\O1_MF_NCSDF_TAG20110824T102502_758R81SW_
.BKP 标记 = TAG20110824T102502
通道 ORA_DISK_1: 还原完成, 用时: 00:01:16
完成 restore 于 24-8月 -11

RMAN>

RMAN> recover database;

启动 recover 于 24-8月 -11
使用通道 ORA_DISK_1

正在开始介质的恢复

存档日志线程 1 序列 8 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00008_0760009460.001
存档日志线程 1 序列 9 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00009_0760009460.001
存档日志线程 1 序列 1 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00001_0760014459.001
存档日志线程 1 序列 2 已作为文件 D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00002_0760014459.001
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00008_0760009460.001 线程 =1 序列 =8
存档日志文件名 =D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\ARCH\ARC00009_0760009460.001 线程 =1 序列 =9
介质恢复完成, 用时: 00:00:08
完成 recover 于 24-8月 -11

RMAN> sql ' alter database open ' ;

sql 语句:  alter database open

RMAN>

 

 

七、最后检查数据恢复情况

注意此次恢复跨越了resetlogs时间点(从最初备份进行恢复,中间有resetlog,
后面的重置后的归档日志也可以恢复到原备份中) 。 

C:\> sqlplus "/ as sysdba"

SQL> select count(*) from tony.test ;

  COUNT(*)
----------
     46598

SQL> select count(*) from tony.test2  ;

  COUNT(*)
----------
        36