在Oracle数据库10g以前,假如用户对数据库进行了不完全恢复,在使用resetlogs选项打开数据库后,Oracle会提示你需要立即进行全备份。
原因:日志序号会被置位,以此防止后续日志被应用。resetlogs之前的备份将不能用于进行跨域resetlogs时间点的恢复。
在Oracle数据库10g中,Oracle允许跨越resetlogs时间点进行完全/不完全恢复。
本文将针对此特性介绍一个详细的参考示例:
一、全备份数据库
$ rman target /
Recovery Manager: Release 10.1.0.2.0 - 64bit Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
connected to target database: EYGLE (DBID=1337390772)
RMAN> backup database plus archivelog delete all input;
Starting backup at 2005-04-05 16:29:08
current log archived
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=143 devtype=DISK
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=3 recid=294 stamp=554823466
input archive log thread=1 sequence=4 recid=295 stamp=554828647
input archive log thread=1 sequence=5 recid=297 stamp=554833749
channel ORA_DISK_1: starting piece 1 at 2005-04-05 16:29:16
channel ORA_DISK_1: finished piece 1 at 2005-04-05 16:29:19
piece handle=/data5/flash_recovery_area/EYGLE/backupset/2005_04_05
/o1_mf_annnn_TAG20050405T162914_154m2woc_.bkp comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04
channel ORA_DISK_1: deleting archive log(s)
archive log filename=/data5/flash_recovery_area/EYGLE
/archivelog/2005_04_05
/o1_mf_1_3_154919qm_.arc recid=294 stamp=554823466
archive log filename=/data5
/flash_recovery_area/EYGLE/archivelog/2005_04_05
/o1_mf_1_4_154g3728_.arc recid=295 stamp=554828647
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_5_154m2og4_.arc recid=297 stamp=554833749
Finished backup at 2005-04-05 16:29:20
Starting backup at 2005-04-05 16:29:21
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00009 name=/data1/oradata/systemfile/bigtbs.dbf
input datafile fno=00001 name=/opt/oracle/oradata/eygle/system01.dbf
input datafile fno=00006 name=/opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_test_03xv34ny_.dbf
input datafile fno=00002 name=/opt/oracle/oradata/eygle/undotbs01.dbf
input datafile fno=00003 name=/opt/oracle/oradata/eygle/sysaux01.dbf
input datafile fno=00010 name=/opt/oracle/oradata/eygle/dfmbrc.dbf
input datafile fno=00008 name=/opt/oracle/oradata/eygle/trans01.dbf
channel ORA_DISK_1: starting piece 1 at 2005-04-05 16:29:22
channel ORA_DISK_1: finished piece 1 at 2005-04-05 16:31:07
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m33kf_.bkp comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:45
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00005 name=/data1/oradata/systemfile/eygle01.dbf
input datafile fno=00004 name=/opt/oracle/oradata/eygle/users01.dbf
input datafile fno=00007 name=/opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_itpub_03xv5g66_.dbf
channel ORA_DISK_1: starting piece 1 at 2005-04-05 16:31:08
channel ORA_DISK_1: finished piece 1 at 2005-04-05 16:31:33
piece handle=/data5/flash_recovery_area/EYGLE/backupset/2005_04_05
/o1_mf_nnndf_TAG20050405T162921_154m6dxm_.bkp comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00011 name=/opt/oracle/oradata/eygle/t2k01.dbf
channel ORA_DISK_1: starting piece 1 at 2005-04-05 16:31:34
channel ORA_DISK_1: finished piece 1 at 2005-04-05 16:31:41
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m76kz_.bkp comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
Finished backup at 2005-04-05 16:31:41
Starting backup at 2005-04-05 16:31:41
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=6 recid=298 stamp=554833902
channel ORA_DISK_1: starting piece 1 at 2005-04-05 16:31:44
channel ORA_DISK_1: finished piece 1 at 2005-04-05 16:31:47
piece handle=/data5/flash_recovery_area/EYGLE/backupset/2005_04_05
/o1_mf_annnn_TAG20050405T163142_154m7jpo_.bkp comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:04
channel ORA_DISK_1: deleting archive log(s)
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_6_154m7gb3_.arc recid=298 stamp=554833902
Finished backup at 2005-04-05 16:31:47
Starting Control File and SPFILE Autobackup at 2005-04-05 16:31:48
piece handle=/data5/flash_recovery_area/EYGLE/autobackup
/2005_04_05/o1_mf_s_554833908_154m7qps_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2005-04-05 16:31:56
RMAN> exit
Recovery Manager complete.
二、进行数据的更改
$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.1.0.2.0 - Production on
Tue Apr 5 16:32:23 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release
10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SYS AS SYSDBA on 2005-04-05 16:32:23 >alter system switch logfile;
System altered.
SYS AS SYSDBA on 2005-04-05 16:32:30 >select count(*) from t;
COUNT(*)
----------
18956
SYS AS SYSDBA on 2005-04-05 16:33:03 >insert into t select * from t;
18956 rows created.
SYS AS SYSDBA on 2005-04-05 16:33:17 >commit;
Commit complete.
SYS AS SYSDBA on 2005-04-05 16:33:19 >alter system switch logfile;
System altered.
SYS AS SYSDBA on 2005-04-05 16:33:45 >truncate table t;
Table truncated.
SYS AS SYSDBA on 2005-04-05 16:34:58 >alter system switch logfile;
System altered.
日志序列的情况如下:
SYS AS SYSDBA on 2005-04-05 16:35:00 >
select * from v$log_history where recid >1811;
RECID STAMP THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIME NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME
---------- ---------- ---------- ---------- -------------
1812 554813757 1 1 10923677 2005-04-05 09:54:53 10925720 10923677 2005-04-05 09:54:53
1813 554813974 1 2 10925720 2005-04-05 10:55:57 10925827 10923677 2005-04-05 09:54:53
1814 554823464 1 3 10925827 2005-04-05 10:59:34 10947409 10923677 2005-04-05 09:54:53
1815 554828646 1 4 10947409 2005-04-05 13:37:44 10950318 10923677 2005-04-05 09:54:53
1816 554833748 1 5 10950318 2005-04-05 15:04:06 10953123 10923677 2005-04-05 09:54:53
1817 554833901 1 6 10953123 2005-04-05 16:29:08 10953187 10923677 2005-04-05 09:54:53
1818 554833950 1 7 10953187 2005-04-05 16:31:41 10953213 10923677 2005-04-05 09:54:53
1819 554834005 1 8 10953213 2005-04-05 16:32:30 10953633 10923677 2005-04-05 09:54:53
1820 554834118 1 9 10953633 2005-04-05 16:33:25 10953726 10923677 2005-04-05 09:54:53
9 rows selected.
关闭数据库:
SYS AS SYSDBA on 2005-04-05 16:35:18 >shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS AS SYSDBA on 2005-04-05 16:37:30 >exit
Disconnected from Oracle Database 10g Enterprise
Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
三、执行不完全恢复
$ rman target /
Recovery Manager: Release 10.1.0.2.0 - 64bit Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
connected to target database (not started)
RMAN> startup mount;
Oracle instance started
database mounted
Total System Global Area 314572800 bytes
Fixed Size 1301704 bytes
Variable Size 261890872 bytes
Database Buffers 50331648 bytes
Redo Buffers 1048576 bytes
RMAN> run {
2> set until sequence 8 thread 1;
3> restore database;
4> recover database;
5> }
executing command: SET until clause
using target database controlfile instead of recovery catalog
Starting restore at 2005-04-05 16:39:17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=160 devtype=DISK
datafile 8 not processed because file is read-only
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /opt/oracle/oradata/eygle/system01.dbf
restoring datafile 00002 to /opt/oracle/oradata/eygle/undotbs01.dbf
restoring datafile 00003 to /opt/oracle/oradata/eygle/sysaux01.dbf
restoring datafile 00006 to /opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_test_03xv34ny_.dbf
restoring datafile 00009 to /data1/oradata/systemfile/bigtbs.dbf
restoring datafile 00010 to /opt/oracle/oradata/eygle/dfmbrc.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m33kf_.bkp tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00004 to /opt/oracle/oradata/eygle/users01.dbf
restoring datafile 00005 to /data1/oradata/systemfile/eygle01.dbf
restoring datafile 00007 to /opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_itpub_03xv5g66_.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m6dxm_.bkp
tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00011 to /opt/oracle/oradata/eygle/t2k01.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m76kz_.bkp
tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
Finished restore at 2005-04-05 16:41:45
Starting recover at 2005-04-05 16:41:46
using channel ORA_DISK_1
datafile 8 not processed because file is offline
starting media recovery
archive log thread 1 sequence 7 is already on disk as file /data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_7_154m8z7k_.arc
channel ORA_DISK_1: starting archive log
restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=6
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_annnn_TAG20050405T163142_154m7jpo_.bkp
tag=TAG20050405T163142
channel ORA_DISK_1: restore complete
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_6_154mtkfk_.arc thread=1 sequence=6
channel default: deleting archive log(s)
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_6_154mtkfk_.arc recid=302 stamp=554834513
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_7_154m8z7k_.arc thread=1 sequence=7
media recovery complete
Finished recover at 2005-04-05 16:41:57
RMAN> alter database open resetlogs;
database opened
RMAN> exit
Recovery Manager complete.
四、此时的数据库状态
$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.1.0.2.0 - Production on Tue Apr 5 16:43:58 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition
Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SYS AS SYSDBA on 2005-04-05 16:43:58 >archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 1
Next log sequence to archive 1
Current log sequence 1
SYS AS SYSDBA on 2005-04-05 16:44:01 >select count(*) from t;
COUNT(*)
----------
18956
五、继续进行数据更改
SYS AS SYSDBA on 2005-04-05 16:44:08 >
create table tt as select * from dba_users;
Table created.
SYS AS SYSDBA on 2005-04-05 16:45:51 >alter system switch logfile;
System altered.
SYS AS SYSDBA on 2005-04-05 16:45:56 >select count(*) from tt;
COUNT(*)
----------
12
SYS AS SYSDBA on 2005-04-05 16:46:01 >insert into tt select * from tt;
12 rows created.
SYS AS SYSDBA on 2005-04-05 16:46:13 >commit;
Commit complete.
SYS AS SYSDBA on 2005-04-05 16:46:16 >alter system switch logfile;
System altered.
此时的日志序列:
SYS AS SYSDBA on 2005-04-05 17:46:19 >
select * from v$log_history where recid >1811;
RECID STAMP THREAD# SEQUENCE# FIRST_CHANGE# FIRST_TIME
NEXT_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME
---------- ---------- ---------- ---------- -------------
1812 554813757 1 1 10923677 2005-04-05 09:54:53 10925720 10923677 2005-04-05 09:54:53
1813 554813974 1 2 10925720 2005-04-05 10:55:57 10925827 10923677 2005-04-05 09:54:53
1814 554823464 1 3 10925827 2005-04-05 10:59:34 10947409 10923677 2005-04-05 09:54:53
1815 554828646 1 4 10947409 2005-04-05 13:37:44 10950318 10923677 2005-04-05 09:54:53
1816 554833748 1 5 10950318 2005-04-05 15:04:06 10953123 10923677 2005-04-05 09:54:53
1817 554833901 1 6 10953123 2005-04-05 16:29:08 10953187 10923677 2005-04-05 09:54:53
1818 554833950 1 7 10953187 2005-04-05 16:31:41 10953213 10923677 2005-04-05 09:54:53
1819 554834005 1 8 10953213 2005-04-05 16:32:30 10953633 10923677 2005-04-05 09:54:53
1820 554834118 1 9 10953633 2005-04-05 16:33:25 10953726 10923677 2005-04-05 09:54:53
1821 554834756 1 1 10953214 2005-04-05 16:42:34 10953433 10953214 2005-04-05 16:42:34
1822 554834781 1 2 10953433 2005-04-05 16:45:56 10953445 10953214 2005-04-05 16:42:34
11 rows selected.
SYS AS SYSDBA on 2005-04-05 16:46:21 >shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS AS SYSDBA on 2005-04-05 16:47:38 >exit
Disconnected from Oracle Database 10g Enterprise
Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
六、再次执行恢复
$ rman target /
Recovery Manager: Release 10.1.0.2.0 - 64bit Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
connected to target database (not started)
RMAN> startup mount;
Oracle instance started
database mounted
Total System Global Area 314572800 bytes
Fixed Size 1301704 bytes
Variable Size 261890872 bytes
Database Buffers 50331648 bytes
Redo Buffers 1048576 bytes
RMAN> run {
2> restore database;
3> recover database;
4> }
Starting restore at 2005-04-05 16:49:54
using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=160 devtype=DISK
datafile 8 not processed because file is read-only
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /opt/oracle/oradata/eygle/system01.dbf
restoring datafile 00002 to /opt/oracle/oradata/eygle/undotbs01.dbf
restoring datafile 00003 to /opt/oracle/oradata/eygle/sysaux01.dbf
restoring datafile 00006 to /opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_test_03xv34ny_.dbf
restoring datafile 00009 to /data1/oradata/systemfile/bigtbs.dbf
restoring datafile 00010 to /opt/oracle/oradata/eygle/dfmbrc.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m33kf_.bkp
tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00004 to /opt/oracle/oradata/eygle/users01.dbf
restoring datafile 00005 to /data1/oradata/systemfile/eygle01.dbf
restoring datafile 00007 to /opt/oracle/oradata/eygle/EYGLE/datafile/o1_mf_itpub_03xv5g66_.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m6dxm_.bkp tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00011 to /opt/oracle/oradata/eygle/t2k01.dbf
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_nnndf_TAG20050405T162921_154m76kz_.bkp
tag=TAG20050405T162921
channel ORA_DISK_1: restore complete
Finished restore at 2005-04-05 16:52:31
Starting recover at 2005-04-05 16:52:32
using channel ORA_DISK_1
datafile 8 not processed because file is offline
starting media recovery
archive log thread 1 sequence 7 is already on disk as file /data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_7_154m8z7k_.arc
archive log thread 1 sequence 1 is already on disk as file /data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_1_154n24v5_.arc
archive log thread 1 sequence 2 is already on disk as file /data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_2_154n2y40_.arc
channel ORA_DISK_1: starting archive log
restore to default destination
channel ORA_DISK_1: restoring archive log
archive log thread=1 sequence=6
channel ORA_DISK_1: restored backup piece 1
piece handle=/data5/flash_recovery_area/EYGLE/backupset
/2005_04_05/o1_mf_annnn_TAG20050405T163142_154m7jpo_.bkp
tag=TAG20050405T163142
channel ORA_DISK_1: restore complete
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_6_154ngror_.arc thread=1 sequence=6
channel default: deleting archive log(s)
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_6_154ngror_.arc recid=306 stamp=554835160
archive log filename=/data5/flash_recovery_area/EYGLE/archivelog
/2005_04_05/o1_mf_1_7_154m8z7k_.arc thread=1 sequence=7
media recovery complete
Finished recover at 2005-04-05 16:53:04
RMAN> alter database open;
database opened
RMAN> exit
Recovery Manager complete.
七、最后检查数据恢复情况
注意此次恢复跨越了resetlogs时间点
$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.1.0.2.0 - Production on
Tue Apr 5 16:53:56 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release
10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SYS AS SYSDBA on 2005-04-05 16:53:56 >select count(*) from t;
COUNT(*)
----------
18956
SYS AS SYSDBA on 2005-04-05 16:54:01 >select count(*) from tt;
COUNT(*)
----------
24
SYS AS SYSDBA on 2005-04-05 16:54:07 >
SYS AS SYSDBA on 2005-04-05 16:54:47 >
至此,数据恢复彻底完成。