表空间时间点恢复
以下部分内容适只用于10g
一、TSPITR简介
TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态。
(1)TSPITR(Tablespace Point-In-Time Recovery),只适用于ARCHIVELOG模式。
(2)TSPITR实现方法,建议使用RMAN实现表空间时间点恢复。
(3)DBPITR(Database Point-In-TIme Recovery),数据库时间点恢复;表示将数据库的所有表空间恢复到过去时间颠倒俄状态,只适用于ARCHIVELOG模式。
(4)主数据库(Primary Database),用于存放应用系统数据的Oracle数据库。当执行TSPITR时,主数据库是指包含有被恢复表空间的数据库。
(5)恢复集(Recovery Set),是指在主数据库上需要执行TSPITR的表空间集合。注意,当在恢复集的表空间上执行TSPITR时,要求这些表空间必须是自包含的。
(6)辅助数据库(Auxiliary Database),是主数据库的一个副本数据库。当执行TSPITR时,辅助数据库用于将恢复集表空间恢复到过去时间点。注意,辅助数据库的所有物理文件都是从主数据库备份中取得,并且辅助数据库必须包含SYSTEM表空间、UNDO表空间、恢复集表空间的备份文件。
(7)辅助集(Auxiliary Set),是指辅助数据库所需要的、除了恢复集表空间文件之外地饿其他文件集合。当执行TSPITR时,辅助数据库除了需要恢复表空间的备份文件之外,还需要备份控制文件、SYSTEM表空间的备份文件、UNDO表空间的备份文件。
二、准备TSPITR
1、确定TSPITR需求
(1)检查恢复集表空间是否为自包含
自包含表空间集合是指具有关联关系的表空间集合。假定,表空间A包含表EMP,表空间B包含表EMP的索引IND_EMP;如果要在表空间B上执行TSPITR,则必须同时在表空间A上执行TSPITR,此时表空间A和B为自包含表空间。
违反自包含表空间集合的常见情况如下:
1> 表空间集合包含有SYS方案对象
2> 表空间集合包含了索引所在的表空间,但没有包含索引基表所在的表空间
3> 表空间集合没有包含分区表的所有分区
4> 表空间集合包含了表所在的表空间,但没有包含其LOB列所在的表空间
在执行TSPITR之前,为了确保可以在恢复集上执行TSPITR,必须首先检查恢复集是为自包含的。通过执行包DBMS_TTS的过程TRANSPORT_SET_CHECK可以确定恢复集是否为自包含的表空间集合。当执行了该过程之后,Oracle会将违反自包含表空间集合的信息写入临时表transport_set_violations。通过查询此表,获得违反自包含表空间的详细信息。
SQL> connect sys/oracle@demo as sysdba
SQL> execute dbms_tts.transport_set_check('user01',true);
SQL> Select * From transport_set_violations;
(2)检查是否存在恢复集表空间的数据文件备份
注意:其备份文件必须是在TSPITR时间之前备份的数据文件。
(3)检查是否存在辅助集的数据文件和控制文件备份
(4)检查TSPITR之后丢失的对象
注意:执行了TSPITR之后,在恢复时间之后被建立的对象将会丢失。被丢失对象信息的获取。
SQL> Select owner, name From TS_PITR_OBJECTS_TO_BE_DROPPED Where tablespace_name = 'USER01' And creation_time > to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );
2、准备主数据库
当执行TSPITR时,无论使用用户管理的TSPITR,还是使用RMAN管理的TSPITR,要求必须存在相应的数据文件和控制文件备份。
(1)准备USER01表空间、USER02表空间及示例表
(2)备份主数据库的所有数据文件和控制文件
SQL> alter databaes begin backup;
SQL> alter database end backup;
SQL> alter database backup controlfile to '' reuse;
SQL> alter system archive log current;
(3)在主数据库上执行DML操作
(4)模拟用户误操作及其他正常操作
三、实现用户管理的TSPITR
假定在日至序列号为150时在表空间USER01上执行了误操作删除了CUSTOMERS表,并且当前日至序列号为152。为了确保USER02表空间的数据不会丢失,应该将USER01表空间恢复到日至序列号为150时的状态,而USER02表空间应该保持现在日志序列号为152时刻的状态。
1、建立辅助例程服务
2、建立辅助例程参数文件
从主数据库复制参数文件,再手工编辑相应的初始化参数。
SQL> create pfile from spfile;
vi initauxi.ora
DB_UNIQUE_NAME = _demo
CONTROL_FILES = d:/auxi/control01.ctl
DB_FILE_NAME_CONVERT = ( 'd:/demp', 'd:/auxi' )
LOG_FILE_NAME_CONVERT = ( 'd:/demo', 'd:/auxi' )
3、复制恢复集数据文件和辅助集文件
SQL> host copy d:/backup/system01.dbf d:/auxi
4、启动辅助例程并装载辅助数据库
注意,当装载辅助数据库时,必须指定CLONE关键字
set oracle_sid = auxi
sqlplus sys/oracle as sysdba
SQL> startup nomount pfile=initauxi.ora
SQL> alter database mount clone database;
5、使恢复集和辅助集数据文件联机
当装载了辅助数据库之后,恢复集合辅助集的数据文件全部处于OFFLINE状态。
SQL> alter database datafile 'd:/auxi/system01.dbf' online;
6、恢复辅助数据库到TRPITR时间点
在使恢复集和辅助集的数据文件联机之后,就可以将辅助数据库恢复到TSPITR时间点。在恢复辅助数据库时,使用recover database的until cancel、until time以及until change等选项。
SQL> recover database until time '2004-09-27 11:25:21' using backup controlfile;
7、用RESETLOGS选项打开辅助数据库,并检查恢复结果
SQL> alter database open resetlogs;
8、在辅助数据库上建立临时表空间
9、导出辅助数据库的恢复表空间
exp 'sys/oracle as sysdba' point_in_time_recover = y tablespaces = user01 file = user01.dmp
10、使主数据库的恢复集表空间脱机
为了将辅助数据库的恢复集表空间导入到主数据库,必须首先使主数据库的恢复集表空间脱机,并使用辅助数据库的恢复集数据文件覆盖主数据库的原有数据文件
SQL> connect sys/oracle@demo as sysdba
SQL> alter tablespace user01 offline;
SQL> host copy '' '';
11、导入恢复集表空间到主数据库
将辅助数据库的恢复数据文件复制到主数据库的相应位置之后,就可以将恢复集表空间的数据文件导入到主数据库
SQL> host imp 'sys/oracle@demo as sysdba' point_in_time_recover = y datafile = d:/demo/user01.dbf file = user01.dmp
12、使恢复集表空间联机,并检查恢复结果
在导入恢复集数据文件之后,为了访问恢复集表空间,需要使该表空间联机。在使恢复集表空间联机之后,就完成了TSPIPR的全部过程
SQL> alter tablespace user01 online;
13、删除辅助例程
四、实现RMAN管理的TSPITR
1、全自动TSPITR
是指由RMAN完成表空间时间点恢复的全部过程。当使用全自动TSPITR时,RMAN会自动建立辅助例程,自动建立辅助数据库的数据文件、控制文件和重做日至,在恢复完成之后会自动删除辅助例程和辅助数据库的物理文件。当执行全自动TSPITR时,只要使用Auxiliary Destination选项指定辅助数据库的文件存放位置即可。
rman target sys/oracle@demo nocatalog
RMAN> recover tablespace user01 until logseq 19 auxiliary destination 'd:/auxiliary';
执行了上述命令之后,RMAN会自动建立辅助例程和辅助数据库,将恢复集表空间USER01恢复到日志序列号为19时的状态,使目标数据库的user01表空间脱机,最后删除辅助例程和辅助数据库。因为在恢复完成后user01表空间处于offline状态,必须将其转变为online状态。
RMAN> sql 'alter tablespace user01 online';
RMAN> backup tablespace user01 format = 'd:/backup/%s_%d.bak';
2、用自动辅助例程定制TSPITR
(1)改变恢复集数据文件的位置和名称
RMAN> run {
set newname for datafile 5 to 'c:/demo/user01.dbf';
recover tablespace user01 until logseq 25 auxiliary destination 'd:/auxiliary';
}
RMAN> sql 'alter tablespace user01 online';
RMAN> backup tablespace user01 format = 'd:/backup/%s_%d.bak';
上述命令会在'c:/demo'目录下建立恢复集数据文件user01.dbf,会在'd:/auxiliary'目录下建立所有辅助集数据文件,并将恢复集表空间user01恢复到日志序列号为25时的状态。
(2)改变辅助集数据文件的位置和名称
RMAN> run {
set newname for datafile 1 to 'c:/aux/system.dbf';
set newname for datafile 2 to 'c:/aux/undo.dbf';
recover tablespace user01 until logseq 37 auxiliary destination 'd:/auxiliary';
}
RMAN> sql 'alter tablespace user01 online';
RMAN> backup tablespace user01 format = 'd:/backup/%s_%d.bak';
上述命令会在'c:/aux'目录下建立辅助集数据文件system.dbf和undo.dbf,并将恢复集表空间user01恢复到日志序列号为37时的状态。
(3)使用映像副本提高TSIPTR性能
如果目标数据库数据文件存在映像副本,那么当执行表空间时间点恢复时,通过使恢复集数据文件和辅助数据文件直接使用映像副本,可以避免转储数据文件,从而提高TSPITR的性能。
RMAN> configure auxname for datafile 1 to 'd:/backup/df1.bak';
RMAN> configure auxname for datafile 2 to 'd:/backup/df2.bak';
RMAN> recover tablespace user01 until logseq 30 auxiliary destination 'd:/auxiliary';
RMAN> configure auxname for datafile 1 clear;
RMAN> configure auxname for datafile 2 clear;
上述命令会直接使用映像副本df1.bak和df2.bak作为辅助集数据文件,并将恢复集表空间user01恢复到日志序列号30时的状态。
3、手工辅助例程实现TSPITR
(1)建立辅助例程服务
(2)建立辅助例程参数文件
(3)启动辅助例程
(4)执行TSPITR
rman target sys/oracle@demo auxiliary sys/oracle
RMAN> run {
allocate auxiliary channel c1 device type disk;
recover tablespace user02 until logseq 9;
}
(5)恢复集表空间联机,然后备份该表空间
RMAN> sql 'alter tablespace user01 online';
RMAN> backup tablespace user01 format = 'd:/backup/%s_%d.bak';
(6)删除辅助例程以及相关文件
http://blog.sina.com.cn/u/539c889801000dsw
from:http://digifish.bokee.com/viewdiary.16746188.html