`
wsql
  • 浏览: 11714677 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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操作恢复数据库。因此,可以很容易的在执行操作后立刻备份数据库,然而,我们仍然认为在任何不完全恢复后备份数据库是很有必要的。

OracleRmanresetlogs版本恢复

http://blog.csdn.net/xujinyang/article/details/6830337

1.2建立恢复点

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

1.2.1run代码块中使用set命令与untiltimeuntilSCNuntilsequence参数

Run

{

Setuntiltime"to_date('2010-07-0514:02:00','yyyy-mm-ddhh24:mi:ss')";

Restoredatabase;

Recoverdatabasealterdatabaseopenresetlogs;

}

执行这条命令时,RMAN会查找与恢复目标时间最近(并非恢复目标时间本身也不能是位于恢复目标之间的时间)的备份集,并且从这个备份集中还原数据库。如果数据库置于noarchivelog模式中,恢复操作会在备份集的时间停止;否则在执行recover命令期间,oracle会在所定义的恢复目标(不包含恢复目标本身)上应用归档的重做日志(以及需要应用的任何增量备份)。

注意:如果尝试恢复到特定备份的完成点,则必须恢复到备份集中文件的CKPSCNCKPTIME,在不同备份集的RMANlist命令中会列出这些内容。有时使用备份的CKPTIME并不够,还可能导致ORA-1152错误。

1.2.2restorerecover命令中直接使用untiltimeuntilSCNuntilsequence参数

这种方法避免使用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-03002RMAN-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;

注意,执行recovertablespacerecoverdatafile命令时,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恢复讹误的数据块

即使与讹误数据块关联的数据文件一直联机,也可以通过用块介质恢复(blockMediarecoverBMR)执行块级别恢复操作来修复Oracle数据库中的这些逻辑上或者物理上的讹误数据块。

一般出现数据块错误时,都会有错误消息:

ORA-01578:ORACLEdatablockcorrupted(file#18,block#88)

如果没有BMR时,我们必须从一个备份中恢复这个数据文件,在恢复过程中,用户不能使用该数据块文件中的所有数据。

BMR恢复就很简单,只需要执行blockrecover命令即可:

Blockrecoverdatafile18block88;

如果有必要,可以同时恢复多个数据文件的多个数据块。如:

Blockrecoverdatafile18block16,17,88,108;

Blcokrecoverdatafile18block88datafile19blcok188;

Oracle会跟踪在备份和恢复期间发生的数据块讹误。如果检测到备份或复制操作出现讹误,由于Oracle不允许在备份中出现讹误,所有这个备份就会失败。当然,可以配置RMAN允许一定数量的讹误,但是不推荐这种用法。

可以使用backupvalidatedatabase命令查看RMAN检测到的所有数据库讹误。这条命令会在v$backup_corruptionv$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天的所有讹误数据块。在上面的命令中,还可以使用untiltimeuntilsequence.

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星期二7610:31:402010

Copyright(c)1982,2009,Oracleand/oritsaffiliates.Allrightsreserved.

连接到目标数据库:ORCL(DBID=1247395743)

连接到恢复目录数据库

RMAN>listincarnation;

数据库原型列表

DB关键字Inc关键字DBDBIDSTATUS重置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关键字DBDBIDSTATUS重置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')";

启动restore06-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

完成restore06-7-10

RMAN>recoverdatabaseuntiltime"to_date('2010-7-523:50:39','yyyy-mm-ddhh24:mi:ss')";

启动recover06-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

完成recover06-7-10

RMAN>alterdatabaseopenresetlogs;

数据库已打开

RMAN>listincarnation;

数据库原型列表

DB关键字Inc关键字DBDBIDSTATUS重置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

OracleRmanresetlogs版本恢复

http://blog.csdn.net/xujinyang/article/details/6830337

三.表空间时间点恢复

表空间时间点恢复,TSPITR:tablespacepoint-in-timerecovery.Oracle官网文档的连接地址:

RMANTablespacePoint-in-TimeRecovery(TSPITR)

http://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/rcmtspit.htm

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

OracleFlashback技术总结

http://blog.csdn.net/xujinyang/article/details/6830438

先看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.1TSPITR做准备

在开始执行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';

启动recover07-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

启动restore07-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

完成restore07-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

启动restore07-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

完成restore07-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

启动recover07-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

完成recover07-7-10

数据库已打开

内存脚本的内容:

{

#onlinethetablespacesthatwillbeexported

sqlclone'altertablespaceBLonline';

#makereadonlythetablespacethatwillbeexported

sqlclone'altertablespaceBLreadonly';

#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

完成recover07-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手工创建数据库

http://blog.csdn.net/xujinyang/article/details/6830392

linux下手工新建数据库

http://blog.csdn.net/xujinyang/article/details/6830423

我们假设创建的辅助实例名是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还原辅助数据库中的数据文件时,该参数用于为这些数据文件定义一组文件命名转换模式。它可以代替RMANconfigureauxname命令。

Log_file_name_convert

可选

RMAN还原辅助数据库中的重做日志时,该参数用于为这些重做日志定义一组命令转换模式。它可以代替RMANsetnewnameml.

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星期四7815: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

DatabaseBuffers8388608bytes

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星期四7816: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

启动restore08-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

完成restore08-7-10

sql语句:alterdatabasemountclonedatabase

sql语句:altersystemarchivelogcurrent

RMAN>

说明:1.altersystemarchivelogcurrent,它确保用于副本数据库恢复的所有重做都可用。

2.Sqlcolne命令是在副本数据库上执行sql命令

确定并还原数据文件

我们需要还原systemsysaux,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;

启动restore08-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/ADMINISTRATOR/ORADATA/BL/USERS01.DBF

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

db_unique_nameBL的数据库的归档日志副本列表

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

关键字线程序列S时间下限

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

8112A08-7-10

名称:D:/ARCHIVELOG/BL_ARC0000000012_0723658881.0001

9113A08-7-10

名称:D:/ARCHIVELOG/BL_ARC0000000013_0723658881.0001

介质恢复启动SCN1041819

恢复范围必须超出SCN1041819才能清除数据文件模糊性

完成restore08-7-10

4.2verifychecklogical参数的restore命令

Restore命令提供一些验证数据库可恢复和备份有效的选项。首先,可以使用backup命令的validate参数使RMAN检查备份,以确定数据库是可恢复的。使用validate选项时,Oracle会检查用于恢复数据库的最新备份集以确定这个备份集是完整的,还会检查操作需要使用的所有数据文件副本和归档的重做日志备份集,并确定他们也是完整的。此外,validate选项会对备份集执行全面的验证操作,以确保这些备份的完整性。验证操作的时间不会太长,并且这是确保数据库可恢复的一种方法。

RMAN>restoredatabasevalidate;

启动restore08-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

完成restore08-7-10

此外,使用restore命令的checklogical参数能够更完全地检查最新备份集。这个命令使RMAN检查数据库的备份,如果这些备份通过物理讹误检查,还要检查备份的数据和索引段中是否存在逻辑讹误。如果发现逻辑讹误,Oracle会采用下面的一种方法来响应错误:

(1)如果设置了maxcorrupt参数,并且还原检查逻辑操作期间的讹误数没有超过这个参数值,RMAN就会在Oraclev$database_block_corruption视图中填充讹误的数据块列表。

(2)如果还原检查逻辑操作期间的讹误数超过了maxcorrupt参数值,操作就会终止。

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

RMAN>run

2>{

3>setmaxcorruptfordatafile1,2,3to10;--123datafilemaxcorrupt设为10

4>restoredatabasechecklogicalvalidate;

5>}

正在执行命令:SETMAXCORRUPT

启动restore08-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

完成restore08-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;

启动validate08-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

完成validate08-7-10

RMAN>validatebackupset1checklogical;

启动validate08-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

完成validate08-7-10

五.跨平台的数据库移动和RMAN

Oracle10gR2支持手工跨平台移动数据库,即使这些平台具有不同的尾数格式(endianformat。尾数格式与字节排序有关,它有两种不同的格式,即大尾数小尾数。如果在不同尾数字节格式的平台之间移动数据库,就需要手工操作,并且使用RMANconvertdatafile或者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

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

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';

启动conversionatsource08-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

完成conversionatsource08-7-10

启动ControlFileandSPFILEAutobackup08-7-10

handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBACKUP/2010_07_08/O1_M

F_S_723857700_63CW16C1_.BKPcomment=NONE

完成ControlFileandSPFILEAutobackup08-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当数据库主备好传送时,就可以使用RMANconvertdatabase命令。RMAN创建数据库移动所需要的脚本,但不实际执行移动,而是创建移动所需要的文件。

Convertdatabasenewdatabase'copy'transportscripts'c:/oracle/copyscripts'toplatform'MicrosoftWindowsIA(32-bit)';

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

整理自《Oracle10gRMAN备份与恢复》

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

分享到:
评论

相关推荐

    Oracle 9i 培训资料:使用RMAN的高级备份和恢复

    Oracle 9i 培训资料:使用RMAN的高级备份和恢复 Oracle 9i 培训资料:使用RMAN的高级备份和恢复

    Oracle 10g 备份与恢复 2/3

    对于数据库管理的入门人员来说,可以循环渐进地学习并掌握用户管理的备份与恢复方法、RMAN管理的备份与恢复方法以及逻辑备份与恢复方法。对于有经验的数据库管理员来说,如果您已经非常熟悉基本的备份与恢复方法,...

    Oracle DataGuard备份恢复最佳实践

    提到DataGuard环境下的备份恢复,大家都知道可以在备库上备份,然后恢复到主库,但您知道在生产中实施会遇到多少坑吗?实际生产中我们看到了太多在主库上进行备份,而让备库闲着的现象。本次课程将带您深入了解...

    经典教程-精通Oracle 10g备份与恢复.pdf

    经典教程-精通Oracle 10g备份与恢复

    Oracle 10g 备份与恢复 1/3

    对于数据库管理的入门人员来说,可以循环渐进地学习并掌握用户管理的备份与恢复方法、RMAN管理的备份与恢复方法以及逻辑备份与恢复方法。对于有经验的数据库管理员来说,如果您已经非常熟悉基本的备份与恢复方法,...

    Oracle 10g 备份与恢复 3/3

    对于数据库管理的入门人员来说,可以循环渐进地学习并掌握用户管理的备份与恢复方法、RMAN管理的备份与恢复方法以及逻辑备份与恢复方法。对于有经验的数据库管理员来说,如果您已经非常熟悉基本的备份与恢复方法,...

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    oracle 12c 数据库 教程

    (一)客户端组件和服务器端组件 2 (二)Oracle Database 的体系架构 2 1. 什么是数据库?...八、RMAN 的高级设置 27 (一)RMAN 的参数设置 27 (二)什么是目录数据库? 28 (三)创建目录数据库 29

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第1/2部分)

     ●oracle恢复管理器和oracle闪回技术  ●资源管理器  ●oracle自动存储管理  ●oracle调度程序  ●自动工作负荷知识库  ●性能调整 作译者  John Watson就职于BPLC Management Consultants,负责公司欧洲...

    Oracle视频.zip

    网盘文件永久链接 目录 1.Oracle在linux下单机安装rar 2Linux6,5安装0rade-11g-RAC(1rar 3Linux6.5安装0race-1g-RAC(2)rar 4.linux6.5安装Dracle11gRAC(3】rar ...230rade-rman备份恢复rar 24.Oracle OGG简介.rar

    Oracle数据库实验操作

    实验128:rman的数据库不完全恢复 214 实验129:rman的数据库副本管理 214 实验130:rman的备份管理 214 第六部分数据库的优化 216 采集数据 216 实验131:优化工具utlbstat/utlestat的使用 216 实验132:优化工具...

    Oracle Database 11g初学者指南--详细书签版

    在过去的14年中,他与IanAbramson和MichaelCorey为OraclePress合著了一系列图书.Abbey在国际Oracle用户团体非常活跃,经常出席COLLABORATE、OraclecOpenWorld和区域性用户组会议.  Michael J.Corey是Ntirety...

    Oracle入门教程.三思笔记.一步一步学Oracle

    [三思笔记]RMAN高级应用之Duplicate复制数据库.pdf [三思笔记]RMAN管理ORACLE_RAC数据库的备份与恢复.pdf [三思笔记]statspack初步学和用.pdf [三思笔记]动态性能视图.pdf [三思笔记]全面学习MySQL+Proxy特性.pdf ...

    轻松学Oracle数据库

    表,SQL语言基础,子查询与高级查询,PL/SQL基础,存储过程、触发器与程序包,其他模式对象,用户权限与安全,数据的加载与传输以及使用RMAN工具备份与恢复等,最后还介绍了一个综合案例——手机话费消费系统。

    oracle10g经典中文教程(2012新年大礼包)

    oracle10g OCP 培训中文课件,包含sql,管理1,...rman备份,从零开始学备份;闪回教程,快捷而强大的闪回;还附带其他oracle培训教程,适合初学者,中高级开发人员,DBA阅读,也是oracle相关工作人员较好的随身手册;

    BackupAndRestoreOfOracleDataGuardWhitePaper.pdf

    Oracle DataGuard 备份恢复白皮书,作者鼎甲科技高级技术顾问姚远。提到DataGuard环境下的备份恢复,大家都知道可以在备库上备份,然后恢复到主库,但您知道在生产中实施会遇到多少坑吗?实际生产中我们看到了太多在...

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 ...

Global site tag (gtag.js) - Google Analytics