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

全部博文(350)

文章存档

2013年(350)

分类: Oracle

2013-04-24 16:41:30

关于角色转换的一些概念在物理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      oradata\jsspdg, oradata\jssweb

log_file_name_convert                string      oradata\jsspdg, oradata\jssweb

JSSWEB> show parameter log_archive_dest

NAME                                 TYPE        VALUE

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

log_archive_dest                     string

log_archive_dest_1                   string      LOCATION=E:\ora10g\oradata\jss

                                                 web\arc  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:\ora10g\oradata\jssweb\std\ valid_for=(standby_logfiles,standby_role) db_unique_name

=jssweb';

系统已更改。

JSSWEB> alter system set log_archive_dest_1='location=e:\ora10g\oradata\jssweb\arc\ 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='oradata\jssldg','oradata\jssweb' scope=spfile;

系统已更改。

JSSWEB> alter system set log_file_name_convert='oradata\jssldg','oradata\jssweb' 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      oradata\jssweb, oradata\jssldg

log_file_name_convert                string      oradata\jssweb, oradata\jssldg

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:\ora10g\oradata\jss

                                                 ldg\arc\ valid_for=(online_log

                                                 files,all_roles) db_unique_nam

                                                 e=jssldg

log_archive_dest_10                  string

log_archive_dest_2                   string      location=E:\ora10g\oradata\JSS

                                                 LDG\std\ 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:\ora10g\oradata\jssweb\standbyrd01.log') size 20m;

数据库已更改。

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

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

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

JSSWEB> alter database add standby logfile group 8 ('e:\ora10g\oradata\jssweb\standbyrd05.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则表示状态正常,可以执行转换操作,如果否的话,就需要你先检查一下当前的配置,看看是否  

三、准备转换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

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

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

字数受限,详细请查看:

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

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