一、实验环境:
Sqldeveloper+linux in virtual machine;
[oracle@lzc ~]$ lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Release: 5.4
Codename: Tikanga
数据库版本:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
归档状态:
SQL> archive log;
SP2-0716: invalid combination of ARCHIVE LOG options
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
二、实验思想:
对数据库采用rman设置进行 一次备份,然后采用resetlog方式不完全恢复到备份的一个时间点。完成之后再进行第二次不完全恢复,验证是否能够成功。
三、实验设计
1、先将数据库进行一次全备连同current controlfile
2、创建测试表,并添加记录
3、进行第一次不完全恢复
5、第二次不完全恢复
四、实验步骤:
1、进行一次数据库全备
RMAN> backup database;
Starting backup at 04-AUG-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=153 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00005 name=/u01/app/oracle/oradata/dblzc/soe.dbf
input datafile fno=00001 name=/u01/app/oracle/oradata/dblzc/system01.dbf
input datafile fno=00003 name=/u01/app/oracle/oradata/dblzc/sysaux01.dbf
input datafile fno=00002 name=/u01/app/oracle/oradata/dblzc/undotbs01.dbf
input datafile fno=00004 name=/u01/app/oracle/oradata/dblzc/users01.dbf
channel ORA_DISK_1: starting piece 1 at 04-AUG-12
channel ORA_DISK_1: finished piece 1 at 04-AUG-12
piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp tag=TAG20120804T222751 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:42
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 04-AUG-12
channel ORA_DISK_1: finished piece 1 at 04-AUG-12
piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_ncsnf_TAG20120804T222751_81tdp00w_.bkp tag=TAG20120804T222751 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:05
Finished backup at 04-AUG-12
2、创建测试表
SQL> create table test(tscn number(10) primary key);
插入数据:
在生气了developer中执行以下语句(注意:该语句在sys用户下执行):
begin
for I in 1..10
LOOP
insert into hr.test values(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER);
commit;
end LOOP;
end;
/
查看数据:
SQL> select * from hr.test;
TSCN
----------
1224305
1224306
1224307
1224308
1224309
1224310
1224311
1224312
1224313
1224314
10 rows selected.
3、进行第一次不完全恢复,现在假设我准备恢复到tscn 1224312这一点结果却不小心恢复到1224308这一点。
在执行恢复以前查看当前数据库的incarnation:
RMAN> list incarnation;
using target database control file instead of recovery catalog
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 DBLZC 1821208303 PARENT 446075 24-JUN-12
2 2 DBLZC 1821208303 CURRENT 1093399 02-AUG-12
执行恢复
RMAN> run{
2> startup mount;
3> set until scn 1224308;
4> restore database;
5> recover database;
6> alter database open resetlogs;
7> }
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 83887696 bytes
Database Buffers 197132288 bytes
Redo Buffers 2973696 bytes
executing command: SET until clause
Starting restore at 04-AUG-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=157 devtype=DISK
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/dblzc/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/dblzc/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/dblzc/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/dblzc/users01.dbf
restoring datafile 00005 to /u01/app/oracle/oradata/dblzc/soe.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp
channel ORA_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/flash_recovery_area/DBLZC/backupset/2012_08_04/o1_mf_nnndf_TAG20120804T222751_81tdc8by_.bkp tag=TAG20120804T222751
channel ORA_DISK_1: restore complete, elapsed time: 00:04:31
Finished restore at 04-AUG-12
Starting recover at 04-AUG-12
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:05
Finished recover at 04-AUG-12
database opened
这时再查看test表中数据:
SQL> select * from hr.test;
TSCN
----------
1224305
1224306
只有1224308该点以前的记录
再次查看当前数据库的incarnation:
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 DBLZC 1821208303 PARENT 446075 24-JUN-12
2 2 DBLZC 1821208303 PARENT 1093399 02-AUG-12
3 3 DBLZC 1821208303 CURRENT 1224309 04-AUG-12
可以发现比恢复前多了一条记录,且incarnation 3为当前使用的database incarnation;
现在我想再次恢复到我最初想恢复的1224312这点以前,再次执行
RMAN> backup current controlfile;
RMAN> shutdown immediate;
database closed
database dismounted
Oracle instance shut down
RMAN> run{
2> startup mount;
3> set until scn 1224312;
4> restore database;
5> recover database;
6> alter database open resetlogs;
7> }
完成之后,查询test表中数据:
SQL> select * from hr.test;
TSCN
----------
1224305
1224306
仍然没有恢复我想要的数据。
现在再看incarnation的记录:
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 DBLZC 1821208303 PARENT 446075 24-JUN-12
2 2 DBLZC 1821208303 PARENT 1093399 02-AUG-12
3 3 DBLZC 1821208303 PARENT 1224309 04-AUG-12
4 4 DBLZC 1821208303 CURRENT 1224322 05-AUG-12
发现又多了一条记录;
现在我将数据库reset to incarnation 2,再进行以上恢复:
RMAN> backup current controlfile;
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> reset database to incarnation 2;
database reset to incarnation 2
RMAN> run{
2> set until scn 1224312;
3> restore database;
4> recover database;
5> alter database open resetlogs;
6> }
恢复成功之后再次查看test表中的内容:
SQL> select * from hr.test;
TSCN
----------
1224305
1224306
1224307
1224308
1224309
1224310
6 rows selected.
恢复成功!
查看 incarnation 记录:
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
1 1 DBLZC 1821208303 PARENT 446075 24-JUN-12
2 2 DBLZC 1821208303 PARENT 1093399 02-AUG-12
3 3 DBLZC 1821208303 ORPHAN 1224309 04-AUG-12
5 5 DBLZC 1821208303 CURRENT 1224313 05-AUG-12
4 4 DBLZC 1821208303 ORPHAN 1224322 05-AUG-12
发现又多了一条记录,且该记录为the current incarnation of the target database;
五、实验小结
每次当你在rman或者sqlplus中执行ALTER DATABASE OPEN RESETLOGS 这条命令之后就会为数据库自动创建一个新的incarnation在recovery catalog中,并且将the new incarnation置为current incarnation。
随后对数据库所做的备份和归档等操作都只与the new incarnation 相关。可以通过视图V$DATABASE_INCARNATION 读取new incarnation的记录。
在reset database to incarnation #;这条命令之后若current control file is not available则需要
Restore a control file from the old incarnation。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26723566/viewspace-739853/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26723566/viewspace-739853/