junsansi的博客
自我介绍
切换风格
订阅我的Blog
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
网站链接...
资源
===========================================================
一步一步学DataGuard(14)逻辑standby之switchover
===========================================================

连载第14篇

一步一步学DataGuard(14)逻辑standby之switchover

一步一步学DataGuard(13)逻辑standby之创建示例

一步一步学DataGuard(12)逻辑standby之创建步骤

一步一步学DataGuard(11)逻辑standby之准备创建

一步一步学DataGuard(10)物理standby之高级管理3

一步一步学DataGuard(9)物理standby之高级管理2

一步一步学DataGuard(8)物理standby之高级管理1

一步一步学DataGuard(7)物理standby之failover

一步一步学DataGuard(6)物理standby之switchover

一步一步学DataGuard(5)物理standby之创建示例

一步一步学DataGuard(4)物理standby之创建步骤(2)

一步一步学DataGuard(3)物理standby之创建步骤(1)

一步一步学DataGuard(2)基础之术语再了解大概

一步一步学DataGuard(1)基础之名词先混个脸熟


关于角色转换的一些概念在物理standby章节的时候已经讲了很多,在概念和操作方式上二者基本一致,不过如果你真正深刻理解了物理standby和逻辑standby,你会意识到,对于逻辑standby而言,不管是switchover还是failover,怎么操作起来,都这么怪怪的呢~~~

逻辑standby之switchover

要在primary和逻辑standby之间切换角色,一般是从操作primary开始。

提示:

如果primary或逻辑standby是rac结构,切记只保留一个实例启动,其它实例全部shutdown。等角色转换操作完成之后再启动其它实例,角色转换的操作会自动传播到这些实例上,并不需要你再对这些实例单独做处理。

一、 准备工作

1、检查primary和逻辑standby的初始化参数设置,常规的检查包括:

·确保fal_server,fal_client值设置正确

·确保log_archive_dest_n参数设置正确

更多可能涉及的初始化参数可以参考2.1中的第4小章

首先来看当前的primary数据库:

JSSWEB> show parameter fal

NAME TYPE VALUE

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

fal_client string jssweb

fal_server string jsspdg

JSSWEB> show parameter name_convert

NAME TYPE VALUE

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

db_file_name_convert string oradatajsspdg, oradatajssweb

log_file_name_convert string oradatajsspdg, oradatajssweb

JSSWEB> show parameter log_archive_dest

NAME TYPE VALUE

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

log_archive_dest string

log_archive_dest_1 string LOCATION=E:ora10goradatajss

webarc VALID_FOR=(ALL_LOGFIL

ES,ALL_ROLES) DB_UNIQUE_NAME=j

ssweb

log_archive_dest_2 string service=jsspdg

OPTIONAL LGWR SYNC AFFIRM VALI

D_FOR=(ONLINE_LOGFILES,PRIMARY

_ROLE) DB_UNIQUE_NAME=jsspdg

................

................

................

log_archive_dest_state_1 string ENABLE

log_archive_dest_state_2 string defer

由于此处primary的初始化参数并不合适,为了避免其转换之后发生错误,我们需要提前做些修改:

JSSWEB> alter system set log_archive_dest_2='location=e:ora10goradatajsswebstd valid_for=(standby_logfiles,standby_role) db_unique_name

=jssweb';

系统已更改。

JSSWEB> alter system set log_archive_dest_1='location=e:ora10goradatajsswebarc valid_for=(online_logfiles,all_roles) db_unique_name=jss

web';

系统已更改。

JSSWEB> alter system set log_archive_dest_state_2='enable';

系统已更改。

JSSWEB> alter system set fal_server='jssldg';

系统已更改。

--xx_file_name_convert这两个参数无法动态修改,因此我们首先修改spfile,然后再重启一下数据库

JSSWEB> alter system set db_file_name_convert='oradatajssldg','oradatajssweb' scope=spfile;

系统已更改。

JSSWEB> alter system set log_file_name_convert='oradatajssldg','oradatajssweb' scope=spfile;

系统已更改。

JSSWEB> startup force

然后再看看待转换的逻辑standby

JSSLDG> show parameter fal

NAME TYPE VALUE

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

fal_client string

fal_server string

JSSLDG> show parameter file_name

NAME TYPE VALUE

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

db_file_name_convert string oradatajssweb, oradatajssldg

log_file_name_convert string oradatajssweb, oradatajssldg

JSSLDG> show parameter log_archive

NAME TYPE VALUE

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

log_archive_config string DG_CONFIG=(jssweb,jsspdg,jssld

g)

log_archive_dest string

log_archive_dest_1 string location=E:ora10goradatajss

ldgarc valid_for=(online_log

files,all_roles) db_unique_nam

e=jssldg

log_archive_dest_10 string

log_archive_dest_2 string location=E:ora10goradataJSS

LDGstd valid_for=(standby_lo

gfiles,standby_role) db_unique

_name=JSSLDG

.......................

.......................

对于待转换的逻辑standby中,某些初始化参数也可以不设置,不过走到这一步了,顺手全设置一遍。

JSSLDG> alter system set fal_server='jssweb';

系统已更改。

JSSLDG> alter system set fal_client='jssldg';

系统已更改。

JSSLDG> alter system set log_archive_dest_3='service=jssweb lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=jssweb';

系统已更改。

2、检查primary数据库是否配置了standby redologs

JSSWEB> select * from v$standby_log;

未选定行

对于逻辑standby数据库,standby redologs是必须的,因此我们需要为当前的primary创建几个standby redologs。

JSSWEB> alter database add standby logfile group 4 ('e:ora10goradatajsswebstandbyrd01.log') size 20m;

数据库已更改。

.....................

.......................

.........................

JSSWEB> alter database add standby logfile group 8 ('e:ora10goradatajsswebstandbyrd05.log') size 20m;

数据库已更改。

二、 检查primary数据库状态

在当前的primary数据库查询v$database视图中的switchover_status列,查看当前primary数据库状态。

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO STANDBY

如果该查询返回TO STANDBY 或SESSIONS ACTIVE则表示状态正常,可以执行转换操作,如果否的话,就需要你先检查一下当前的dataguard配置,看看是否

三、 准备转换primary为逻辑standby

执行下列语句,将primary置为准备转换的状态:

JSSWEB> alter database prepare to switchover to logical standby;

数据库已更改。

查看一下switchover_status的状态,哟,果然变成准备ing啦~~

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

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

PREPARING SWITCHOVER

四、 准备转换逻辑standby为primary

我们一定要学习oracle这种逻辑,甭管想做什么,都得先有个准备的过程~

JSSLDG> alter database prepare to switchover to primary;

数据库已更改。

JSSLDG> select switchover_status from v$database;

SWITCHOVER_STATUS

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

PREPARING SWITCHOVER

五、 再次检查primary数据库状态

JSSWEB> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO LOGICAL STANDBY

注意:这步虽然不做什么操作,但检查结果却非常重要,它直接关系到switchover转换是否能够成功。逻辑standby执行完prepare命令之后,就会生成相应的LogMiner字典数据(就像我们前面创建逻辑standby时,primary会生成LogMiner字典数据一样),只有它正常生成并发送至当前的primary,转换操作才能够继续下去。不然当前的primary数据库在转换完之后,可能就失去了从新的primary接收redo数据的能力了。

因此,如果上述查询的返回结果不是:TO LOGICAL STANDBY的话,你可能就需要取消此次转换,检查原因,然后再重新操作了。

提示:

取消转换可以通过下列语句:

ALTER DATABASE PREPARE TO SWITCHOVER CANCEL;

需要分别在primary和逻辑standby执行。

六、 转换primary为逻辑standby

执行下列语句:

JSSWEB> alter database commit to switchover to logical standby;

数据库已更改。

该语句需要等待当前primary所有事务全部结束。同时该语句也会自动拒绝用户发布的新事务或修改需求。为确保该操作尽可能快的执行,最好自开始切换操作起就禁止所有用户的操作。

该命令执行完之后,这个primary就已经成为新的逻辑standby了。不过在新primary执行完转换之前,不要关闭当前这个数据库。

七、 再次检查逻辑standby状态

逻辑standby在接收到前primary的转换消息,并应用完相关的redo数据之后,会自动暂停sql应用,然后查询switchover_status的状态,应该为:TO PRIMARY

JSSLDG> select switchover_status from v$database;

SWITCHOVER_STATUS

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

TO PRIMARY

八、 转换逻辑standby为primary

最后的工作总会在逻辑standby上操作,通过上列语句,将该逻辑standby转换为新的primary。

JSSLDG> alter database commit to switchover to primary;

数据库已更改。

转换完成

九、 启动新逻辑standby的sql应用

最后启动新逻辑standby的sql应用。

JSSWEB> alter database start logical standby apply;

数据库已更改。

提示:还记的我们的jsspdg吗,虽然它也是standby(物理),不过它现在也并非这个dataguard配置中的一员了,这也是由于逻辑standby自身特性决定的,每一个逻辑standby都相当于是一个不同于primary的数据库(DBID都不同),因此在逻辑standby完成了转换之后,相当于原primary已经消失,因此原primary配置的物理standby也失去了主从参照,不过原primary配置的逻辑standby不会有影响。

junsansi 发表于:2008.03.25 13:18 ::分类: ( 三思笔记 ) ::阅读:(86次) :: 评论 (0) :: 引用 (0)

发表评论
标题

在此添加评论

称呼

邮箱地址(可选)

个人主页(可选)

authimage