Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1244299
  • 博文数量: 350
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5668
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-23 17:53
文章分类

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-25 10:29:21

如果你看过三思之前的几个笔记系列,那么对于rman想必已经非常熟悉,操作这个必然也不成问题,如果你还没有看过,建议你先回去看看,然后再回来操作必然也没有问题,如果你一定不准备看,没关系,只要你严格按照实践部分的步骤操作,我相信你一定也可以创建成功,操作应该也没有问题,不过如果这样你也觉着没有问题,那么我要告诉你,可能就这是最大的问题:不知道做过什么,不知道该做什么,不知道为什么要做,一旦需求稍变,你甚至什么都不敢做。

你什么都不用说,我知道,你还有问题,下面,我们先来看你下意识的第一个问题,为什么要用rman创建物理standby?告诉我们,有三点:

RMAN创建standby是通过primary的,因此不会对primary有任何的影响

RMAN自动重命名OMF的文件及路径结构。

RMAN修复归档日志文件并执行恢复以尽可能保证standby与primary数据一致相同。

当然,我们也应该知道,上述这些都是形容词,它只是为了强化意识,说到这里再多白话几句,第一条呢还说的过去(虽然你不用rman备份,使用其它方式的备份创建standby也不会对primary造成影响),第二条第三条就完全不靠谱了,并不是说它实现不了,恰恰相反,是它描述的太基础了,形容手法有问题,我举个例子,比如你在鱼缸里看到一条鱼,你会不会形容说哇这条鱼能够在水里游耶(死鱼才不会在水里游呢)~~所以鉴别能力很重要,虽然这点我做的还很不够,但是请首长们放心,我一定会努力的,我一定会加强的,我一定会坚持的!!!

回到这个问题上来,为什么要用rman来创建物理standby呢,在我看来如果说有优势那么就一点:简单!

另外在这里三思更明确的指出,使用RMAN的duplicate命令只能直接创建物理standby,幸还是不幸?

一、准备工作

注意,在做任何操作之前,需要确认以下几点:

拥有至少一份通过rman创建的备份;

已经在primary数据库设置了所有相关的初始化参数;

已经创建了standby的初始化参数文件并配置了所有相关的初始化参数;

已经配置了实例,NetService,Listener等;

启动standby实例到nomount状态;

然后:

1、通过rman创建standby的控制文件

创建standby的控制文件前面我们提到通过命令,使用非常简单,使用rman命令创建与之同理,并且有两种方式创建演示如下:

1).

RMAN> backup current controlfile for standby;

2).

RMAN> copy current controlfile for standby to 'e:\ora10g\oradata\jssrman\JSSRMAN01.CTL';

2、定制standby数据(日志)文件重命名策略

为什么oracle要提供重命名策略呢?因为dg配置非常灵活,standby甚至可以与primary在同一个。

什么时候需要应用重命名策略呢?如果standby与primary在同一台服务器,或虽然不在同一台服务器,但standby的目录结构与primary不同,这两种情况下,都必须应用重命名策略。如果standby与primary不在同一台服务器,并且目录结构相同,那就不需要应用重命名策略。

如何应用重命名策略呢?多种方式,比如我们的老朋友初始化参数:db_file_name_convert,log_file_name_convert。还有rman命令SET NEWNAME 或CONFIGURE AUXNAME等等,这些相关参数、命令的应用我们都在"Duplicate复制数据库"系列中介绍并应用过,后面还会再次提及。

二、大致流程

通常情况下,rman创建完standby之后不会自动执行recover。

如果你执行duplicate命令时没有指定dorecover参数,则rman自动按照下面的步骤操作:

1、RMAN连接standby与primary,及catalog(如果使用了的话);

2、检索catalog(nocatalog的话是primary数据库的控制文件),确定primary的备份以及standby控制文件;

3、如果使用介质恢复,RMAN需要连接介质器以获取所需备份数据;

4、恢复standby控制文件到standby服务器;

5、恢复primary数据库备份集中相应数据文件到standby服务器;

6、rman自动将standby数据库打开到mount状态,不过不会自动打开redo应用。

如果执行duplicate命令时指定了dorecover参数,则rman会在执行完第5步后,接着执行下列的操作:

7、在所有数据都restored之后,rman自动执行recovery,如果recovery过程需要归档文件,但是这些文件又不在本地盘,则rman会尝试从备份中获取。

8、rman执行recovery之前,你可以通过指定time,scn,logfile sequence来确定recovery的内容,如果什么都不指定,则rman一直recover到最后一个归档文件。

9、rman自动将standby数据库打开到mount状态,同样也不会自动打开redo应用。

三、方法及步骤

基本上,可以分成二类:

1、相同目录结构的创建

duplicate不同服务器相同目录结构创建standby的操作极为简单,你即不需要动用DB_FILE_NAME_CONVER/LOG_FILE_NAME_CONVERT之类参数,也不需要通过set newname之类命令,基本步骤如下:

1) 确保已设置standby服务器中所有相关的初始化参数。

2) 确认备份集中文件scn大于或等于控制文件中的scn。

3) 如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。

例如:set until scn 152;

提示:注意如果有set,则set与duplicate必须在同一个run命令块中。

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

5) 务必指定nofilenamecheck参数,我们之前"duplicate复制数据库"系列中就曾提到过,异机操作路径相同还必需指定NOFILENAMECHECK。因为此处oracle表现的很傻,它不知道你要恢复的路径是在另一台机器上,它只是认为要恢复到的路径怎么跟目标数据库表现的一样呢?会不会是要覆盖目标数据库啊,为了避免这种情形,于是它就报错。所以一旦异机恢复,并且路径相同,那么你必须通过指定NOFILENAMECHECK来避免oracle的自动识别。

例如脚本如下:

sql> duplicate target database for standby nofilenamecheck dorecover;

注意,dorecover并非是必须参数,如果你不指定的话,则duplicate修复数据文件到服务器,并自动将standby启动到mount状态,不过并不会执行恢复操作。

2、不同目录结构的创建

对于不同目录结构创建standby(与是否同一台服务器就基本无关了),你需要对数据文件和日志文件路径重新定义,那你的选择可就多多了哟:

a. 使用初始化参数重定义数据文件及日志文件

关于db_file_name_convert和log_file_name_convert两个初始化参数的本领和套路大家已经都很熟悉了,所以呢这里就不多做介绍。duplicate命令在此处执行的时候与相同目录结构执行也没什么不同,所以,你可以认为,这是不同路径下创建standby中,最简单的方式。

b. SET NEWNAME命令重定义数据文件

步骤如下:

确保已设置standby服务器中所有相关的初始化参数。

确认备份集中文件scn大于或等于控制文件中的scn。

如果需要,可以通过set命令指定time,scn或log序号以执行不完全恢复。

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

通过set newname命令为standby数据文件指定新路径

执行duplicate命令。

例如,脚本如下:

RUN

{

  # Set new file names for the datafiles

  SET NEWNAME FOR DATAFILE 1 TO '?/dbs/standby_data_01.f'; 

  SET NEWNAME FOR DATAFILE 2 TO '?/dbs/standby_data_02.f'; 

  .  .  .

  DUPLICATE TARGET DATABASE FOR STANDBY DORECOVER;

}

c. CONFIGURE AUXNAME命令重定义数据文件

操作步骤皆与上同,不再详述,不过需要注意的是CONFIGURE AUXNAME命令的格式,并且configure命令不能在run块中执行,例如脚本如下:

# set auxiliary names for the datafiles     

CONFIGURE AUXNAME FOR DATAFILE 1 TO '/oracle/auxfiles/aux_1.f'; 

CONFIGURE AUXNAME FOR DATAFILE 2 TO '/oracle/auxfiles/aux_2.f'; 

.  .  .

CONFIGURE AUXNAME FOR DATAFILE n TO '/oracle/auxfiles/aux_n.f'; 

DUPLICATE TARGET DATABASE FOR STANDBY;

最后,务必注意,configure auxname命令执行是一直生效的,因此duplicate执行完之后,推荐清除CONFIGURE AUXNAME。这样就不会对未来的类似操作造成影响。

例如:

CONFIGURE AUXNAME FOR DATAFILE 1 CLEAR; 

CONFIGURE AUXNAME FOR DATAFILE 2 CLEAR;

.  .  .

CONFIGURE AUXNAME FOR DATAFILE n CLEAR; 

步骤和方法介绍完了,下面实际操作一把~~~~~~~~~~~~~

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