Oracle数据库备份与恢复之RMAN

4.7 高级主题

    4.7.1  使用RMAN备份集恢复DB到其他机器  1常规方法)

    用途:利用生产 DB的备份集建立测试环境或备用数据库(  设置成相同的 DBID,不需要连接原始 DB,只需要利用 Catalog

    步骤:

    1.准备工作,配置目标DB环境

    在目标 DB上设置 ORACLE相关的环境变量:记下生产 DB ORACLE_SIDDBID $set ORACLE_SID=ming      在目标 DB创建与生产 DB相同的目录,将生产 DB  pfile 文件 FTP到目标DB,或者,在第二步中可以从备份集中进行恢复得到 PFILE.      在目标  DB  上创建生产  DB    RMAN  备份集存放的目录,没有使用  catalog情况时这点必然保持一样?      移植备份集(确定包含控制文件,数据文件,归档文件)到目标  DB      配置网络连接

    2.目标DBnomount状态下恢复pfile controlfile

    连接恢复目录和目标数据库:$ RMAN target / catalog rman/rman@rcdb RMAN > set DBID= 3324789823 RMAN > startup nomount RMAN> restore spfile to pfile ‘/home/oracle/pfile’ [from ‘backupset name’] RMAN> restore controlfile [to    'xx '] from '/xx/ ORADB_ctl_20070111_c-xx';(控制文件的恢复可以参考 4.4.4.6  中其他方法)

    3.启动目标DB    mount,在目标DBRestore Recover

    RMAN> alter database mount ——可能会提示找不到密码文件,不用理会 如果备份集的位置改变了,需要先进行交叉校验:RMAN> catalog start with '/newdir' RMAN> crosscheck backup RMAN> report schema;然后 restore / recover  RMAN> run { allocate channel ch_disk_db_1 device type diskrestore databaserecover database until sequence=2412 thread=1——最后一个 arachivelog sequence release channel ch_disk_db_1

    }

    4.Resetlogs  打开目标  DB

    联机日志文件并没有恢复,所以需要  resetlogs SQL> alter database open resetlogs

    5.重建临时表空间,重建密码文件,立即备份数据库

    重建临时表空间:因为备份时不备份临时文件,v$tempfile 中查询为空,所以可以增加一个文件即可:SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size 10M;重建密码文件可以通过 orapwd命令重建密码文件

    备注:恢复时有时遇到的一个问题RMAN-03002    ORA-27064 错误解决办法:  把数据文件 resize oracle block size 的整数倍SQL> alter database datafile 'xxx' resize n MB

    4.7.2  使用RMAN备份集恢复DB到其他机器  2复制方法)

    使用  RMAN  DUPLICATE  命令可 以在保 留目 标数 据库 的基础上 依靠目标 数据库(Target  Database)的备份创建一个副本数据库(Duplicate  Database  .该副本即可与目标数 据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(Target  Site)以及副 本站点(Duplicate Site)甚至可以在同一台机器上。

      生成新的唯一的 DBID,如果控制文件中仍保存有备份信息,可以不连接 Catalog 

    步骤:

    1.准备工作,配置副本DB环境

    1.  备份主数据库(包括数据文件、控制文件以及所有归档),并把该备份集拷贝到副本 数据库机器同样的目录下。

    2.  拷贝主数据库的初始化参数文件 pfile 到副本数据库机器上,并根据需要作相应修改,创建密码文件。

    3.  配置主数据库到副本数据库的连接。

    2.启动副本数据库到  nomount下,目录数据库必须MOUNT (或OPEN

    $ sqlplus /nolog SQL> conn / as sysdba SQL> startup nomount

    3.运行RMAN,分别连接主数据库与副本数据库实例

    控制文件中保存有备份信息,可以不连接 Catalog

    在副本数据库上:$ rman target sys/change_on_install@MING auxiliary /

    4.运行复制命令

    如果没有配置自动分配通道的话,需要手工指定至少  1  条辅助通道。

    DUPLICATE命令将自动完成:将还原所有数据文件,重新创建控制文件,并利 用新的参数文件启动恢复数据库到一致状态,最后用  resetlog  方式打开数据库,并 重建  redolog

    RMAN> RUN { ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISKduplicate target database tocrmnofilenamecheck RELEASE CHANNEL aux1}

    5.重建临时表空间,立即备份数据库

    SQL>  alter  tablespace  temp  add  tempfile  '/u05/oracle/oradata/crm/temp01.dbf'  size 10M

    附:Duplicate 复制命令的一些高级用法:

    1.NOFILENAMECHECK异机恢复需要指定  NOFILENAMECHECK,可以跳过文件名检测,避免  oracle  错 误的领会你的操作意图。

    2.指定PFILE如果辅助实例不是用 SPFILE启动,需要指定  PFILE  参数,PFILE文件必须放在运行  RMAN  的客户端上。

    3.跳过不需要复制的表空间要跳过只读表空间,在执行 duplicate 命令时指定  SKIP READONLY 子句即可。

    要跳过离线表空间,在执行 duplicate 命令之前将其置为  OFFLINE NORMAL 状态即可,RMAN  复制时会跳过只读或离线表空间的数据文件。

    要跳过正常的表空间,指定 SKIP TABLESPACE ts_name

    4.恢复到以前的时间点要恢复到以前的时间点,在 duplicate 命令中指定  UNTIL TIME 'SYSDATE-1' 5.创建过程中重命名控制文件可以使用 restore controlfile from …;或者 dbms_backup_restore 包恢复出控件文件,然后在初始化参数文件 PFILE 中进行正确的设置。

    6.创建过程中重命名在线日志文件1.执行  duplicate 命名时指定 LOGFILE子句,手工设置 redo logs 文件名。 例:LOGFILE GROUP 1 '/oradata/newdb/redo01_1.log'

    '/oradata/newdb/redo01_2. log' SIZE 200K,)

    2.副本数据库初始化参数文件 PFILE中设置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT = 'string1' 'string2' 'string3' 'string4' ……;将  strin1 替换为 string2string3 替换为 string4 7.创建过程中重命名数据文件,或改变数据库文件的新的路径1.在初始化参数中重命名:DB_FILE_NAME_CONVERT=‘xxxx’‘yyyy’2. Duplicate Duplicate Duplicate 命令中重命名数据文件: duplicate target database to newdb DB_FILE_NAME_CONVERT='xxxx' 'yyyyy ');3.使用 SET NEWNAME  命令重命名数据文件SET NEWNAME FOR DATAFILE 1 TO '/xxx/xxx.dbf'4.使用  CONFIGURE AUXNAME  命令重命名数据文件CONFIGURE AUXNAME FOR DATAFILE 1 TO '/xxxx/xxx.dbf'5.重命名临时文件路径SET NEWNAME FOR TEMPFILE '/xxx/xxx.dbf' TO '/yyy/xxx.dbf'

    例:一个比较复杂的复制命令如下:

    RMAN> RUN {

    allocate auxiliary channel newdb1 device type sbt

    duplicate target database to newdb

    DB_FILE_NAME_CONVERT='/h1/oracle/dbs/trgt/''/h2/oracle/oradata/newdb/'

    UNTIL TIME 'SYSDATE-1'       # specifies incomplete recovery

    SKIP TABLESPACE cmwlite drsys example        # skip desired tablespaces

    PFILE = /dbs/initNEWDB.ora

    LOGFILE

    GROUP 1 '/oradata/newdb/redo01_1.log'

    '/oradata/newdb/redo01_2. log' SIZE 200K

    GROUP 2 '/oradata/newdb/redo02_1. log''

    '/oradata/newdb/redo02_2. log'' SIZE 200K

    GROUP 3 '/oradata/newdb/redo03_1. log''

    '/oradata/newdb/redo03_2. log'' SIZE 200K REUSE

    }

    4.7.3  表空间时间点恢复(TSPITR

    用户可能错误的删除了几个表,而且还截断了几个表,如果进行整库恢复可能代价比较

    高,这时,我们可以执行表空间时间点恢复(tablespace point-in-time recovery  TSPITR)。

    为了掌握如何执行 TSPITR,应该理解下面这些术语:辅助实例(auxiliary  instance):  这是我们创建的临时实例,RMAN  使用这个实例执行TSPITR.完成 TSPITR  后,这个实例可以删除。

    辅助集(auxiliary  set):  辅助实例上的文件集。包括控制文件、回滚段或者重做段的表空间、系统表空间、联机日志文件等,还可以选择辅助实例的临时表空间。

    恢复集(recovery set):    要执行 TSPITR  的表空间/数据文件集目标数据库:    实际执行 TSPITR  的数据库

    TSPITR  的本质是,RMAN  将要进行时间点恢复的表空间按照设定的条件恢复到辅助实例上,然后再从辅助实例将表空间传到目标数据库,从而避免整个数据库的恢复,减少恢 复时间,而且这期间其他表空间仍然可用。(  用户管理的备份与恢复也可以使用 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 112521' 'yyyy-mm-dd hh24miss' );进行TSPITR  的基本步骤是(与有些书上的步骤略有不同):(0  检查需要恢复的表空间的数据文件备份和控制文件备份是否存在(1  验证表空间的可传输性(2  准备辅助实例(3  执行实际的 TSPITR4  在目标数据库上执行 TSPITR  后的操作。

    1.验证表空间的可传输性

    RMAN  使用 Oracle  可传送的表空间特性来执行 TSPITR,因此表空间本身必须是可传送的。许多因素都导致表空间不可传送。

    TSPITR  限制不能还原包含  SYS  用户对象不能执行 TSPITR  恢复具有复制主表的表空间 不支持使用快照日志的表空间 不能还原含有回滚段的表空间不能还原含有分区对象(该对象的分区跨越多个表空间)的表空间表空间中不能含有 VARRAY、嵌套表、外部表对象TSPITR  不能用于恢复删除的表空间。

    可以通过  TS_PITR_CHECK  视图来判断表空间是否可传送。如果表空间不可传送,那 么执行  TSPITR    时就会失败。下面是查询 USERS  表空间是否可传送的语句:SQL> SELECT OBJ1_NAME "Object Owner"obj1_name "Object Name" obj1_type "Object Type"ts1_name "Tablespace Name"reason FROM TS_PITR_CHECK   WHERE ts1_name='USERS';如果未选定行,说明 USERS  表空间可传输。

    2.准备TSPITR  的辅助实例  AUXILIARY INSTANCE

    启动 TSPITR 之前,需要准备辅助实例。这是一个不需要  RMAN  参与的手工过程。执行下面的步骤来创建辅助实例:u    创建口令文件u    创建辅助实例的参数文件: 编辑辅助实例参数文件的一个简单方法是把目标数据库的参数文件改一下即可。如果目标数据库用的是 SPFILE,那么在  SQLPLUS  中执行 CREATE PFILE FROM SPFILE  就可以生成参数文件。

    注意:control_files  设置为辅助实例上的文件名db_name = 目标实例lock_name_space 如果辅助实例与目标数据库同一主机,必须设置 instance_name service_names    取一新名,如 AUX db_file_name_convert    数据文件名的转换log_file_name_convert    日志文件名的转换注释掉 log_archive_start  参数u    如果在 Windows NT  上运行 Oracle,需要使用 oradim  来添加数据库服务u    启动辅助实例,如有必要,配置 tnsnames.ora,测试是否连通。

    3.执行实际的TSPITR

    例子: 恢复用户误删除的某个重要的表。将实例 MING  USERS  表空间恢复到 SCN 3818161  的时候。

    启动辅助实例:C\>SET ORACLE_SID=AUX1 C\>SQLPLUS /NOLOG SQL> CONNECT / AS SYSDBA SQL> STARTUP NOMOUNT;请注意,SET ORACLE_SID=AUX1  很重要,这样就可以不用配置 TNSNAMES.ORA执行实际的TSPITR 首先要连到目标数据库和辅助实例。可以联到恢复目录,也可以不连到恢复目录: C\> SET ORACLE_SID=AUX1 C\> RMAN TARGET /@MING CATALOG RMAN/RMAN@RECO AUXILIARY / RMAN> RECOVER TAB LESPACE USERS UNTIL SCN 233646

    等待完成表空间的恢复。当然也可以用 UNTIL TIME  或者 UNTIL SEQUENCE 子句,例:RMAN> run { allocate auxiliary channel c1 device type diskrecover tablespace user02 until logseq 9}

      这里有些版本有一个 ORACLE BUG,执行到最后可能会报错,需要打补丁  ?? )

    可以改变辅助集/恢复集数据文件的位置和名称:set newname for datafile 5 to 'c\demo\user01.dbf'configure auxname for datafile 1 to '/backup/xxx.dbf‘;在初始化参数文件中用 DB_FILE_NAME_CONVERT 进行转换

    10g  中增加了auxiliary destination    ,更方便RMAN> recover tablespace user01 until logseq 19 auxiliary destination 'd\auxiliary'

    4.执行TSPITR  后的操作首先应该重新连接 RMAN与目标数据库,并且备份刚恢复的表空间。完成备份后,需要将表空间联机(RMAN    TSPITR  后使表空间脱机)。最后,我们还要关闭或删除辅 助数据库。

    4.7.4  块媒体恢复  Block Media Recovery BMR

    产生块损坏的原因一般是间断或随机的  I/O  错误或者是内存的块错误。要恢复的坏块 信息可以从报警与跟踪文件,表与索引的分析,DBV  工具或第三方媒体管理工具以及具体 的查询语句中获得。

    1. DBV 工具    dbv file=EYGLE.DBF blocksize=8192 2. RMAN> backup validatedatafile 4    ——  或者 BACKUP VALIDATE DATABASE备份的 坏 块 信息 保存在  V$BACKUP_CORRUPTION V$COPY_CORRUPTION  V$DATABASE_BLOCK_CORRUPTION 视图中。

    V$BACKUP_CORRUPTION                           显示历史讹误的视图 V$DATABASE_BLOCK_CORRUPTION    显示当前数据块讹误的视图。 一旦修正了数据库的块讹误,就需要重新运行  BACKUP VALIDATE DATABASE  命令,然后确认 V$DATABASE_BLOCK_CORRUPTION 中没有其他讹误。

    RMAN  可以备份包含损坏数据块的数据文件,通过设置  set maxcorrupt  可以跳过指定个数的坏块来避免备份失败。

    RMAN> set maxcorrupt for datafile 1 to 0;在 Oracle9i中可以用  RMAN来执行块级的恢复,而且恢复期间数据文件可以是联机状 态。RMAN通过  Block Media Recovery(简称 BMR)来执行块级恢复操作。假设我们在查询一个  Oracle  表的时候接收到下面的错误:ERROR  位于第  1    行:ORA-01578 ORACLE  数据块损坏(文件号  5,块号  97

    ORA-01110    数据文件  5    'E\xxxx.dbf'那么我们就可以在  RMAN中用  BLOCKRECOVER 命令来修复:RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97; 启动  blockrecover    03-9  -06 正在启动全部恢复目录的  resync完成全部  resync使用通道  ORA_DISK_1通道  ORA_DISK_1    正在从数据文件副本 E\xxxx.bak 恢复块

    正在开始介质的恢复完成介质的恢复完成  blockrecover    03-9  -06

    恢复V$DATABASE_BLOCK_CORRUPTION 视图中列出的坏块:RMAN> blockrecover corruption list [ restore until time 'sysdate - 10' ];恢复指定坏块:RMAN> blockrecover datafile 2 block 1213 datafile 9 block 19RMAN> blockrecover tablespace system dba 4440444405 from tag "weekly_backup" RMAN> blockrecover tablespace system dba 4440444405 restore until time 'sysdate-2'

    4.7.5  使用恢复目录恢复前一个对应物

    在不完全恢复完成之后,通常需要使用  resetlogs  选项来打开数据库。resetlogs  表示 一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期 也被称为一个对应物(incarnation)。每次使用  resetlogs  选项来打开数据库后都会创建一个 新的数据库对应物。

    使用 RMAN可以进行穿越  resetlogs 的恢复,即可以恢复到前一个对应物。10g 版本 增强了这方面的功能。

    1  使用恢复目录的情况使用恢复目录的情况下,恢复前一个对应物是非常简单的。首先,用list    incarnation;来显示有哪些对应物:RMAN> list incarnation

数据库&nbs

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

转载于:http://blog.itpub.net/16486600/viewspace-522838/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值