Chinaunix首页 | 论坛 | 博客
  • 博客访问: 878610
  • 博文数量: 206
  • 博客积分: 10276
  • 博客等级: 上将
  • 技术积分: 2358
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-01 02:41
文章分类

全部博文(206)

文章存档

2014年(1)

2013年(1)

2012年(2)

2011年(10)

2010年(14)

2009年(15)

2008年(33)

2007年(90)

2006年(40)

我的朋友

分类: Oracle

2008-09-05 07:57:58

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

 

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 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );

进行TSPITR  的基本步骤是(与有些书上的步骤略有不同):

(0)  检查需要恢复的表空间的数据文件备份和控制文件备份是否存在

(1)  验证表空间的可传输性

(2)  准备辅助实例

(3)  执行实际的 TSPITR

(4)  在目标数据库上执行 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 disk;

recover 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 12,13 datafile 9 block 19;

RMAN> blockrecover tablespace system dba 44404,44405 from tag "weekly_backup"; RMAN> blockrecover tablespace system dba 44404,44405 restore until time 'sysdate-2';

 

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

 

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

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

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

RMAN> list incarnation;

数据库    Incarnations  列表

DB    关键字    Inc                关键字                               DB            DB ID CUR          重置 SCN    重置时间

1

2

MING

2600315304

NO

1

20-4  

-06

 

1

854

MING

2600315304

NO

3407561

19-8  

-06

1

4368

MING

2600315304

NO

3794049

29-8  

-06

1

4437

MING

2600315304

NO

3794728

29-8  

-06

1

4639

MING

2600315304

YES

3794935

29-8  

-06

 

 

待续。。。。。

阅读(2255) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~