当前位置:文档之家› RMAN-系列(六)------RMAN-高级恢复

RMAN-系列(六)------RMAN-高级恢复

RMAN 系列(六) ---- RMAN 高级恢复RMAN 系列(六) ---- RMAN 高级恢复

这几天心情不太好,这周连续加上3天班,有点累,但是不管怎样,学习不能放下,在当下的社会,要改变自己的命运只能靠学习了,有点很无耐,还是专心搞技术吧。这篇资料主要讲了一下几个知识点:

1.不完全恢复
2.基于RMAN的恢复主题
3.表空间时间点恢复
4.验证备份可恢复
5.跨平台的数据库移动和RMAN


一.不完全恢复
不完全恢复是指不完全的数据恢复,不完全恢复与完全恢复在许多方面是相同的,他们基本的命令集相同,但不完全恢复添加了一些其他命令。引起不完全恢复的原因有很多,如丢失了联机重做日志或归档的重做日志,或者出现重大的用户错误。不完全恢复会影响整个数据库,换句话,不能只对数据库的一部分执行不完全恢复操作,因为这个会使数据库的一部分具有与这个数据库其余部分不同的SCN和时间点。
要将数据库数据还原到与数据库剩余部分不同的时间点,可以用基于表空间时间恢复或者用闪回技术。
不完全恢复方法包括:基于时间,SCN,日志序列或取消的恢复。

1.1使用resetlogslogs命令
在不完全恢复期间,通常需要使用resetlogs命令打开数据库,这是因为我们要从已经简历的现有日志流中脱离出来,并且需要向Oracle说明这种情况.Resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始.数据库的逻辑生存期也称为一个对应物(Incarnation).每次使用resetlogs命令都会创建一个新的数据库对应物,这对于恢复操作来说非常重要.
每次使用resetlogs命令时,SCN计数器不会被重置,不过Oracle会重置其他计数器(如:日志序列号),同时还会重置联机重做日志的内容.
Oracle10g简化了通过resetlogs命令进行的恢复,在归档的重做日志名中添加了一个新的特换串(%r),该字符串表示resetlogID号。在log_archive_dest_format参数串中包括%r时,归档的重做日志名在每个resetlogs命令中保持唯一。这种改动以及其他的内部Oracle数据库改动使oracle可以很容易的通过给定的resetlogs操作恢复数据库。因此,可以很容易的在执行操作后立刻备份数据库,然而,我们仍然认为在任何不完全恢复后备份数据库是很有必要的。

OracleRman跨resetlogs版本恢复
https://www.doczj.com/doc/0a15918317.html,/tianlesoftware/archive/2009/10/17/4682463.aspx


1.2建立恢复点
使用RMAN执行不完全恢复操作时需要完成一个工作是简历恢复目标。恢复目录是恢复进程的终点,通常我们基于一个时间点,一个指定的SCN或者一个日志序列号来表示它。我们可以采用许多不同的方法建立恢复目标。

1.2.1在run代码块中使用set

命令与untiltime,untilSCN或untilsequence参数
Run
{
Setuntiltime"to_date('2010-07-0514:02:00','yyyy-mm-ddhh24:mi:ss')";
Restoredatabase;
Recoverdatabasealterdatabaseopenresetlogs;
}
执行这条命令时,RMAN会查找与恢复目标时间最近(并非恢复目标时间本身也不能是位于恢复目标之间的时间)的备份集,并且从这个备份集中还原数据库。如果数据库置于noarchivelog模式中,恢复操作会在备份集的时间停止;否则在执行recover命令期间,oracle会在所定义的恢复目标(不包含恢复目标本身)上应用归档的重做日志(以及需要应用的任何增量备份)。
注意:如果尝试恢复到特定备份的完成点,则必须恢复到备份集中文件的CKPSCN或CKPTIME,在不同备份集的RMANlist命令中会列出这些内容。有时使用备份的CKPTIME并不够,还可能导致ORA-1152错误。

1.2.2在restore和recover命令中直接使用untiltime,untilSCN和untilsequence参数
这种方法避免使用run代码块,也倾向与使用这种方法。
Startupmount;
Restoredatabaseuntiltime"to_date('2010-07-0514:02:00','yyyy-mm-ddhh24:mi:ss')";
Recoverdatabaseuntiltime"to_date('2010-07-0514:02:00','yyyy-mm-ddhh24:mi:ss')";
Alterdatabaseopenresetlogs;
1.3基于时间的恢复
这种恢复类型允许用户将数据库恢复到与指定时间一致的状态。当然,如果不存在能将数据库还原到用户请求的时间的有效备份或归档重做日志,Oracle就会报RMAN-03002和RMAN-20207的错误。
必须具备在我们指定的恢复时间之前生成的数据库备份,此外还需要所有归档的重做日志。

1.4基于SCN的恢复
Oracle允许用户将数据库恢复到指定的SCN,实际上,这并不是一种常见的恢复方法。示例如下:
Startupmount;
RestoredatabaseuntilSCN1000;
RecoverdatabaseuntilSCN1000;
Alterdatabaseopenresetlogs;

注意:该示例可以将数据库还原到SCN1000,但是不会包含SCN.

1.5基于日志序列的恢复
RMAN允许用户将数据库恢复到指定序列号的归档重做日志。如果归档的重做日志中存在间隙,使用这种恢复方法就非常方便。间隙通常意味着我们只能将数据库还原到间隙的开始点。
Startupmount;
Restoredatabaseuntilsequence100thread1;
Recoverdatabaseuntilsequence100thread1;
Alterdatabaseopenresetlogs;




二.基于RMAN的恢复主题

2.1只读表空间的恢复
在默认情况下,即使丢失了只读的数据文件,RMAN也不会在执行完全恢复数据库还原操作时还原只读的数据文件。要在完全恢复期间还原只读的数据文件,就必须在restore命令中使用checkreadonly参数,如:
Restoredatabasecheckreadonly;

注意,执行recovertablespace或recoverdatafile命令时,RMAN的工作情况是不一样的。使用这两个命令时,不管表空间是否为只读状态都会执行恢复操作。

2.2归档重

做日志的还原
在使用RMAN的普通恢复过程中,不必恢复归档的重做日志。不过,偶尔也会要求还原一个或多个归档的重做日志。例如,我们可能需要使用LogMiner在备份中存储的归档重做日志文件里查找一些信息。
Restorearchivelogall;
Restorearchivelogfromlogseq=20thread=1;
Restorearchivelogfromlogseq=20untillogseq=30thread=1;

还可以将归档的重做日志还原到默认位置以外的位置上:
Run
{
Setarchivelogdestinationto"d:/arch";
Restorearchivelogall;
}

注意:1.上例中的set命令没有替代方法,必须要求使用set。
2.如果RMAN认为一个归档的重做日志已存在,就不会在磁盘上还原这个归档的重做日志,即使设置的还原位置不同与默认的归档日志位置,Oracle也不会在这个新的位置上恢复归档的重做日志。

2.3数据文件副本的还原
可以从数据文件副本(不是备份集)中还原数据库的数据文件。要实现这个功能,需要先使用restorefromdatafilecopy命令,然后再使用恢复数据库(或表空间,数据文件)的recover。
RMAN>Restore(datafile5)fromdatafilecopy;--此处的圆括号是必须的,如果没有就报错
RMAN>Recoverdatafile5;
SQL>Alterdatabasedatafile5online;

执行restore时,该命令会识别需要还原的数据文件的最新副本,然后从这个副本中还原这些数据文件。数据文件的最新副本可能是在一个数据文件副本中,而不是在一个副本中。在这种情况下,Oracle会恢复这个数据文件副本。

2.4恢复讹误的数据块
即使与讹误数据块关联的数据文件一直联机,也可以通过用块介质恢复(blockMediarecover:BMR)执行块级别恢复操作来修复Oracle数据库中的这些逻辑上或者物理上的讹误数据块。
一般出现数据块错误时,都会有错误消息:
ORA-01578:ORACLEdatablockcorrupted(file#18,block#88)

如果没有BMR时,我们必须从一个备份中恢复这个数据文件,在恢复过程中,用户不能使用该数据块文件中的所有数据。
用BMR恢复就很简单,只需要执行blockrecover命令即可:
Blockrecoverdatafile18block88;

如果有必要,可以同时恢复多个数据文件的多个数据块。如:
Blockrecoverdatafile18block16,17,88,108;
Blcokrecoverdatafile18block88datafile19blcok188;

Oracle会跟踪在备份和恢复期间发生的数据块讹误。如果检测到备份或复制操作出现讹误,由于Oracle不允许在备份中出现讹误,所有这个备份就会失败。当然,可以配置RMAN允许一定数量的讹误,但是不推荐这种用法。
可以使用backupvalidatedatabase命令查看RMAN检测到的所有数据库讹误。这条命令会在v$backup_corruption和v$database_block_corruption视图中填充检测到的所有讹误数据块。如果讹误发生在复制操作期间,v$copy_corruption视图就会指明

包含讹误的备份集。
注意的是:v$backup_corruption是一个显示历史讹误的视图,v$database_block_corruption则是一个显示当前数据块讹误的视图。一旦修正了数据库的块讹误,就需要重新运行backupvalidatedatabase命令,然后查询v$database_block_corruption视图以确保不存在其他讹误。
查询v$database_block_corruption视图可以查看讹误数据块的详细信息。如下所示,使用具有corruptionlistrestore参数的blockrecover命令可以方便地修正v$database_block_corruption视图中的讹误数据块。
Blockrecovercorruptionlistrestoreuntiltime'SYSDATE-5';
这条命令将还原讹误列表中最近5天的所有讹误数据块。在上面的命令中,还可以使用untiltime和untilsequence.


2.5恢复前一个对应物
一个数据库的对应物(incarnation)对应这个数据库的特定逻辑生存期。有时我们需要使用上次执行resetlogs命令打开数据库前生成的一个备份来还原数据库,或者可能需要还原到执行上一个resetlogs命令之前的时间点。这就需要用到incarnation.

2.5.1使用恢复目录恢复前一个对应物
先假设使用恢复目录执行了备份操作,并且最近使用了resetlogs命令执行过时间点恢复,现在需要使用执行resetlogs命令之前的一个备份来恢复数据库。
操作步骤:
(1)启动但不加载实例,这是因为我们要先得到一个与恢复数据库对应物关联的控制文件
(2)使用resetdatabasetoincarnation命令为RMAN指示对应物的备份集。
(3)Restorecontrolfile,使rman还原最新的控制文件
(4)加载数据库
(5)Restore数据库
(6)Recover数据库
(7)使用resetlogs打开数据库
示例如下:
C:/Users/Administrator.DavidDai>rmantarget/catalogrman/rman@orcl;
恢复管理器:Release11.2.0.1.0-Productionon星期二7月610:31:402010
Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.
连接到目标数据库:ORCL(DBID=1247395743)
连接到恢复目录数据库
RMAN>listincarnation;
数据库原型列表
DB关键字Inc关键字DB名DBIDSTATUS重置SCN重置时间
-------------------------------------------------------------
212ORCL1250808537PARENT130-8月-05
24ORCL1250808537PARENT53490730-6月-10
2323ORCL1250808537CURRENT94099606-7月-10
RMAN>startupforcenomount;
RMAN>resetdatabasetoincarnation4;
RMAN>restorecontrolfile;
RMAN>alterdatabasemount;
RMAN>restoredatabaseuntilscn940990;
RMAN>recoverdatabaseuntilscn940990;
RMAN>alterdatabaseopenresetlogs;

2.5.2不使用恢复目录恢复前一个对应物
为了通过前一个对应物进行恢复,需要一个包含前一个对应物信息的控制文件。在大多数情况下,这可能是当前的控制文件。如果当前的控制文件不了解需要恢复的对应物,则需要还原包含该信息的控制文件,从而使得利用该方法恢复数据。可以

使用listincarnationofdatabase命令查看控制文件了解哪些对应物.
没有连接恢复目录的listincarnation输出与已连接恢复目录时的listincarnation输出有一些细微的区别。这是因为信息从控制文件中获得的,因此某些键(如Inckey)将会不同。
操作步骤如下:
(1)从RMAN中运行listincarnation命令,确定希望复位到哪个对应物
(2)关闭数据库
(3)启动加载数据库
(4)执行resetdatabasetoincarnation命令复位对应物
(5)使用restore命令还原数据库
(6)recover恢复数据库
(7)使用resetlogs打开数据库

示例如下:
RMAN>listincarnationofdatabase;
数据库原型列表
DB关键字Inc关键字DB名DBIDSTATUS重置SCN重置时间
-------------------------------------------------------------
11ORCL1247395743PARENT102-4月-10
22ORCL1247395743PARENT94097621-5月-10
33ORCL1247395743ORPHAN842661706-7月-10
44ORCL1247395743CURRENT855496806-7月-10
RMAN>shutdownimmediate;
RMAN>startupmount;
RMAN>resetdatabasetoincarnation2;
将数据库重置为原型2
RMAN>restoredatabaseuntiltime"to_date('2010-7-523:50:39','yyyy-mm-ddhh24:mi:ss')";
启动restore于06-7月-10
使用通道ORA_DISK_1
通道ORA_DISK_1:正在开始还原数据文件备份集
通道ORA_DISK_1:正在指定从备份集还原的数据文件
通道ORA_DISK_1:将数据文件00001还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSTEM01.DBF
通道ORA_DISK_1:将数据文件00002还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/SYSAUX01.DBF
通道ORA_DISK_1:将数据文件00003还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/UNDOTBS01.DBF
通道ORA_DISK_1:将数据文件00004还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/USERS01.DBF
通道ORA_DISK_1:将数据文件00005还原到D:/APP/ADMINISTRATOR/ORADATA/ORCL/DAVE0.DBF
通道ORA_DISK_1:正在读取备份片段F:/BACKUP/ORCL_1GLI2EN5_1_1.BAK
通道ORA_DISK_1:段句柄=F:/BACKUP/ORCL_1GLI2EN5_1_1.BAK标记=TAG20100705T232732
通道ORA_DISK_1:已还原备份片段1
通道ORA_DISK_1:还原完成,用时:00:01:45
完成restore于06-7月-10
RMAN>recoverdatabaseuntiltime"to_date('2010-7-523:50:39','yyyy-mm-ddhh24:mi:ss')";
启动recover于06-7月-10
使用通道ORA_DISK_1
正在开始介质的恢复
线程1序列156的归档日志已作为文件D:/ARCHIVELOG/ORCL_1_156_719615012.ARC存在于磁盘上
归档日志文件名=D:/ARCHIVELOG/ORCL_1_156_719615012.ARC线程=1序列=156
介质恢复完成,用时:00:00:02
完成recover于06-7月-10
RMAN>alterdatabaseopenresetlogs;
数据库已打开
RMAN>listincarnation;
数据库原型列表
DB关键字Inc关键字DB名DBIDSTATUS重置SCN重置时间
-------------------------------------------------------------
11ORCL1247395743PARENT102-4月-10
22ORCL1247395743PARENT94097621-5月-10
33ORCL1247395743ORPHAN842661706-7月-10
44ORCL1247395743CURRENT855496806-7月-10

注:until后面可以跟三种类型:
1.restoredatabaseuntiltime"to_date

('2010-7-523:50:39','yyyy-mm-ddhh24:mi:ss')";
2.recoverdatabaseuntilscn1000
3.recoverdatabaseuntilsequence150;
查看sequence:
SQL>selectsequence#fromv$archived_log;
SEQUENCE#
161
162
1
2
3
4
从这个结果也证明resetlogs会重置sequnce,但是scn不会被重置。

查看scn:
SQL>selectcurrent_scnfromv$database;
CURRENT_SCN
-----------
8555698
SQL>selectdbms_flashback.get_system_change_numberfromdual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
8555706

OracleRman跨resetlogs版本恢复
https://www.doczj.com/doc/0a15918317.html,/tianlesoftware/archive/2009/10/17/4682463.aspx





三.表空间时间点恢复
表空间时间点恢复,TSPITR:tablespacepoint-in-timerecovery.Oracle官网文档的连接地址:
RMANTablespacePoint-in-TimeRecovery(TSPITR)
https://www.doczj.com/doc/0a15918317.html,/docs/cd/B19306_01/backup.102/b14191/rcmtspit.htm

使用表空间时间点恢复(TSPITR)可以将一个或多个非SYSTEM表空间恢复到与数据库其他部分不同的某个时间点上。这点和Flashback有点类型。比如用户误删了3张表,我们就可以用TSPITR恢复。

OracleFlashback技术总结
https://www.doczj.com/doc/0a15918317.html,/tianlesoftware/archive/2009/10/16/4677378.aspx

先看TSPITR的工作流程,如下图所示:
(1)在辅助实例上用target的备份集restore数据文件
(2)在辅助库上用target的归档文件recover数据文件
(3)在辅助库上导出相关数据
(4)修改主库的控制文件
(5)用辅助库上导出文件导入辅助库上。





几个相关相关的定义:
辅助实例(Auxiliaryinstance):我们创建的临时实例,RMAN可以使用这个实例执行TSPITR,完成TSPITR操作后,可以删除辅助实例。
辅助数据库(Auxiliarydatabase):主数据库的一个复本或子集,用于表空间的临时恢复。
主数据库(Primarydatabase):需要TSPITR的数据库。
恢复集(Recoveryset):构成恢复到某一个时间点表空间的表空间或数据文件,SYSTEM表空间数据文件不能作为恢复集的一部分。
辅助集(Auxiliaryset):需要执行TSPITR的其他目标数据库文件集。辅助集包括备份控制文件,回滚和撤销段表空间数据文件,system表空间数据文件,辅助数据库的联机重做日志,以及一个可选的位于辅助数据库中的临时的表空间。
目标实例(targetinstance):包含将要恢复的表空间


3.1执行自动的TSPITR

3.1.1为TSPITR做准备
在开始执行TSPITR之前需要完成一些步骤。
(1)确定还原的时间点
这是最关键的因素。我们需要认真对待这项操作,因为如果没有使用恢复目录,则表空间的恢复是一次性的过程。如果错误地标识了恢复的时间点,则不能重新来过。如果使用恢复目录,则不存在这种限制。

(2)确定传送集中的对象是自包含的
应该使用TS_PITR_CHECK视图来确保恢复集是完整的,并且标识所

有可能要用到的其他表空间。首先需要检查TS_PITR_CHECK视图来确保没有其他相关的表空间。比如我们检查DAVE表空间,示例代码如下:
/*Formattedon2010/7/717:10:00(QP5v5.115.810.9015)*/
SELECTobj1_owner,
obj1_name,
obj1_type,
reason
FROMsys.ts_pitr_check
WHERE(ts1_nameIN('BL')ANDts2_nameNOTIN('BL'))
OR(ts1_nameNOTIN('BL')ANDTs2_NameIN('BL'))

如果没有冲突,则不会返回任何行。如果存在冲突,则会看到描述的每个冲突的行。如果有冲突,我们也需要还原关联的表空间。

(3)保存可能丢失的对象或数据
如果我们将Dave表空间恢复之前的某个时间,那么在这个时间以后的任何更改,如新建对象,更新,插入或者删除,都会丢失。丢失这些对象可能没有问题,但假设我们需要保存这些数据,则需要导出将要保存的数据,或者将数据复制到数据库中的其他位置。Oracle提供了视图TS_PITR_OBJECTS_TO_BEDROPPED,该视图列出了将在恢复操作期间丢失的所有对象。使用该视图可以确定表空间中的对象在恢复之后的状态。

SQL>colownerformata10
SQL>colnameformata10
SQL>altersessionsetnls_date_format='yyyy-mm-ddhh24:mi:ss';
SQL>SELECT*FROMts_pitr_objects_to_be_droppedWHEREtablespace_name='BL';

OWNERNAMECREATION_TIMETABLESPACE_NAME
---------------------------------------------------------------------
BLBL2010-07-0719:24:18BL

3.1.2执行实际的TSPITR
OracleDatabase10g将为我们执行自动的TSPITR,这意味着它将创建辅助实例。在这种情况下,我们只需要连接目标数据库和可选的恢复目录(如果有的话),并且执行recovertablespace命令。RMAN将为我们完成剩余的工作。
下面演示使用recovertablespace命令恢复BL表空间的示例。我们使用可选的auxiliarydestination来指示RMAN和Oracle应该在何处创建与辅助数据库关联的文件。使用该参数使得该恢复成为一个具有自动化实例的自定义TSPITR。如果没有使用该参数,TSPITR就称为完全自动的TSPITR 恢复。
需要注意的是,如果使用auxiliarydestination参数,则应该已经创建了目标目录,并且Oracle必须能够写入到该目标目录。在目标路径名中没有后缀的斜杠(/或/),如果包含斜杠将会导致TSPITR失败,并且获得错误消息无法确切地描述该问题。命令如下:

RecovertablespaceBLuntiltime"to_date('2010-7-720:38:18','yyyy-mm-ddhh24:mi:ss')"auxiliarydestination'F:/bl'

在执行这个命令之前有几点注意的地方,因为TSPITR会用已经存在的备份集和归档文件来创建辅助数据库,所以在执行该命令之前需要确认target数据库有备份和归档,并且控制文件也要有备份。

RMAN>RecovertablespaceBLuntiltime"to_date('2010-7-720:40:18','yyyy-mm-ddhh24:mi:ss')"auxiliarydestination'F:/bl';
启动recover于07-7月-10
使用目标数据库控

制文件替代恢复目录
分配的通道:ORA_DISK_1
通道ORA_DISK_1:SID=145设备类型=DISK
RMAN-05026:警告:假定以下表空间集适用于指定的时间点
表空间列表要求具有UNDO段
表空间SYSTEM
表空间UNDOTBS1
使用SID='iEfs'创建自动实例--这里是系统自动创建的辅助数据库名
供自动实例使用的初始化参数:
db_name=BL
db_unique_name=iEfs_tspitr_BL
compatible=11.2.0.0.0
db_block_size=8192
db_files=200
sga_target=280M
processes=50
db_create_file_dest=F:/bl
log_archive_dest_1='location=F:/bl'
#Noauxiliaryparameterfileused
启动自动实例BL
Oracle实例已启动
系统全局区域总计292933632字节
FixedSize1374164字节
VariableSize100665388字节
DatabaseBuffers184549376字节
RedoBuffers6344704字节
自动实例已创建
对恢复集表空间运行TRANSPORT_SET_CHECK
TRANSPORT_SET_CHECK已成功完成
内存脚本的内容:
{
#setrequestedpointintime
setuntiltime"to_date('2010-7-720:40:18','yyyy-mm-ddhh24:mi:ss')";
#restorethecontrolfile
restoreclonecontrolfile;
#mountthecontrolfile
sqlclone'alterdatabasemountclonedatabase';
#archivecurrentonlinelog
sql'altersystemarchivelogcurrent';
#avoidunnecessaryautobackupsforstructuralchangesduringTSPITR
sql'begindbms_backup_restore.AutoBackupFlag(FALSE);end;';
}
正在执行内存脚本
正在执行命令:SETuntilclause
启动restore于07-7月-10
分配的通道:ORA_AUX_DISK_1
通道ORA_AUX_DISK_1:SID=59设备类型=DISK
通道ORA_AUX_DISK_1:正在开始还原数据文件备份集
通道ORA_AUX_DISK_1:正在还原控制文件
通道ORA_AUX_DISK_1:正在读取备份片段D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/B
L/AUTOBACKUP/2010_07_07/O1_MF_S_723759094_638VQR8R_.BKP
通道ORA_AUX_DISK_1:段句柄=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBA
CKUP/2010_07_07/O1_MF_S_723759094_638VQR8R_.BKP标记=TAG20100707T201134
通道ORA_AUX_DISK_1:已还原备份片段1
通道ORA_AUX_DISK_1:还原完成,用时:00:00:02
输出文件名=F:/BL/BL/CONTROLFILE/O1_MF_638Y5Y3J_.CTL
完成restore于07-7月-10
sql语句:alterdatabasemountclonedatabase
sql语句:altersystemarchivelogcurrent
sql语句:begindbms_backup_restore.AutoBackupFlag(FALSE);end;
内存脚本的内容:
{
#setrequestedpointintime
setuntiltime"to_date('2010-7-720:40:18','yyyy-mm-ddhh24:mi:ss')";
#setdestinationsforrecoverysetandauxiliarysetdatafiles
setnewnameforclonedatafile1tonew;
setnewnameforclonedatafile3tonew;
setnewnameforclonedatafile2tonew;
setnewnameforclonetempfile1tonew;
setnewnamefordatafile5to
"D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF";
#switchalltempfiles
switchclonetempfileall;
#restorethetablespacesintherecoverysetandtheauxiliaryset
restoreclonedatafile1,3,2,5;
switchclonedatafileall;
}
正在执行内存脚本
正在执行命令:SETuntilclause
正在执行命令:SETNEWNAME
正在执行命令:SETNEWNAME
正在执行命令:SETNEWNAME
正在执行命令:SETNEWNAME
正在执行命令:SETNEWNAME
临时

文件1在控制文件中已重命名为F:/BL/BL/DATAFILE/O1_MF_TEMP_%U_.TMP

启动restore于07-7月-10
使用通道ORA_AUX_DISK_1
通道ORA_AUX_DISK_1:正在开始还原数据文件备份集
通道ORA_AUX_DISK_1:正在指定从备份集还原的数据文件
通道ORA_AUX_DISK_1:将数据文件00001还原到F:/BL/BL/DATAFILE/O1_MF_SYSTEM_%U_.DBF
通道ORA_AUX_DISK_1:将数据文件00003还原到F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_%U_.DBF
通道ORA_AUX_DISK_1:将数据文件00002还原到F:/BL/BL/DATAFILE/O1_MF_SYSAUX_%U_.DBF
通道ORA_AUX_DISK_1:将数据文件00005还原到D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
通道ORA_AUX_DISK_1:正在读取备份片段F:/BACKUP/BL_02LI7BSK_1_1.BAK
通道ORA_AUX_DISK_1:段句柄=F:/BACKUP/BL_02LI7BSK_1_1.BAK标记=TAG20100707T200956
通道ORA_AUX_DISK_1:已还原备份片段1
通道ORA_AUX_DISK_1:还原完成,用时:00:02:46
完成restore于07-7月-10

数据文件1已转换成数据文件副本
输入数据文件副本RECID=4STAMP=723761776文件名=F:/BL/BL/DATAFILE/O1_MF_SYSTEM_638Y6B6B_.DBF
数据文件3已转换成数据文件副本
输入数据文件副本RECID=5STAMP=723761776文件名=F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_638Y6B8V_.DBF
数据文件2已转换成数据文件副本
输入数据文件副本RECID=6STAMP=723761777文件名=F:/BL/BL/DATAFILE/O1_MF_SYSAUX_638Y6B7Q_.DBF

内存脚本的内容:
{
#setrequestedpointintime
setuntiltime"to_date('2010-7-720:40:18','yyyy-mm-ddhh24:mi:ss')";
#onlinethedatafilesrestoredorswitched
sqlclone"alterdatabasedatafile1online";
sqlclone"alterdatabasedatafile3online";
sqlclone"alterdatabasedatafile2online";
sqlclone"alterdatabasedatafile5online";
#recoverandopenresetlogs
recoverclonedatabasetablespace"BL","SYSTEM","UNDOTBS1","SYSAUX"deletearchivelog;
alterclonedatabaseopenresetlogs;
}
正在执行内存脚本

正在执行命令:SETuntilclause
sql语句:alterdatabasedatafile1online
sql语句:alterdatabasedatafile3online
sql语句:alterdatabasedatafile2online
sql语句:alterdatabasedatafile5online

启动recover于07-7月-10
使用通道ORA_AUX_DISK_1

正在开始介质的恢复
线程1序列7的归档日志已作为文件D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001存在于磁盘上
线程1序列8的归档日志已作为文件D:/ARCHIVELOG/BL_ARC0000000008_0723658881.0001存在于磁盘上
线程1序列9的归档日志已作为文件D:/ARCHIVELOG/BL_ARC0000000009_0723658881.0001存在于磁盘上
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000007_0723658881.0001线程=1序列=7
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000008_0723658881.0001线程=1序列=8
归档日志文件名=D:/ARCHIVELOG/BL_ARC0000000009_0723658881.0001线程=1序列=9
介质恢复完成,用时:00:00:14
完成recover于07-7月-10

数据库已打开
内存脚本的内容:
{
#onlinethetablespacesthatwillbeexported
sqlclone'altertablespaceBLonline';
#makereadonlythetablespacethatwillbeexported
sqlclone'altertablespaceBLreadonl

y';
#createdirectoryfordatapumpimport
sql"createorreplacedirectoryTSPITR_DIROBJ_DPDIRas''
F:/bl''";
#createdirectoryfordatapumpexport
sqlclone"createorreplacedirectoryTSPITR_DIROBJ_DPDIRas''
F:/bl''";
}
正在执行内存脚本
sql语句:altertablespaceBLonline
sql语句:altertablespaceBLreadonly
sql语句:createorreplacedirectoryTSPITR_DIROBJ_DPDIRas''F:/bl''
sql语句:createorreplacedirectoryTSPITR_DIROBJ_DPDIRas''F:/bl''

正在执行元数据导出...
EXPDP>启动"SYS"."TSPITR_EXP_iEfs":
EXPDP>处理对象类型TRANSPORTABLE_EXPORT/PLUGTS_BLK
EXPDP>处理对象类型TRANSPORTABLE_EXPORT/TABLE
EXPDP>处理对象类型TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
EXPDP>已成功加载/卸载了主表"SYS"."TSPITR_EXP_iEfs"
EXPDP>******************************************************************************
EXPDP>SYS.TSPITR_EXP_iEfs的转储文件集为:
EXPDP>F:/BL/TSPITR_IEFS_51961.DMP
EXPDP>******************************************************************************
EXPDP>可传输表空间BL所需的数据文件:
EXPDP>D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
EXPDP>作业"SYS"."TSPITR_EXP_iEfs"已于20:59:10成功完成
导出完毕
内存脚本的内容:
{
#shutdownclonebeforeimport
shutdowncloneimmediate
#droptargettablespacesbeforeimportingthemback
sql'droptablespaceBLincludingcontentskeepdatafiles';
}
正在执行内存脚本
数据库已关闭
数据库已卸装
Oracle实例已关闭
sql语句:droptablespaceBLincludingcontentskeepdatafiles
正在执行元数据导入...
IMPDP>已成功加载/卸载了主表"SYS"."TSPITR_IMP_iEfs"
IMPDP>启动"SYS"."TSPITR_IMP_iEfs":
IMPDP>处理对象类型TRANSPORTABLE_EXPORT/PLUGTS_BLK
IMPDP>处理对象类型TRANSPORTABLE_EXPORT/TABLE
IMPDP>处理对象类型TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
IMPDP>作业"SYS"."TSPITR_IMP_iEfs"已于21:00:49成功完成
导入完毕

内存脚本的内容:
{
#makereadwriteandofflinetheimportedtablespaces
sql'altertablespaceBLreadwrite';
sql'altertablespaceBLoffline';
#enableautobackupsafterTSPITRisfinished
sql'begindbms_backup_restore.AutoBackupFlag(TRUE);end;';
}
正在执行内存脚本

sql语句:altertablespaceBLreadwrite
sql语句:altertablespaceBLoffline
sql语句:begindbms_backup_restore.AutoBackupFlag(TRUE);end;

删除自动实例
自动实例已删除
已删除辅助实例文件F:/BL/BL/DATAFILE/O1_MF_TEMP_638YDTJF_.TMP
已删除辅助实例文件F:/BL/BL/ONLINELOG/O1_MF_3_638YDJ2V_.LOG
已删除辅助实例文件F:/BL/BL/ONLINELOG/O1_MF_2_638YDDND_.LOG
已删除辅助实例文件F:/BL/BL/ONLINELOG/O1_MF_1_638YD9K7_.LOG
已删除辅助实例文件F:/BL/BL/DATAFILE/O1_MF_SYSAUX_638Y6B7Q_.DBF
已删除辅助实例文件F:/BL/BL/DATAFILE/O1_MF_UNDOTBS1_638Y6B8V_.DBF
已删除辅助实例文件F:/BL/BL/DATAFILE/O1_MF_SYSTEM_638Y6B6B_.DBF
已删除辅助实例文件F:/BL/BL/CONTROLFILE/O1_MF_638Y5Y3J_.CTL
完成recover于07-

7月-10
RMAN>

一旦完成了TSPITR,我们就应该能够查看到已经恢复的表空间中的对象,并且发现他们已经被恢复到请求的时间点。我们需要将恢复的表空间改回到联机状态以使用它们。

SQL>selecttablespace_name,online_statusfromdba_data_files;
TABLESPACE_NAMEONLINE_
-------------------------------------
USERSONLINE
UNDOTBS1ONLINE
SYSAUXONLINE
SYSTEMSYSTEM
BLOFFLINE
SQL>AltertablespaceBLonline;
表空间已更改。

如果产生错误,Oracle就会保持辅助实例和相关数据文件的完整性。我们可以尝试修正问题并重新启动恢复操作。在这种情况下,使用auxiliary参数重新启动RMAN,并且连接辅助实例。
如果辅助实例的创建工作没有完全成功,可以很容易的删除辅助实例和它的服务,而不是使用手工的TSPITR过程重新启动恢复操作。首先,指出失败的原因,然后删除实例和服务,并且重新启动自动的TSPITR过程。
删除辅助实例,用sysdba连接sqlplus,然后执行一下命令即可:
SQL>conn/assysdba
已连接。
SQL>execdbms_backup_restore.manageauxinstance('sjus',1);
PL/SQL过程已成功完成。
这里的sjus是辅助实例名,在RMAN的输出中有显示。这使TSPITR恢复之前清除所有旧的辅助实例,可以在执行该命令后进入辅助目标目录,并删除该目录中的任何文件。


3.1.3带有自动化实例的自定义自动TSPITR
在执行TSPITR时可以使用自定义自动化实例创建,并且仍然允许Oracle创建实例的其他的方法:
(1)使用setnewname命令指示恢复集的单个数据文件的位置
(2)使用configureauxname命令定义辅助实例名
(3)为辅助实例创建自己的控制文件,并且在参数文件中提供参数(如:db_file_name_convert)。通过在$ORACLE_HOME/rdbms/admin中创建名为parms_auxint.ora文件来完成这项工作。作为选择,我们可以使用RMAN命令setauxiliaryinstanceparameterfile来指定辅助实例参数文件驻留在客户端上的路劲。

一旦已经自定义了辅助实例,就可以通过执行recovertablespace命令让RMAN创建辅助实例。


3.2手工执行TSPITR
Oracle支持为TSPITR创建自己的辅助实例。也可以使用手工的TSPITR来完成失败的自动TSPITR操作。首先,依然是应用前面的准备阶段中列出的步骤,接着必须准备辅助实例,然后执行TSPITR过程。

3.2.1准备辅助实例
首先,需要启动和运行辅助实例。辅助实例只是RMAN用于执行TSPITR的临时实例。辅助实例必须驻留在与目标数据库相同的机器中,并且在辅助实例上不能执行任何类型的DML。
在启动TSPITR前,需要准备辅助实例。和普通的数据库实例创建一样。
WindowsOracle10G手工创建数据库
https://www.doczj.com/doc/0a15918317.html,/tianlesoftware/archive/2009/10/17/4680230.aspx

linux下手工新建数据库
http://b

https://www.doczj.com/doc/0a15918317.html,/tianlesoftware/archive/2009/10/17/4680213.aspx

我们假设创建的辅助实例名是TEST.操作步骤如下:

(1)创建口令文件
C:>orapwdfile=D:/app/Administrator/product/11.2.0/dbhome_1/database/PWDTEST.orapassword=admin
(2)创建服务
C:/>oradim-new-sidTEST
oradim是创建实例的工具程序名称,-new表明执行新建实例,-delete表明执行删掉实例,-sid指定害例的名称。
(3)创建参数文件
辅助数据库的参数文件不同于目标数据库所使用的参数文件。辅助实例中应该添加的一些参数如下表:
参数名
可选或必选
说明
Db_name
可选
与目标数据库相同的名称
Lock_name_space
必选
不同于创建辅助实例所在系统上其他数据库名的唯一名称。
Db_file_name_convert
可选
用RMAN还原辅助数据库中的数据文件时,该参数用于为这些数据文件定义一组文件命名转换模式。它可以代替RMAN的configureauxname命令。
Log_file_name_convert
可选
用RMAN还原辅助数据库中的重做日志时,该参数用于为这些重做日志定义一组命令转换模式。它可以代替RMAN的setnewnameml.
Control_files
必要
这个参数定义了辅助实例控制文件的名称和位置。辅助实例控制文件的名称应当不同于锁一定位置中已有的其他控制文件名。
Remote_login_passwordfile

可选/必要
用于允许RMAN通过Oraclenetworking服务连接辅助数据库。要求存在一个当前的口令文件。如果要本地连接辅助数据库,就不需要设置该参数。
Compatible
必要
必须与目标数据库的设置相同
Db_block_size
可选/必要
如果在目标数据库上设置了该参数,在辅助数据库中也必须设置为同样的参数值。

我们将所有辅助实例都放到F:/TEST目录下,辅助实例的参数如下:
db_name=BL
db_unique_name=TEST
db_block_size=8192
db_cache_size=8388608
timed_statistics=TRUE
shared_pool_size=110M
large_pool_size=1M

compatible=11.2.0.0.0

Background_dump_dest=F:/TEST
Core_dump_dest=F:/TEST
User_dump_dest=F:/TEST
Control_files=F:/TEST/control01.ctl

db_create_file_dest=F:/TEST
log_file_name_convert=('D:/app/Administrator/oradata/bl','F:/TEST');

将该参数保存为initTEST.ora,存放在F:/TEST/下。
(4)启动辅助实例,并检查网络连通性
C:/Users/Administrator.DavidDai>setORACLE_SID=TEST
C:/Users/Administrator.DavidDai>sqlplus/nolog
SQL*Plus:Release11.2.0.1.0Productionon星期四7月815:52:172010
Copyright(c)1982,2010,Oracle.Allrightsreserved.
SQL>conn/assysdba
已连接到空闲例程。
SQL>startupnomountpfile='f:/test/inittest.ora';
ORA-32006:BACKGROUND_DUMP_DESTinitializationparameterhasbeendeprecated
ORA-32006:USER_DUMP_DESTinitializationparameterhasbeendeprecated
ORACLE例程已经启动。
TotalSystemGlobalArea163221504bytes
FixedSize1373236bytes
VariableSize146803660bytes
DatabaseBuffers83886

08bytes
RedoBuffers6656000bytes
SQL>

(5)执行带有手工辅助实例的TSPITR
用RMAN连接目标数据库,辅助实例,和恢复目录(如果有)。

还原控制文件,打开辅助实例。
C:/Users/Administrator.DavidDai>setORACLE_SID=TEST
C:/Users/Administrator.DavidDai>rmantargetsys/admin@blauxiliary=/
恢复管理器:Release11.2.0.1.0-Productionon星期四7月816:05:562010

Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.
连接到目标数据库:BL(DBID=680066685)
已连接到辅助数据库:BL(未装载)
RMAN>run
2>{
3>setuntiltime"to_date('2010-7-816:23:18','yyyy-mm-ddhh24:mi:ss')";
4>restoreclonecontrolfile;
5>sqlclone'alterdatabasemountclonedatabase';
6>sql'altersystemarchivelogcurrent';
7>}
正在执行命令:SETuntilclause
启动restore于08-7月-10
使用通道ORA_AUX_DISK_1

通道ORA_AUX_DISK_1:正在开始还原数据文件备份集
通道ORA_AUX_DISK_1:正在还原控制文件
通道ORA_AUX_DISK_1:正在读取备份片段D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/B
L/AUTOBACKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP
通道ORA_AUX_DISK_1:段句柄=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBA
CKUP/2010_07_08/O1_MF_S_723831710_63C2O0HN_.BKP标记=TAG20100708T162150
通道ORA_AUX_DISK_1:已还原备份片段1
通道ORA_AUX_DISK_1:还原完成,用时:00:00:02
输出文件名=F:/TEST/CONTROL01.CTL
完成restore于08-7月-10

sql语句:alterdatabasemountclonedatabase
sql语句:altersystemarchivelogcurrent
RMAN>

说明:1.altersystemarchivelogcurrent,它确保用于副本数据库恢复的所有重做都可用。
2.Sqlcolne命令是在副本数据库上执行sql命令

确定并还原数据文件
我们需要还原system,sysaux,undo,temp表空间,和我们将要还原的表空间,这里是BL表空间。要注意的是,在我们开始创建辅助实例之前,要将待恢复的表空间设置为offline.

SQL>selectfile_id,tablespace_namefromdba_data_files;
FILE_IDTABLESPACE_NAME
----------------------------------------
4USERS
3UNDOTBS1
2SYSAUX
1SYSTEM
5BL
SQL>altertablespaceBLofflineforrecover;
表空间已更改。

RMAN>run
2>{
3>#setrequestedpointintime
4>setuntiltime"to_date('2010-7-816:23:18','yyyy-mm-ddhh24:mi:ss')";
5>#setdestinationsforrecoverysetandauxiliarysetdatafiles
6>setnewnameforclonedatafile1tonew;
7>setnewnameforclonedatafile3tonew;
8>setnewnameforclonedatafile2tonew;
9>setnewnameforclonetempfile1tonew;
10>setnewnamefordatafile5to"D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF";
11>#switchalltempfiles
12>switchclonetempfileall;
13>#restorethetablespacesintherecoverysetandtheauxiliaryset
14>restoreclonedatafile1,3,2,5;
15>switchclonedatafileall;
16>}

说明:setnewnameforclone命令确保还原期间正确的命令这些文件。对数据文件5进行setnewname是为还原该数据文件做准备。

打开辅

助实例,准备执行TSPITR:
run
{
#setrequestedpointintime
setuntiltime"to_date('2010-7-816:23:18','yyyy-mm-ddhh24:mi:ss')";
#onlinethedatafilesrestoredorswitched
sqlclone"alterdatabasedatafile1online";
sqlclone"alterdatabasedatafile3online";
sqlclone"alterdatabasedatafile2online";
sqlclone"alterdatabasedatafile5online";
#recoverandopenresetlogs
recoverclonedatabasetablespace"BL","SYSTEM","UNDOTBS1","SYSAUX"deletearchivelog;
alterclonedatabaseopenresetlogs;
}

导出元数据,在导入数据
Expuser/pwdpoint_in_time_recover=ytablespaces=BLfile=tspitr.dmp
Impuser/pwdpoint_in_time_recover=yfile=tspitr.dmp

最后将BL表空间online
AltertablespaceBLonline.

操作完成后,别忘了重新备份数据库,及删除辅助实例。
从上面的步骤来看,手工操作和自动步骤是一样的,只不过手工将这些步骤分开了。


3.3TSPITR的限制
TSPITR有许多的限制:
(1)不能还原包含SYS用户特有对象的表空间
(2)不能用TSPITR恢复含有复制主表的表空间
(3)不支持使用快照日志的表空间
(4)不能还原含有回滚段的表空间
(5)如果要恢复的表空间中的对象包含如下对象,则不支持:
Varray
嵌套表
外部文件
此外,TSPITR不能用于恢复删除的表空间,我们也不能恢复旧的对象统计表。

如果使用不含恢复目录的RMAN,还会存在下面与TSPITR的限制:
(1)在要恢复的点和当前的点之间,目标数据库中撤销和回滚段的当前物理结构必须没有变化。回滚段在恢复期间不能发生变化。
(2)完成指定表空间的TSPITR后,这个表空间以前的所有备份就不能在用于以后的TSPITR。这就是TSPITR后的表空间备份操作非常重要的原因,只有再次备份表空间后才能执行下一个TSPITR.






四.验证备份可恢复
如果备份不可恢复,那么它就没有用处。RMAN提供了一种不需要还原数据库就能检查数据库还原能力的方法,并且为用户提供了几个检查选项。

4.1restorepreview命令
该命令可以查看RMAN使用哪个备份集来执行特定的恢复。该命令将列出还原所需的备份集的详细信息。
RMAN>restoredatabasepreview;
启动restore于08-7月-10
使用通道ORA_DISK_1
备份集列表
===================
BS关键字类型LV大小设备类型经过时间完成时间
--------------------------------------------------------
7Full987.05MDISK00:01:4008-7月-10
BP关键字:7状态:AVAILABLE已压缩:NO标记:TAG20100708T161959
段名:F:/BACKUP/BL_07LI9IPG_1_1.BAK
备份集7中的数据文件列表
文件LV类型CkpSCNCkp时间名称
----------------------------------
1Full104181908-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF
2Full104181908-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF
3Full104181908-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF
4Full104181908-7月-10D:/APP/ADMINISTR

ATOR/ORADATA/BL/USERS01.DBF
5Full104181908-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF

db_unique_name为BL的数据库的归档日志副本列表
=====================================================================
关键字线程序列S时间下限
-----------------------------
8112A08-7月-10
名称:D:/ARCHIVELOG/BL_ARC0000000012_0723658881.0001
9113A08-7月-10
名称:D:/ARCHIVELOG/BL_ARC0000000013_0723658881.0001
介质恢复启动SCN是1041819
恢复范围必须超出SCN1041819才能清除数据文件模糊性
完成restore于08-7月-10

4.2用verify和checklogical参数的restore命令
Restore命令提供一些验证数据库可恢复和备份有效的选项。首先,可以使用backup命令的validate参数使RMAN检查备份,以确定数据库是可恢复的。使用validate选项时,Oracle会检查用于恢复数据库的最新备份集以确定这个备份集是完整的,还会检查操作需要使用的所有数据文件副本和归档的重做日志备份集,并确定他们也是完整的。此外,validate选项会对备份集执行全面的验证操作,以确保这些备份的完整性。验证操作的时间不会太长,并且这是确保数据库可恢复的一种方法。
RMAN>restoredatabasevalidate;
启动restore于08-7月-10
使用通道ORA_DISK_1
通道ORA_DISK_1:正在开始验证数据文件备份集
通道ORA_DISK_1:正在读取备份片段F:/BACKUP/BL_07LI9IPG_1_1.BAK
通道ORA_DISK_1:段句柄=F:/BACKUP/BL_07LI9IPG_1_1.BAK标记=TAG20100708T161959
通道ORA_DISK_1:已还原备份片段1
通道ORA_DISK_1:验证完成,用时:00:00:26
完成restore于08-7月-10

此外,使用restore命令的checklogical参数能够更完全地检查最新备份集。这个命令使RMAN检查数据库的备份,如果这些备份通过物理讹误检查,还要检查备份的数据和索引段中是否存在逻辑讹误。如果发现逻辑讹误,Oracle会采用下面的一种方法来响应错误:
(1)如果设置了maxcorrupt参数,并且还原检查逻辑操作期间的讹误数没有超过这个参数值,RMAN就会在Oracle的v$database_block_corruption视图中填充讹误的数据块列表。
(2)如果还原检查逻辑操作期间的讹误数超过了maxcorrupt参数值,操作就会终止。

在默认情况下,maxcorrupt参数被设置为0,因此任何逻辑讹误都会导致检查操作的失败。通过set命令可以修改默认的maxcorrupt参数值,但只能在run代码块的范围内使用这条命令。此外,maxcorrupt参数是为每个数据文件单独设置的,而不是为所有的数据文件设置。

RMAN>run
2>{
3>setmaxcorruptfordatafile1,2,3to10;--将1,2,3datafile的maxcorrupt设为10
4>restoredatabasechecklogicalvalidate;
5>}

正在执行命令:SETMAXCORRUPT

启动restore于08-7月-10
使用通道ORA_DISK_1

通道ORA_DISK_1:正在开始验证数据文件备份集
通道ORA_DISK_1:正在读取备

份片段F:/BACKUP/BL_07LI9IPG_1_1.BAK
通道ORA_DISK_1:段句柄=F:/BACKUP/BL_07LI9IPG_1_1.BAK标记=TAG20100708T161959
通道ORA_DISK_1:已还原备份片段1
通道ORA_DISK_1:验证完成,用时:00:00:27
完成restore于08-7月-10


4.3使用validatebackupset命令
使用具有validate参数或者checklogical参数的restore命令只能检查最新的备份集,如果我们要检查任意的备份集,就需要使用validatebackupset命令。使用这条命令前,必须首先确定要检查的备份集键(backupsetkey)。每个备份集在生成时都会被指派一个称为备份集键的唯一标识符。

RMAN>listbackupset;
备份集列表
===================
BS关键字大小设备类型占用时间完成时间
--------------------------------------------------
152.15MDISK00:00:0407-7月-10
BP关键字:1状态:AVAILABLE已压缩:NO标记:TAG20100707T200948
段名:F:/BACKUP/BL_01LI7BSC_1_1.BAK

备份集1中的已存档日志列表
线程序列低SCN时间下限下一个SCN下一次
--------------------------------------------------
1598634006-7月-10100659007-7月-10
16100659007-7月-10100850107-7月-10

BS关键字类型LV大小设备类型经过时间完成时间
--------------------------------------------------------
2Full974.46MDISK00:01:3307-7月-10
BP关键字:2状态:AVAILABLE已压缩:NO标记:TAG20100707T200956
段名:F:/BACKUP/BL_02LI7BSK_1_1.BAK
备份集2中的数据文件列表
文件LV类型CkpSCNCkp时间名称
----------------------------------
1Full100851007-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/SYSTEM01.DBF
2Full100851007-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/SYSAUX01.DBF
3Full100851007-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/UNDOTBS01.DBF
4Full100851007-7月-10D:/APP/ADMINISTRATOR/ORADATA/BL/USERS01.DBF
5Full100851007-7月-10

根据上面查出来的backupsetkey,来验证:
RMAN>validatebackupset1;
启动validate于08-7月-10
使用通道ORA_DISK_1
通道ORA_DISK_1:正在开始验证归档日志备份集
通道ORA_DISK_1:正在读取备份片段F:/BACKUP/BL_01LI7BSC_1_1.BAK
通道ORA_DISK_1:段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK标记=TAG20100707T200948
通道ORA_DISK_1:已还原备份片段1
通道ORA_DISK_1:验证完成,用时:00:00:05
完成validate于08-7月-10

RMAN>validatebackupset1checklogical;
启动validate于08-7月-10
使用通道ORA_DISK_1
通道ORA_DISK_1:正在开始验证归档日志备份集
通道ORA_DISK_1:正在读取备份片段F:/BACKUP/BL_01LI7BSC_1_1.BAK
通道ORA_DISK_1:段句柄=F:/BACKUP/BL_01LI7BSC_1_1.BAK标记=TAG20100707T200948
通道ORA_DISK_1:已还原备份片段1
通道ORA_DISK_1:验证完成,用时:00:00:03
完成validate于08-7月-10




五.跨平台的数据库移动和RMAN
Oracle10gR2支持手工跨平台移动数据库,即使这些平台具有不同的尾数格式(endianformat)。尾数格式与字节排序有关,它有两种不同的格式,即大尾数和小尾数。如果在不同

尾数字节格式的平台之间移动数据库,就需要手工操作,并且使用RMAN的convertdatafile或者converttablespace命令来将传送的数据文件转换为正确的尾数格式。

5.1可跨平台传送的表空间
Oracle支持几乎(不是所有)Oracle数据库家族的所有平台之间的表空间移动。该功能具有如下的一些优点:
(1)在不同的内容提供者之间有效地发布数据
(2)在不同数据仓库,数据集和OLTP系统之间轻松地转移数据。
(3)轻松地跨平台迁移数据库

为了能够在平台之间移动表空间,必须将compatible设置为10.0.0或更高的值。设置该参数后,在下一次启动操作时,表空间数据文件将被设置为支持跨平台操作。注意的是:只有在设置为可读写或联机时,只读文件和脱机数据文件才可支持跨平台操作。

5.2字节排序和数据文件转换

5.2.1数据文件排序
Oracle平台一般使用两种不同的字节排序方法(称为:尾数格式)。如果多个平台使用相同的字节排序方案,则可以采用以前的常用方法传送表空间,而不会产生任何问题。
如果字节排序方案不同,则需要在RMAN中使用convert命令来将表空间转换为目标平台上所需的格式。可以通过连接动态视图v$database和新的v$transportable_platform视图来确定尾数格式:
SQL>selectendian_formatfromv$transportable_platformtp,v$databasedwheretp.platform_name=d.platform_name;
ENDIAN_FORMAT
--------------
Little

该示例中,当前系统使用的是小尾数格式。因此,如果在两个系统上的查询返回相同的结果,则表示有兼容的数据文件格式;如果返回不同的结果,则需要使用RMAN和compatible参数来传送表空间。

5.2.2使用RMAN转换表空间尾数格式
如果需要转换另一个平台的表空间,则可以使用RMAN。

(1)转换表空间:
先将表空间转换为只读模式:
SQL>altertablespaceBLreadonly;
表空间已更改。
RMAN>converttablespaceBLtoplatform='AIX-BasedSystems(64-bit)'
db_file_name_convert='D:/APP/ADMINISTRATOR/ORADATA/BL','F:/bl';

启动conversionatsource于08-7月-10
使用通道ORA_DISK_1
通道ORA_DISK_1:启动数据文件转换
输入数据文件:文件号=00005名称=D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
已转换的数据文件=F:/BL/BL01.DBF
通道ORA_DISK_1:数据文件转换完毕,经过时间:00:00:07
完成conversionatsource于08-7月-10

启动ControlFileandSPFILEAutobackup于08-7月-10
段handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBACKUP/2010_07_08/O1_M
F_S_723857700_63CW16C1_.BKPcomment=NONE
完成ControlFileandSPFILEAutobackup于08-7月-10

说明,在这个实验中,我们发现它备份了控制文件和spfile文件,这也说明了以前的一个观点,当数据文件发生变化时,在开启自动备份的前提下,会自动备份这2个文件。


(2)转换数据文件
RMAN>convertdatafile'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF'fromplatform
'AIX-BasedSystems(64-bit)'db_file_name_convert'D:/APP/ADMINISTRATOR/ORADATA/
BL','F:/bl';

有关CONVERTDATAFILEorTABLESPACE,参考联机文档
http://www.di.unipi.it/~ghelli/didattica/bdldoc/B19306_01/backup.102/b14191/dbxptrn001.htm

使用平台名来自v$transportable_platform视图的platform_name列。Oracle对于放入正确的名称有严格的要求。
一旦完成了转换,就可以用下面的方式完成移动,使用可传送表空间手工移动数据文件或表空间。注意的是,如果尾数格式不同,RMAN就不能完成操作。尾数相同的可以按下面方法操作。
SQL>select*fromv$transportable_platform;
PLATFORM_IDPLATFORM_NAME
---------------------------------------------------
1Solaris[tm]OE(32-bit)
2Solaris[tm]OE(64-bit)
7MicrosoftWindowsIA(32-bit)
10LinuxIA(32-bit)
6AIX-BasedSystems(64-bit)
3HP-UX(64-bit)


5.3跨平台移动数据库
Oracle10g提供了全新的功能处理在尾数格式相同的平台之间移动数据库。Convertdatabase命令结合DBMS_TDP程序包可以减少在平台之间移动数据库的整体工作量。该过程包括如下步骤:

5.3.1以只读方式打开数据库
Startmount;
Alterdatabaseopenreadonly;

5.3.2使用dbms_tdp.check_db过程来检查数据库状态。
Setserveroutputon
Declare
Db_readyboolean;
Begin
Db_ready:=dbms_tdb.check_db
('MicrosoftWindowsIA(32-bit)',dbms_tdb.skip_readonly);
End;
/

5.3.3使用dbms_tdb.check_external过程来标识外部对象:
Setserveroutputon
Declare
Externalboolean;
Begin
External:=dbms_tdb.check_external;
End;
/

5.3.4当数据库主备好传送时,就可以使用RMAN的convertdatabase命令。RMAN创建数据库移动所需要的脚本,但不实际执行移动,而是创建移动所需要的文件。
Convertdatabasenewdatabase'copy'transportscripts'c:/oracle/copyscripts'toplatform'MicrosoftWindowsIA(32-bit)';

一旦完成该命令,只需遵循RMAN提供的指令就可以在目标数据库上完成转换。



相关主题
相关文档 最新文档