9-恢复



第9章 rman 恢复


9.1 恢复知识 4

9.2 简单恢复 6

9.2.1 对数据库进行完全介质恢复 6

9.2.2 恢复表空间和数据文件 6

9.2.2.1 恢复表空间 6

9.2.2.2 恢复数据文件 7

9.2.3 恢复归档日志文件 7

9.2.4 恢复控制文件和spfile初始化参数文件 7

9.2.4.1 恢复控制文件 7

9.2.4.2 恢复服务器端初始化参数文件(spfile) 8

9.3 rman 恢复示例 9

9.3.1 归档模式有备份,丢失数据文件的恢复 9

9.3.2 归档模式无备份,丢失数据文件的恢复 9

9.3.3 丢失联机重做日志的恢复 11

9.3.3.1 丢失非当前的联机重做日志文件 11

9.3.3.2 丢失当前的联机重做日志文件 11

9.3.4 不同故障的恢复总结。 12

9.4 通过rman备份恢复数据库到其他服务器 13

9.5 使用影像副本恢复 14

9.6 块恢复 14

9.6.1 受损块的检查 14

9.6.2 blockrecover还原和恢复一个或多个块列表 14

9.7 duplicate复制数据库 15

9.7.1 duplicate复制实质 15

9.7.2 三种不同情况的复制 15

9.7.2.1 异机相同路径结构的复制 15

9.7.2.2 异机不同路径结构的复制 15

9.7.2.3 本地不同路径结构的复制 15

9.8 表空间时间点恢复(TSPITR) 18

9.8.1 TSPITR使用情形 18

9.8.2 rman在TSPITR期间执行的步骤: 18

9.8.3 执行TSPITR前检查 19

9.8.4 使用rman自动执行TSPITR 19

9.8.5 示例 19












9.1 恢复知识

1、Rman 恢复主要对应两个操作:

数据库修复(restore)、数据库恢复(recover)

(1)数据库修复(restore):利用备份集的数据文件来替换已经损坏的数据库文件或将其恢复到一个新的位置。利用恢复目录或控制文件来获取备份信息,并从中选择最合适的备份进行修复操作。选择原则:选择距离恢复目录时刻最近;优先选择镜像复制,其次才是备份集。

(2)数据库恢复(recover):应用所有重做日志,将数据库恢复到崩溃前的状态,或应用部分redo,将数据库恢复到指定的时间点。


2、通过rman执行数据库恢复可以分成三个部分解读:

(1)将数据库置于正确的状态:mount/open。一般整库恢复的话需要在mount状态下操作,表空间或数据文件级的恢复也可以在open状态下操作。

(2)执行完全或不完全恢复。

(3)打开数据库(resetlogs或noresetlogs)


3、rman恢复中的自动化

在restore过程中,若备份集中某个备份片段出现错误(如I/O错误),rman会自动寻找备份片段的冗余复制,获取相同数据块的内容视图修复,若没有冗余的备份,rman会尝试寻找之前备份集中是否有使用的备份,直至匹配,若都没有匹配则报错。

执行restore过程中也有一个优化的原则,若要修复的文件已经存在,rman会首先对该未年检进行检查(rman只检查数据文件头,而不会检查数据文件中所有的数据块),若该文件已经是最新的状态,则restore会自动跳过该文件,以节省操作时间。也可以在执行restore时指定force子句强制恢复。

上述所体现的自动化,也是rman的优于其他备份/恢复方式的体现。


4、增量恢复和应用重做日志

执行recover时,如创建了增量备份,则rman首选增量备份进行恢复,(效率更高),因为增量备份中只记录了修改的数据块,恢复时也只需要对这些块做恢复就可以了,而应用重做日志需要解析。但重做日志依然很重要,重做日志时刻都在生成,但增量备份不可能时刻创建,故大多数情况下,都需要应用重做日志。

5、还原和恢复的实质

(1)关键文件和非关键文件

关键文件包括:控制文件的任何副本、system表空间的一部分的数据文件、当前撤销表空间的一部分的数据文件。关键文件受损意味着数据库实例将终止,且在损坏被修复之前不能重新打开。  关键数据文件的丢失并不意味着数据丢失,但意味着时间的丢失。



非关键文件包括:多重联机日志文件、临时文件、非system表空间或当前撤销表空间的一部分的数据文件。非关键文件受损时数据库可以保持打开或可以被打开。


(2)不完整恢复和完整恢复

完整恢复:任意数目的数据文件的损坏都可以用完整恢复来修复(没有数据丢失),还原受损的文件,应用重做使它们保持最新。  完整恢复的4个步骤:

使受损的数据文件脱机,还原受损的文件,恢复受损的文件,使恢复的文件联机。


 不完整恢复意味着还原数据库(整个数据库)并只应用重做至某个特定点。

不完整恢复的4个步骤:加载数据库,还原所有数据文件,恢复数据库至某个点,用重置日志打开数据库。

不完整恢复操作的三个选项:

Until tiime/ until scn/ until sequence

语法:

Run {startup mount;

Set untiil time=”to_date(‘27-10-08 10:00:00’,’dd-mm-yy hh24:mi:ss’)”;

Restore database;

Recover database;

Alter database open resetlogs;}

Restore database until time ‘sysdate -7’;

Recover database until time ‘27-oct-08’;



9.2 简单恢复

9.2.1 对数据库进行完全介质恢复

完全介质恢复:当前数据库只剩下控制文件和spfile,其他数据文件丢失。但是之前创建过整库的备份,并且执行备份操作之后,所有的归档文件和重做日志都还在,可以将数据库恢复到崩溃前那一刻的状态。

执行完全介质恢复的三个步骤:

(1)启动到数据到加载状态:

Rman>startup mount;

(2)执行恢复操作

Rman>restore database;

Rman>recover database skip tablespace temp;

Skip tablespace是可选参数,跳过表空间,如临时表空间,即使不显式地指定跳过临时表空间,也不会对其进行恢复。因为临时表空间没有备份。


(3)打开数据库

Rman>alter database open;


上述操作是假设数据库在归档模式下进行的,如果是非归档模式的话,在执行restore之前,首先需要恢复备份的控制文件,并且在执行了restore和recover之后,必须以open resetlogs方式打开数据库。


9.2.2 恢复表空间和数据文件

数据库既可以是mount状态,也可以是open状态。

9.2.2.1 恢复表空间

Rman> sql ‘ alter tablespace users1 offline immediate’;

Rman> sql ‘ alter tablespace users2 offline immediate’;

Rman>restore tablespace users1,users2;

Rman>recover tablespace users1,users2;

Rman>sql ‘alter tablespace users1 online;

Rman>sql ‘alter tablespace  users2 online;


9.2.2.2 恢复数据文件

Rman> sql ‘alter database datafile 6 offline

Rman > restore datafile 6

Rman>recover datafile 6

Rman > sql ‘alter database datafile 6 online

若由于磁盘文件损坏导致数据文件无法访问,那么恢复时数据文件可能无法再恢复到原路径,必须在执行restore命令之前,给数据文件制定新的路径,方式如下:

Rman > alter database datafile 6 offline

RMAN> run {

2> set newname for datafile 6 to '/u01/data/backup/users01.dbf';

3> restore datafile 6;

4> switch datafile 6;

5> recover datafile 6;

6> }

Rman>alter database datafile 6 online


9.2.3 恢复归档日志文件

如果只是为了在恢复数据文件后应用归档文件,那并不需要手动对归档文件进行恢复,rman会在recover的时候自动对适当的归档进行恢复。

单独恢复归档文件一般是有特别的需求,如创建了Data Guard环境,standby端丢失了部分归档文件,必须从primary端重新获取。

恢复归档文件也非常灵活,rman的recover命令中提供了多种限定条件,可以精确指定恢复哪些备份的归档文件。Eg

Rman > restore archivelog sequence between 20 and 30;


也可以通过set命令将恢复的归档不放在log_archive_dest_1指定的路径下。

Rman> run{

2>set archivelog destination to ‘/u01/data/backup/’;

3>restore archivelog sequence between 35 and 40;

4>set archivelog destination to ‘/u01/data/backup/’;

5>restore archivelog sequence between 41 and 45;


9.2.4 恢复控制文件和spfile初始化参数文件

9.2.4.1 恢复控制文件

1、从自动备份中恢复

由于没有了控制文件,目标数据库只能启动到nomount状态,但在启动数据库之前,必须(1)首先通过set命令设置DBID;

Rman>set dbid=1804284502;


如何获得目标数据库的DBID?

方法一:创建自动备份时,如果没有更改其命名方式,文件名中包含DBID

方法二:查看之前生成的rman备份日志,当使用rman登录目录数据库,最先输出的信息中就会显示出目标数据库的DBID

方法三:连接到目标端数据库之后,查询v$DATABASE视图也可以获得。

(2)启动数据库到nomount状态:

Rman>startup nomount;

(3)恢复至默认路径下:

Rman>restore controlfile from autobackup ;

恢复到指定路径下:

Rman>restore controlfile fo ‘/u01/data/backup’ from autobackup;


说明:如果在执行备份操作前,修改过自动备份的默认路径的话,那么此时执行上述命令会提示你找不到备份文件,此时需要重新设置一下自动备份的路径。在nocatalog模式下修改控制文件自动备份的保存路径时,不要使用configure命令(configure命令进行的配置为永久配置,默认需要保存到目标数据库控制文件的,而此处控制文件不村子,因此configure会失败,此时需用到set)

Eg: set设置控制文件自动备份的路径

Rman>set controlfile autobackup format for device type disk to ‘/u01/data/backup’;

然后执行restore命令

Rman>restore controlfile from autobackup;


提示:使用备份的控制文件进行恢复之后,必须recover database,并且以open resetlogs方式打开数据库。


2、从备份集中恢复

Rman>set dbid=1804284502;

Rman>startup nomount;

Rman>restore controlfile from ‘/u/data/backup/c-1804284502-20170411-15’;


9.2.4.2 恢复服务器端初始化参数文件(spfile)

rman在备份控制文件时会自动备份spfile。Spfile的恢复较为容易,数据库在运行过程中会在alter文件中留下数据库启动时的初始化参数信息。Rman的恢复如下:

Rman>set dbid=1804284502;

Rman>startup nomount;

Rman>restore spfile from autobackup; 恢复到默认路径

Rman>restore spfile to ‘/tmp/spfiletmp.ora’ from autobackup;

Rman>restore spfile to ‘/tmp/spfiletmp.ora’ from ‘/u01/data/backup/c-1804284502-20170411-16’;







查看表空间及其关联数据文件:

SQL>

 select ts.tablespace_name,df.file_name,df.file_id,df.status

   from dba_tablespaces ts,

   (select tablespace_name,file_id,file_name,status

   from dba_data_files

   union all

   select tablespace_name,file_id,file_name,status

   from dba_temp_files) df

   where ts.tablespace_name=df.tablespace_name

   ;



TABLESPACE_NAME      FILE_NAME  FILE_ID STATUS

-------------------- ---------------------------------------- ---------- ------------------

USERS1      /u01/data/test/users02.dbf        5 AVAILABLE

USERS      /u01/data/test/users01.dbf        4 AVAILABLE

UNDOTBS1      /u01/data/test/undotbs01.dbf        3 AVAILABLE

SYSAUX      /u01/data/test/sysaux01.dbf        2 AVAILABLE

SYSTEM      /u01/data/test/system01.dbf        1 AVAILABLE


SQL>


9.3 rman 恢复示例

9.3.1 归档模式有备份,丢失数据文件的恢复

Eg:归档模式下有备份,数据文件datafile 5被删除,导致数据库无法开启。

Rman > restore datafile 5 ;

Rman > recover datafile 5;

Rman > alter database open;


9.3.2 归档模式无备份,丢失数据文件的恢复

只有在某些特定条件下(丢失的数据文件,从其创建时刻起所有的重做日志都还在),才有可能在没有备份的情况下恢复丢失的数据文件。

并不是所有数据文件都能够被恢复(如system表空间的数据文件丢失或损失,除非借助备份,否组无法直接恢复。),不是所有的数据文件都需要恢复(例如临时表空间文件)

Eg:  数据文件datafile 4被删除。恢复过程如下:

首先通过alter database create datafile 命令重建一个该文件,如果是由于磁盘损坏导致的数据文件的丢失,可能原路径已经无法访问,此时可以在创建数据文件时,指定一个新的路径。

Sql > alter database create datafile ‘/u01/data/test/users01.dbf’ as ‘/u01/data/test/users01.dbf’ 

Sql > recover datafile 4;

Sql > alter database open;


或rman的方式


RMAN> list backup of datafile 7;


specification does not match any backup in the repository


RMAN> shutdown immediate;


database closed

database dismounted

Oracle instance shut down


RMAN> startup;


connected to target database (not started)

Oracle instance started

database mounted

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: failure of startup command at 04/13/2017 18:26:41

ORA-01157: cannot identify/lock data file 7 - see DBWR trace file

ORA-01110: data file 7: '/u01/data/test/users04'


RMAN> restore datafile 7;


Starting restore at 2017:04:13 18:27:29

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=18 device type=DISK


creating datafile file number=7 name=/u01/data/test/users04

restore not done; all files read only, offline, or already restored

Finished restore at 2017:04:13 18:27:30


RMAN> recover datafile 7;


Starting recover at 2017:04:13 18:27:36

using channel ORA_DISK_1


starting media recovery

media recovery complete, elapsed time: 00:00:00


Finished recover at 2017:04:13 18:27:36


RMAN> alter database open;


database opened


RMAN>



9.3.3 丢失联机重做日志的恢复

联机重做日志的状态:

Usused:表示重未用过。一般刚创建或open resetlogs打开后,联机重做日志组为这一状态。

Current:表示当前的

Active:表示活动的非当前日志文件。有可能已经完成归档或未被归档,活动的日志文件在crash恢复时会被用到。Active状态意味着,检查点尚未完成,如果日志文件循环使用再次达到该文件,数据库将处于停顿的状态,在alter日志中,可以看到类似的记录。

此时可以查看v$session_wait


dbwr进程(sid=2)正在进行db file parallel write.日志文件必须等待dbwr完成检查点触发的写操作之后才能被覆盖。若参数log_checkpoints_to_altertrue的,还可以在alter文件中清晰地看到检查点的增进和完成情况。



Clearing:日志正在清空,当执行alter database clear logfile语句时该日志组会变为这种状态,语句执行完后,操作的日志组状态表为unused.

Clearing_current:日志正在清空,但是由于清空时出错如I/o设备无法访问,导致清空工作不能顺序完成,则该日志组就会被置于这种状态。

Inactive: 不活动状态,表示该组日志中的内容已经归档或顺利写入数据文件,该组日志可被继续使用。


9.3.3.1 丢失非当前的联机重做日志文件

Eg: 模拟删除/u01/data/testredo01.log, redo01的状态为inactive

恢复过程如下:

Sql > alter database clear logfile group 1;

Sql>alter database open;


在数据库运行过程中,非当前的联机重做日志损坏不一定会导致数据库崩溃,因为非当前日志暂时并未使用到,数据库还能正常的运行,不过一旦数据库切换到损坏的联机重做日志文件是,就会发现该文件无法访问而导致报错。


9.3.3.2 丢失当前的联机重做日志文件

Eg:  被删除的日志文件为当前重做日志文件。 (状态为current)

该状态会丢失数据,只能执行不完全恢复。



SQL> startup mount;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.


Total System Global Area  830930944 bytes

Fixed Size     2257800 bytes

Variable Size   536874104 bytes

Database Buffers   289406976 bytes

Redo Buffers     2392064 bytes

Database mounted.

SQL> alter database clear logfile group 3;


Database altered.


SQL> alter database clear logfile group 1;

alter database clear logfile group 1

*

ERROR at line 1:

ORA-00350: log 1 of instance test (thread 1) needs to be archived

ORA-00312: online log 1 thread 1: '/u01/data/test/redo01.log'



SQL> recover database until cancel;

Media recovery complete.

SQL> alter database open resetlogs;


Database altered.


SQL>



9.3.4 不同故障的恢复总结。



9.4 通过rman备份恢复数据库到其他服务器

1、源库完整备份(包括归档日志,数据文件,控制文件)

2、目标库初始化参数文件配置(有关路径的参数要保持一致),创建密码文件

3、目标库建立目录并启动到nomout状态,配置监听和网络

4、恢复控制文件到加载状态。(拷贝备份的数据文件、控制文件、归档日志文件)

RMAN> set dbid=1804284502;  (原库的dbid)


RMAN>restore controlfile from '/u01/app/oracle/fast_recovery_area/TEST/autobackup/2017_04_13/o1_mf_s_941227934_dgytryv9_.bkp';  

Rman > alter database nomount;

Rman > catalog start with ‘path’  (备份文件存放路径)


Rman> restore database;

Rman> recove database;

Rman> alter database open resetlogs;

创建的热备份并不是一致性备份,源端的归档是拷贝过来了,但是联机重做日志并没有随备份集复制过来。故....




若异机的目录路径不一致,则:

Rman > catalog start with ‘paht’

Rman> set newname for datafile1 to ‘path’

.

.

.

Rman > restore database ;

Rman> switch datafile all;

Rman >recover database;

.

.

.


9.5 使用影像副本恢复

Eg: 模拟datafile 7出现故障

备份:

RMAN> backup as copy datafile 7 format '/u01/data/backup/datafile07.dbf';


恢复:

RMAN> run

2> {sql 'alter database datafile 7 offline';

3> set newname for datafile 7 to '/u01/data/backup/datafile07.dbf';

4> switch datafile 7;   等同于sql*plus中执行的alter database rename file命令。

5> recover datafile 7;

6> sql 'alter database datafile 7 online';}



9.6 块恢复

9.6.1 受损块的检查

Rman备份数据文件时,若遇到坏块的情况则备份失败,当备份失败时,可以通过set maxcorrupt关键字再次运行备份,完成备份后,在视图v$database_block_corruption选项中查看块损坏的范围。

Eg: rman备份可以继续,直到遇到的受损块不超过3个。(可以自定义该数值)

Rman > run{

Set maxcorrupt for datafile 7 to 3;

Backup datafile 7;}


不检查物理坏块:

RMAN> backup nochecksum datafile 7;

检查逻辑坏块:

RMAN> backup check logical datafile 7 ;


9.6.2 blockrecover还原和恢复一个或多个块列表

RMAN> blockrecover datafile 7 block 5;

RMAN> blockrecover datafile 7 block 5,6,7 datafile 6 block 1,2,3;

RMAN> blockrecover datafile 7 block 5,6,7 datafile 6 block 1,2,3 from backupset 1092;

RMAN> blockrecover datafile 7 block 5,6,7 datafile 6 block 1,2,3 from tag monthy_whole;

RMAN> blockrecover corruption list ;  还原和恢复视图中列出的每个块。



9.7 duplicate复制数据库


9.7.1 duplicate复制实质

依靠目标数据库的备份集创建一个duplicate数据库(数据库副本),可以复制整个数据库,也可以仅包含目标数据库的部分表空间。目标数据库和duplicate数据库可以在不同的机器上,也可以在相同的机器上。


9.7.2 三种不同情况的复制

9.7.2.1 异机相同路径结构的复制

(1)创建辅助实例

(2)运行duplicate命令

注意必须指定nofilenamecheck参数


9.7.2.2 异机不同路径结构的复制

同本地不同路径结构的复制。区别在于异机db_name相同,但本地db_name不能相同。


9.7.2.3 本地不同路径结构的复制

9.7.2.3.1创建辅助实例

1、创建辅助实例的秘钥文件

orapwd  file=orapwtest  password=test

2、配置初始化参数文件

以*DEST结尾的参数要注意修改

设置Db_file_name_convert参数,让其自动转换数据文件路径

设置Log_file_name_convert参数,让其自动转换日志文件路径

并保证对应目录存在

3、启动辅助实例

Duplicate 必须以spfile启动,如若不然,则要在执行duplicate时指定pfile参数

Export ORACLE_SID=test

Sql > create spfile from ‘/u01/app/oracle/product/11.2.0/db_1/dbs/inittest.ora’ 

Sql > startup nomount   

4、配置监听和网络服务名

Listener.ora文件

 (SID_DESC =

   (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)

   (SID_NAME = test)

 )




tnsnames.ora文件


test=


  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.244)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = test)

    )

  )


9.7.2.3.2 启动目标数据库到mount或open模式并验证备份是否有效

RMAN> list backup of database;


using target database control file instead of recovery catalog


List of Backup Sets

===================



BS Key  Type LV Size       Device Type Elapsed Time Completion Time    

------- ---- -- ---------- ----------- ------------ -------------------

42      Full    1.05G      DISK        00:00:38     2017:04:14 02:20:52

        BP Key: 52   Status: AVAILABLE  Compressed: NO  Tag: TAG20170414T022014

        Piece Name: /u01/app/oracle/fast_recovery_area/ORACLE/backupset/2017_04_14/o1_mf_nnndf_TAG20170414T022014_dgzjbyl4_.bkp

  List of Datafiles in backup set 42

  File LV Type Ckp SCN    Ckp Time            Name

  ---- -- ---- ---------- ------------------- ----

  1       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/system01.dbf

  2       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/sysaux01.dbf

  3       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/undotbs01.dbf

  4       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/users01.dbf

  5       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/users02.dbf

  6       Full 1665472    2017:04:14 02:20:14 /u01/data/oracle/rmantbs01.dbf


RMAN>


9.7.2.3.3执行复制

Rman target sys/oracle@oracle auxiliary sys/test@test

Rman > duplicate target database to “test”;

 


另1:若db_file_name_convert和log_file_name_convert参数没有指定则可以用set newname for datafile to ‘path’转换数据文件,次方式恢复的数据库联机日志文件和临时文件的路径会在系统的默认的位置,恢复完成后可手动调整:

也可以将set newname换成configure auxname . Configure auxname是在run块外面执行的,在duplicate命令执行完成后,清除configure auxname.(eg: configure auxname for datafile 1 clear;)




RMAN> run {

2> set newname for datafile 1 to '/u01/data/test/system01.dbf';

3> set newname for datafile 2 to '/u01/data/test/sysaux01.dbf';

4>  set newname for datafile 3 to  '/u01/data/test/undotbs01.dbf';

5>  set newname for datafile  4 to '/u01/data/test/users01.dbf';

6>  set newname for datafile  5 to '/u01/data/test/users02.dbf';

7>  set newname for datafile  6 to '/u01/data/test/rmantbs01.dbf';

8>  set newname for datafile  7 to '/u01/data/test/users03.dbf';

9> duplicate target database to "test";

10> }


SQL> select member from v$logfile;


MEMBER

--------------------------------------------------------------------------------

/u01/data/test/TEST/onlinelog/o1_mf_3_dgzw43kg_.log

/u01/app/test/fast_recovery_area/TEST/onlinelog/o1_mf_3_dgzw43n6_.log

/u01/data/test/TEST/onlinelog/o1_mf_2_dgzw42b8_.log

/u01/app/test/fast_recovery_area/TEST/onlinelog/o1_mf_2_dgzw42dx_.log

/u01/data/test/TEST/onlinelog/o1_mf_1_dgzw411y_.log

/u01/app/test/fast_recovery_area/TEST/onlinelog/o1_mf_1_dgzw415n_.log


6 rows selected.


SQL> alter database drop logfile group 1 ;  (保证日志已经规定或没有使用)


SQL> alter database add logfile group 2('/u01/data/test/redo02.dbf') size 50m;


SQL >alter tablespace temp add tempfile '/u01/data/test/temp01.dbf' size 50m;


SQL> alter tablespace temp drop tempfile 1;




另2:或者也可以按如下方式进行:

 Rman > duplicate target database to "test"

 pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/inittest.ora'

 db_file_name_convert='/u01/data/oracle','/u01/data/test'

 logfile   

 '/u01/data/test/redo01.log' size 50m,

 '/u01/data/test/redo02.log' size 50m,

 '/u01/data/test/redo03.log' size 50m;



9.8 表空间时间点恢复(TSPITR)


仅在部分数据库上执行不完整恢复的技术。实质上,不完整恢复必须应用整个库,TSPSITR依据目标数据库的表空间的一个子集来创建辅助数据库,仅在此子集上执行不完整恢复,然后使用辅助数据库的表空间来替代目标数据库中的表空间。


9.8.1 TSPITR使用情形

(1)在一个逻辑上独立的表空间中,重要表中的行数据受损或被删除。

(逻辑上独立是指其他表空间中的对象与其不存在索引或父/子关系)

(2)误用数据定义语言(DDL)更改了表空间中的一个或多个表的结构,因此无法使用闪回表来恢复这些表。

(3)使用了purge选项删除了表。


9.8.2 rman在TSPITR期间执行的步骤:

(1)使用随机生成的名称启动辅助实例。

(2)将控制文件还原到辅助实例,并加载辅助数据库。

(3)将恢复集的数据文件还原到辅助数据库。

(4)将辅助集的数据文件还远到辅助数据库。

(5)将辅助数据库恢复到期望的时间点

(6)从辅助数据库中导出已恢复表空间的字典元数据。

(7)将恢复表空间的字典元数据导入到目标数据库中。

(8)删除所有辅助文件。



故TSPITR不能恢复已经删除的表空间,若重命名了表空间,则无法将其恢复到重命名之前的时间点。



目标时间: 将表空间恢复到哪个时间点或SCN


恢复集:包含将要予以恢复的表空间的数据文件组


辅助集:恢复表空间需要的其他数据文件,如system,undo或temp表空间的数据文件


辅助目标:存储辅助文件集的临时位置,包括联机重做日志文件、归档重做日志文件和恢复过程中创建的控制文件副本。



9.8.3 执行TSPITR前检查


1、验证表空间的依赖性(数据字典ts_pitr_check)

要恢复的表空间必须是自包含的,不依赖于不予恢复的其他表空间中的对象。


Eg:检查名为pitr的表空间中的对象是否依赖其他表空间中的任何对象以及其他表空间中的对象是否依赖于pitr表空间中的对象。

(reason列: reason why tablespace point-in-time recovery cannot proceed)


SQL>

 select OBJ1_OWNER,OBJ1_NAME,TS1_NAME,

      OBJ2_OWNER,OBJ2_NAME,TS2_NAME

  from ts_pitr_check

  where    

  ts1_name='PITR' and ts2_name!='PITR'

  or (ts1_name!='PITR' and ts2_name='PITR');


no rows selected

SQL>


2、确定执行TSPITR后会丢失哪些对象(视图ts_pitr_objects_to_be_droopped)

确定恢复表空间后将要丢失的在目标时间之后创建的任何对象。


SQL> select owner,name,to_char(creation_time,'yyyy-mm-dd:hh24:mi:ss') create_time

   from ts_pitr_objects_to_be_dropped where tablespace_name='pitr'

   and creation_time > to_date('2017-04-14:15:50:09','yyyy-mm-dd:hh24:mi:ss');


9.8.4 使用rman自动执行TSPITR

Rman> Recover tablespace pitr until time ‘18-12-08 09:01:00’

Auxiliary destination ‘/u01/data/oracle’;


Rman >sql ‘alter tablespace interface online’;


9.8.5 示例

(1)创建一个表空间:

Create tablespace pitr datafile ‘/u01/data/oracle/pitr01.dbf’ size 20m;

(2)创建表

Create table t1(c1 date) tablespace  pitr;

Insert into t1 values(sysdate);

Commit

(3)

Export nls_date_format=”dd-mm-yy hh24:mi:ss

(4)

Backup database

(5)

select sysdate from dual;

Drop table t1;

(6)

Recover tablespace pitr until time ‘18-12-08 09:01:00’

Auxiliary destination ‘/u01/data/oracle’;     (目录而不是文件,确保参数db_create_file_dest与该路径一直)




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31411496/viewspace-2138227/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31411496/viewspace-2138227/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值