其实TSPITR方式是对整个表空间的恢复,无论该表空间上有多少张表或对象,只要是自包含的表空间,就可以使用这种方法来进行恢复。
其使用前提为两个:
1. 必须存在相应的备份集合
2. 表空间对象是子包含的,也就是其他表空间中不包括与这个表空间对象相关的对象数据(互相独立)
恢复步骤和原理如下:
首先完成数据检查工作,确定备份集合和表空间完整性;
时间点;
;
。数据库;
。
下面通过实验来进行演示操作:
--创建测试用户zlm并赋予权限
SQL> create user zlm identified by zlm;
User created.
SQL> grant dba to zlm;
Grant succeeded.
--创建测试表空间tspitr
SQL> create tablespace tspitr datafile '/data/oradata/ora10g/tspitr01.dbf' size 100m autoextend off extent management local uniform size 1m segment space management auto;
Tablespace created.
--修改用户zlm缺省表空间为tspitr
SQL> alter user zlm default tablespace tspitr;
User altered.
SQL> show user
USER is ""
SQL> conn zlm/zlm@ora10g213
Connected.
SQL> !
--创建一个RMAN备份集
[oracle@bak ~]$ rman target /
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Dec 26 16:44:00 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: ORA10G (DBID=4175411955)
RMAN> backup as compressed backupset database format '/u01/orabackup/backupsets/full_ora10g_%U' plus archive log format '/u01/orabackup/backupsets/arc_ora10g_%U' delete all input;
Starting backup at 26-DEC-14
current log archived
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=138 devtype=DISK
channel ORA_DISK_1: starting compressed archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=30 recid=30 stamp=867343597
channel ORA_DISK_1: starting piece 1 at 26-DEC-14
channel ORA_DISK_1: finished piece 1 at 26-DEC-14
piece handle=/u01/orabackup/backupsets/arc_ora10g_13pr577g_1_1 tag=TAG20141226T164639 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=/oracle/flash_recovery_area/ORA10G/archivelog/2014_12_26/o1_mf_1_30_b9t83f1s_.arc recid=30 stamp=867343597
Finished backup at 26-DEC-14
Starting backup at 26-DEC-14
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=/data/oradata/ora10g/system01.dbf
input datafile fno=00003 name=/data/oradata/ora10g/sysaux01.dbf
input datafile fno=00002 name=/data/oradata/ora10g/undotbs01.dbf
input datafile fno=00005 name=/data/oradata/ora10g/example01.dbf
input datafile fno=00006 name=/data/oradata/ora10g/tspitr01.dbf
input datafile fno=00004 name=/data/oradata/ora10g/users01.dbf
channel ORA_DISK_1: starting piece 1 at 26-DEC-14
channel ORA_DISK_1: finished piece 1 at 26-DEC-14
piece handle=/u01/orabackup/backupsets/full_ora10g_14pr577l_1_1 tag=TAG20141226T164644 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:02:47
Finished backup at 26-DEC-14
Starting backup at 26-DEC-14
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting compressed archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=31 recid=31 stamp=867343772
channel ORA_DISK_1: starting piece 1 at 26-DEC-14
channel ORA_DISK_1: finished piece 1 at 26-DEC-14
piece handle=/u01/orabackup/backupsets/arc_ora10g_15pr57ct_1_1 tag=TAG20141226T164933 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archive log(s)
archive log filename=/oracle/flash_recovery_area/ORA10G/archivelog/2014_12_26/o1_mf_1_31_b9t88wnv_.arc recid=31 stamp=867343772
Finished backup at 26-DEC-14
Starting Control File and SPFILE Autobackup at 26-DEC-14
piece handle=/u01/orabackup/backupsets/ora10g-c-4175411955-20141226-05.ctl comment=NONE
Finished Control File and SPFILE Autobackup at 26-DEC-14
RMAN> exit
Recovery Manager complete.
--连接到测试用户zlm查看当前日志
[oracle@bak ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Dec 26 16:50:46 2014
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> conn zlm/zlm@ora10g213
Connected.
SQL> select sequence#,status from v$log;
SEQUENCE# STATUS
---------- ----------------
32 CURRENT
30 INACTIVE
31 ACTIVE
--创建测试表t1,并切换若干次日志
SQL> create table t1 as select * from dba_objects;
Table created.
SQL> alter system switch logfile;
System altered.
SQL> select sequence#,status from v$log;
SEQUENCE# STATUS
---------- ----------------
32 ACTIVE
33 CURRENT
31 ACTIVE
SQL> alter system switch logfile;
System altered.
SQL> select sequence#,status from v$log;
SEQUENCE# STATUS
---------- ----------------
32 ACTIVE
33 ACTIVE
34 CURRENT --此时仍然时候数据的
SQL> select count(*) from t1;
COUNT(*)
----------
50382
--对表进行truancate操作,模拟误操作
SQL> truncate table t1;
Table truncated.
SQL> select count(*) from t1;
COUNT(*)
----------
0
SQL> alter system switch logfile;
System altered.
SQL> select sequence#,status from v$log;
SEQUENCE# STATUS
---------- ----------------
35 CURRENT --truncate之后又切换了一次日志,当前日志为35
33 ACTIVE
34 ACTIVE
SQL> !