Oracle 10g Data Guard Broker 配置文档

Oracle Data Guard Broker的配置及一些说明,参考Oracle官网文档:

Oracle Data Guard快速启动故障切换指南

http://www.oracle.com/technology/global/cn/pub/articles/smiley-fsfo.html

测试平台:Redhat 5.4 + Oracle 10gR2+ Physical Standby

一.Data GuardBroker相关概念

1.1Broker

Data Guard环境设置了Broker后,当主库出现一下情况,Broker就会自动进行主备库的切换。

1) Instance Failure

2) Shutdown Abort

3) Offline Datafiles due to I/O error

4) Network disconnection

切换时,Observer会将备库变成主库。同时Observer通过应用Flashback log将原来的主库变成备库。所以,Data Guard Broker必须开启Flashback,同时将DG配置在maximum availability模式。

Data Guard Broker会在所有的主备库上使用自己的DMON进程和配置文件进行通信。当我们将DG_BROKER_START设置为true之后,DMON进程就会启动。对于Broker的配置文件,我们可以通过Enterprise Manger或者使用DGMGRL命令进行创建。

Broker的配置文件有自己的参数和设置。Data Guard允许有多分配置文件,所以我们需要在DG_BROKER_CONFIG_FILEn参数里指定正确的配置文件。要注意的是,这个控制文件是二进制文件,不要手动去修改它,这样会破坏这个文件。

如果是RAC环境,所有的实例有一份Broker配置文件。该文件放在共享设备上。

Broker的更多内容参考:

Interaction Between the Data Guard Broker and a Data Guard Configuration [ID 249703.1]

 http://blog.csdn.net/xujinyang/article/details/6925015

1.2Maximum Availability模式

最高可用性(Maximum availability):这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台Standby数据库的Standby Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。

Maximum protection/AVAILABILITY模式必须满足以下条件:

(1)Redo Archival Process: LGWR

(2)Network Tranmission mode: SYNC

(3)Disk Write Option: AFFIRM

(4)Standby Redo Logs: Yes

(5)standby database type: Physical Only

即Standby Database必须配置Standby Redo Log,而Primary Database必须使用LGWR,SYNC,AFFIRM方式归档到Standby Database.

如:

SQL> alter system set log_archive_dest_2='service=orcl_st lgwr sync AFFIRM';

注意:主库的保护模式修改之后,备库的模式也会改变,和主库保持一致。

在此对LGWR进程的SYNC方式做下说明:

(1)Primary Database产生的Redo日志要同时写道日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程(Network Server Process),再由LNSn(LGWR Network Server process)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。

(2)LGWR必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary Database上的事务才能提交,这也是SYNC的含义所在。

(3)Standby Database的RFS进程把接收到的日志写入到Standby Redo Log日志中。

(4)Primary Database的日志切换也会触发Standby Database上的日志切换,即Standby Database对Standby Redo Log的归档,然后触发Standby Database的MRP或者LSP进程恢复归档日志。

因为Primary Database的Redo是实时传递的,于是Standby Database端可以使用两种恢复方法:

实时恢复(Real-Time Apply):只要RFS把日志写入Standby Redo Log就会立即进行恢复;

归档恢复:在完成对Standby Redo Log归档才触发恢复。

Primary Database默认使用ARCH进程,如果使用LGWR进程必须明确指定。使用LGWR SYNC方式时,可以同时使用NET_TIMEOUT参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,LGWR进程会抛出错误。

示例:

alter system set log_archive_dest_2 = 'SERVICE=STLGWRSYNCNET_TIMEOUT=30' scope=both;

Oracle Data Guard 理论知识,更多内容参考:

http://blog.csdn.net/xujinyang/article/details/6833263

 

二.用DGMGRL配置物理standby的Broker示例

Oracle 10g官网文档参考:

IMPLEMENTING FAST-START FAILOVER IN 10GR2 DATAGUARD BROKER ENVIRONMENT [ID 359555.1]

http://blog.csdn.net/xujinyang/article/details/6833180

Oracle 9i官网文档参考:

Setup and maintenance of Data Guard Broker using DGMGRL [ID 201669.1]

http://blog.csdn.net/xujinyang/article/details/6925035

这篇文章主要介绍Broker的配置,关于Data Guard的配置参考:

Oracle Data Guard Linux平台Physical Standby搭建实例

http://blog.csdn.net/xujinyang/article/details/6829555

Oracle Data Guard Linux平台Logical Standby创建实例

http://blog.csdn.net/xujinyang/article/details/6829546

在这里补充一点,我以前配置DG,喜欢使用默认方式,这样配置是非常简单的。但是最好还是把所有参数写全,其实也没有几个参数需要配置。关于参数的详细参考:

Oracle Data Guard理论知识

http://blog.csdn.net/xujinyang/article/details/6833263

在pfile里添加如下参数,用pfile启动后,在创建spfile:

####主库参数######

*.DB_NAME ='orcl';

*.DB_UNIQUE_NAME='orcl_pd'--监听中配置的

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_pd,orcl_st)'

--列出DG中所有DB_UNIQUE_NAME

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pd'

*.LOG_ARCHIVE_DEST_2='service=orcl_st LGWR SYNC AFFIRM NET_TIMEOUT=30 DB_UNIQUE_NAME=orcl_st'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

#####备库参数#######

*.FAL_SERVER=orcl_st

*.FAL_CLIENT=orcl_pd

*.standby_file_management='AUTO'

*.standby_archive_dest='/u01/archive'

#如果主备库目录不同,还需要添加:

*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

在主备库的pfile里把如下参数都添加进去,因为切换之后还是需要使用的。不过主备库相应的目录和实例需要调整。

注意:必须配置local_listener,由各实例参数local_listener解析出来的监听地址必须能被所有成员访问local_listener

主库:*. local_listener='orcl_pd;

备库:*. local_listener='orcl_st;

2.1切换Data Guard到Maximum availability模式

默认情况下是Maximum performance,所以我们需要调整。

查看主备库log_archive_dest_2参数:

(1)主库:

SQL>show parameter log_archive_dest_2

NAMETYPEVALUE

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

log_archive_dest_2stringSERVICE=orcl_st

(2)备库:

SQL>show parameter log_archive_dest_2

NAMETYPEVALUE

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

log_archive_dest_2stringSERVICE=orcl_pd

修改主备库的log_archive_dest_2参数:

(1)主库:

SQL> alter system set log_archive_dest_2='service=orcl_st LGWR SYNC AFFIRM NET_TIMEOUT=30 DB_UNIQUE_NAME=orcl_st';

System altered.

SQL> show parameter log_archive_dest_2

(2)备库:

SQL> alter system set log_archive_dest_2 = 'SERVICE=orcl_pd LGWRSYNCNET_TIMEOUT=30 AFFIRM DB_UNIQUE_NAME=orcl_pd' scope=both;

System altered.

SQL> show parameter log_archive_dest_2

在主备库查看模式:

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODEPROTECTION_LEVEL

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

MAXIMUM PERFORMANCEMAXIMUM PERFORMANCE

主备库都执行:

注意,切换模式要在非open状态执行,所以主库需要shutdown,在启动到mount后,在执行命令,备库直接执行即可。

SQL> alter database set standby database to maximize availability;

Database altered.

SQL>select protection_mode,protection_level from v$database;

PROTECTION_MODEPROTECTION_LEVEL

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

MAXIMUM AVAILABILITYMAXIMUM AVAILABILITY

2.2启动Flashback

数据库的Flashback Database功能缺省是关闭的。我们需要启动它。

可以通过如下SQL查看:

SQL> select flashback_on from v$database;

FLASHBACK_ON

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

NO

在启用Flashback database之前,我们需要先设定闪回区:

在主备库查看:

SQL> show parameter db_recovery_file_dest

NAMETYPEVALUE

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

db_recovery_file_deststring/u01/app/oracle/flash_recovery_area

db_recovery_file_dest_sizebig integer 2G

我这里是设置过了,如果没有设置,可以用以下语句进行设置:

Alter system set db_recovery_file_dest_size=<integer>[<k><M><G>];

Alter system set db_recovery_file_dest=<path_to_flashabck_logs>;

启动flashback database.

主库:这个操作也需要在非open状态执行。主库需要shutdown后,启动到mount状态执行。

SQL> Alter database flashback on;

备库:需要先取消recover进程,不然会报错。

SQL> Alter database flashback on;

Alter database flashback on

*

ERROR at line 1:

ORA-01153: an incompatible media recovery is active

SQL>alter database recover managed standby database cancel;

Database altered.

SQL> Alter database flashback on;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON

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

YES

SQL> alter database recover managed standby database disconnect from session;

Database altered.

详细内容参考:

Oracle Flashback技术总结

http://blog.csdn.net/xujinyang/article/details/6830438

2.3安装DGMGRL

这一步是官网上建议安装的。在另一台观察机器observer上安装DGMGRL。就是安装一个Oracle的客户端。并在observer machine上配置相关的参数。包括配置监听,使这台机器能访问主备库的实例。然后通过这个observer来判断主备库的状态。如果主库出现问了,那么observer就会切换主备库。

放在另一台机器的原因也很明显,如果放在主库上,如果主库系统崩溃了,那么Observer也就失效了。

在这个实验中,我不在单独在其他机器上安装DGMGRL命令。我直接在备库的系统上配置这个observer.

2.4设置broker参数

在主备库查看dg_broker_start参数:

SQL> show parameter dg_broker_start

NAMETYPEVALUE

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

dg_broker_startbooleanFALSE

SQL>alter system set dg_broker_start = true scope=both;

System altered.

SQL> show parameter dg_broker_start

NAMETYPEVALUE

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

dg_broker_startbooleanTRUE

SQL>

2.5配置Listener.ora文件

To enable DGMGRL torestart instances during the course of broker operations, a service with a specific name must be statically registered with the local listener of each instance.A static service registration is also required to enable the observer to restart instances as part of automatic reinstatement of the old primary database after a fast-start failover has occurred.The broker uses a default name for the GLOBAL_DBNAME attribute of db_unique_name_DGMGRL.db_domain.

From:http://download.oracle.com/docs/cd/E18283_01/server.112/e17023/install.htm

主备库的Listener.ora文件都修改成如下格式:

[oracle@dg1 admin]$ cat listener.ora

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(SID_NAME = orcl)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(GLOBAL_DBNAME = orcl)

)

(SID_DESC =

(GLOBAL_DBNAME = orcl_pd_DGMGRL)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

(SID_NAME = orcl)

)

)

注意这里的GLOBAL_DBNAME参数格式:

<db_unique_name>_DGMGRL.<db_domain>的连接。

备库改成备库的db_unique_name就可以了。并且db_unique_name大小写敏感。其他一样。

或者使用net manager工具,在listeners选项下,选择Database Services服务,添加一下。

最好不要忘了用: lsnrctl reload命令重新加载一下。

2.6设置FAST_START FAILOVER

这里是测试,不在用另一台机器来做observer。故在备库上配置Broker.

[oracle@dg2 /]$dgmgrl

DGMGRL for Linux: Version 10.2.0.1.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.

DGMGRL>connect sys/oracle@orcl_pd;

Connected.

DGMGRL> help create

Create a broker configuration

Syntax:

CREATE CONFIGURATION <configuration name> AS

PRIMARY DATABASE IS<database name>--db_unique_name

CONNECT IDENTIFIER IS<connect identifier>; --监听中配置的名称

DGMGRL>create configuration 'OrclBroker' as primary database is 'orcl_pd' connect identifier is orcl_pd;

Configuration "OrclBroker" created with primary database "orcl_pd"

DGMGRL> help add

Add a standby database to the broker configuration

Syntax:

ADD DATABASE<database name>AS

CONNECT IDENTIFIER IS<connect identifier>

MAINTAINED AS {PHYSICAL|LOGICAL};

DGMGRL>add database 'orcl_st' as connect identifier is orcl_st maintained as physical;

Database "orcl_st" added

DGMGRL>show configuration

Configuration

Name:OrclBroker

Enabled:NO

Protection Mode:MaxAvailability

Fast-Start Failover: DISABLED

Databases:

orcl_pd - Primary database

orcl_st - Physical standby database

Current status for "OrclBroker":

DISABLED

如果出现这种错误,处理方法参考:

ORA-16796: one or more properties could not be imported from the database [ID 358040.1]

http://blog.csdn.net/xujinyang/article/details/6833155

现在会在主库的$ORACLE_HOME/dbs/下生成2个配置文件:dr1orcl_pd.dat和dr2orcl_pd.dat.这2个文件的位置有如下参数指定:

SQL> show parameter dg_broker_config_file

NAMETYPEVALUE

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

dg_broker_config_file1string/u01/app/oracle/product/10.2.0

/db_1/dbs/dr1orcl_pd.dat

dg_broker_config_file2string/u01/app/oracle/product/10.2.0

/db_1/dbs/dr2orcl_pd.dat

[oracle@dg1 dbs]$ pwd

/u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@dg1 dbs]$ ls

dr1orcl_pd.dathc_orcl.datinit.oralkORCLorapworcl

dr2orcl_pd.datinitdw.orainitorcl.oralkORCL_PDspfileorcl.ora

DGMGRL的日志位置在:

[oracle@dg2 admin]$ cd /u01/app/oracle/admin/orcl/bdump/

[oracle@dg2 bdump]$ ls

alert_orcl.logdrcorcl.log

[oracle@dg2 bdump]$ cat dr

现在我们启用configuration:

DGMGRL>enable configuration

Enabled.

启用之后,在备库的相关目录下也会生成这2个文件。这2个文件在启用之前是没有生成的。

DGMGRL> show configuration

Configuration

Name:OrclBroker

Enabled:YES

Protection Mode:MaxAvailability

Fast-Start Failover: DISABLED--FSFO是禁用的

Databases:

orcl_pd - Primary database

orcl_st - Physical standby database

Current status for "OrclBroker":

SUCCESS

DGMGRL> show database verbose 'orcl_pd';

Database

Name:orcl_pd

Role:PRIMARY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl_pd'

LogXptMode= 'ASYNC'--状态不正确,等会调整

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '180'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= ''

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg1'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_pd":

SUCCESS

DGMGRL> show database verbose 'orcl_st'

Database

Name:orcl_st

Role:PHYSICAL STANDBY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl_st'

LogXptMode= 'SYNC'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '30'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= ''

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg2'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_st":

SUCCESS

在enable FSFO之前,需要注意LogXptMode的状态,必须为SYNC。刚才看到orcl_pd的状态不正确,我们调整一下:

DGMGRL> edit databaseorcl_pd set property logxptmode=sync;

Property "logxptmode" updated

DGMGRL> show database verbose orcl_pd

Database

Name:orcl_pd

Role:PRIMARY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl'

LogXptMode= 'sync'

Dependency= ''

...

不然在启用FSFO时,会遇到如下错误:

ORA-16651: requirements not met for enabling Fast-Start Failover

ORA-16651:

requirements not met for enabling Fast-Start Failover

Cause:

The attempt to enable Fast-Start Failover could not be completed because one or more requirements have not been met:

- The Data Guard configuration must be in MaxAvailability protection mode.

- The LogXptMode property for both the primary database and the Fast-Start Failover target standby database must be SYNC.

- The primary database and the Fast-Start Failover target standby database must both have flashback enabled.

- No valid target standby database was specified in the primary database's FastStartFailoverTarget property prior to the attempt to enable Fast-Start Failover, and more than one standby database exists in the Data Guard configuration.

Action:

Retry the attempted command after correcting the issue:

- Set the Data Guard configuration to MaxAvailability protection mode.

- Ensure that the LogXptMode property for both the primary database and the Fast-Start Failover target standby database are SYNC.

- Ensure that both the primary database and the Fast-Start Failover target standby database have flashback enabled.

- Set the primary database's FastStartFailoverTarget property to the db_unique_name value of the desired target standby database add the desired target standby database's FastStartFailoverTarget property to the db_unique_name value of the primary database.

启用FSFO:

DGMGRL> enable fast_start failover;

Enabled.

DGMGRL> show configuration verbose

Configuration

Name:OrclBroker

Enabled:YES

Protection Mode:MaxAvailability

Fast-Start Failover: ENABLED

Databases:

orcl_pd - Primary database

orcl_st - Physical standby database

- Fast-Start Failover target

Fast-Start Failover

Threshold: 30 seconds--默认值太小,等会改成120s

Observer:(none)

Current status for "OrclBroker":

Warning: ORA-16608: one or more databases have warnings--警告因为Observer没有启动,这个从DGMGRL日志中可以看到。

DGMGRL>edit configuration set property FastStartFailoverThreshold=120;

Property "faststartfailoverthreshold" updated

DGMGRL> show database verbose orcl_pd

Database

Name:orcl_pd

Role:PRIMARY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl'

LogXptMode= 'sync'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '180'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= 'orcl_st'

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg1'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_pd":

Warning: ORA-16819: Fast-Start Failover observer not started--从这里也可以清楚的看出问题

启动Observer

DGMGRL> start observer

Observer started

注意,启动之后,该前台进程不会退出,会一直挂在这。直到从其他窗口关闭。

默认情况下,observer会创建一个二进制的文件fsfo.dat来保存主库和备库的连接信息。这个文件会在调用dgmgrl命令的当前窗口下生成。

2.7验证

主库:

SQL> select fs_failover_observer_present,fs_failover_observer_host,fs_failover_threshold from v$database;

FS_FAIL FS_FAILOVER_OBSERVER FS_FAILOVER_THRESHOLD

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

YESdg2120

备库:

SQL> select fs_failover_observer_present,fs_failover_observer_host,fs_failover_threshold from v$database;

FS_FAIL FS_FAILOVER_OBSERVER FS_FAILOVER_THRESHOLD

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

YESdg2120

[oracle@dg2 dbs]$ dgmgrl

DGMGRL for Linux: Version 10.2.0.1.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.

DGMGRL> connect sys/oracle@orcl_pd;

Connected.

DGMGRL> show configuration verbose;

Configuration

Name:OrclBroker

Enabled:YES

Protection Mode:MaxAvailability

Fast-Start Failover: ENABLED

Databases:

orcl_pd - Primary database

orcl_st - Physical standby database

- Fast-Start Failover target

Fast-Start Failover

Threshold: 120 seconds

Observer:dg2

Current status for "OrclBroker":

SUCCESS

DGMGRL> show database verbose orcl_pd;

Database

Name:orcl_pd

Role:PRIMARY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl'

LogXptMode= 'sync'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '180'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= 'orcl_st'

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg1'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_pd":

SUCCESS

DGMGRL> show database verbose orcl_st;

Database

Name:orcl_st

Role:PHYSICAL STANDBY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl_st'

LogXptMode= 'SYNC'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '30'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= 'orcl_pd'

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg2'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_st":

SUCCESS

2.8验证自动切换

在前面提到,在一下情况会发生切换:

1) Instance Failure

2) Shutdown Abort

3) Offline Datafiles due to I/O error

4) Network disconnection

所以我们这里模拟主库shutdown的情况,我们在主库执行shutdown abort在查看主备库的情况。

(1)先在客户端配置一下TAF

在tnsnames.ora文件里添加如下参数:

TAFTEST=

(DESCRIPTION=

(LOAD_BALANCE=on)

(FAILOVER=on)

(ADDRESS=

(PROTOCOL=tcp)

(HOST=192.168.3.2)

(PORT=1521))

(ADDRESS=

(PROTOCOL=tcp)

(HOST=192.168.3.3)

(PORT=1521))

(CONNECT_DATA=

(SERVICE_NAME=orcl)

(FAILOVER_MODE=

(TYPE=select)

(METHOD=basic))))

然后通过客户端连接这个是里,连接上后我们查看一下:

C:/Users/Administrator.DavidDai>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on星期一12月13 16:56:33 2010

Copyright (c) 1982, 2010, Oracle.All rights reserved.

SQL> conn sys/oracle@taftest as sysdba;

已连接。

SQL> select db_unique_name from v$database;

DB_UNIQUE_NAME

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

orcl_pd

SQL> select name from v$database;

NAME

---------

ORCL

设置TAF之后,当Data Guard切换之后,我们在客户端不需要做什么修改,还可以继续连接数据库。关于TAF的内容,参考:

Oracle Transparent Application Failover(TAF)说明

http://blog.csdn.net/xujinyang/article/details/6831349

(2)shutdown about主库

SQL> shutdown abort

ORACLE instance shut down.

我这里是采用shutdown来验证,当然也可以用switchover to orcl_st来进行切换。这种做法可以参考:

Oracle Data Guard快速启动故障切换指南

http://www.oracle.com/technology/global/cn/pub/articles/smiley-fsfo.html

(3)查看Broker log

2分钟之后开始切换,我们可以从主备库observer的log中查看:

原备库:

[oracle@dg2 bdump]$ pwd

/u01/app/oracle/admin/orcl/bdump

[oracle@dg2 bdump]$ tail -100 drcorcl.log

DG 2010-12-14-01:03:550 2 0 Database Resource[IAM=PRIMARY]: SetState READ-WRITE-XPTON, phase BUILD-UP, External Cond GRACEFUL-FAIL-OVER-PHYS_STBY, Target Site Handle 0x02001000

DG 2010-12-14-01:03:550 2 0 Executing SQL [ALTER SYSTEM SET standby_archive_dest='' SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:03:550 2 0 SQL [ALTER SYSTEM SET standby_archive_dest='' SCOPE=BOTH sid='orcl'] Executed successfully

DG 2010-12-14-01:03:550 2 0 Executing SQL [ALTER SYSTEM SET log_archive_dest_1='location="/u01/archive"', 'valid_for=(ONLINE_LOGFILE,ALL_ROLES)' scope=both sid='orcl' ]

DG 2010-12-14-01:03:550 2 0 SQL [ALTER SYSTEM SET log_archive_dest_1='location="/u01/archive"', 'valid_for=(ONLINE_LOGFILE,ALL_ROLES)' scope=both sid='orcl' ] Executed successfully

DG 2010-12-14-01:03:550 2 0 Executing SQL [ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:03:550 2 0 SQL [ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=BOTH sid='orcl'] Executed successfully

DG 2010-12-14-01:03:550 2 0 Executing SQL [ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY]

DG 2010-12-14-01:03:550 2 0 SQL [ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY] Executed successfully

DG 2010-12-14-01:03:550 2 0 Set log transport destination: SetState ONLINE, phase BUILD-UP, External Cond GRACEFUL-FAIL-OVER-PHYS_STBY

DG 2010-12-14-01:03:550 2 0 Executing SQL [ALTER DATABASE OPEN]

已经完成了切换。

在客户端查看一下:

SQL> conn sys/oracle@taftest as sysdba;

已连接。

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

orcl

SQL> select db_unique_name from v$database;

DB_UNIQUE_NAME

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

orcl_st

在原来observer启动的地方也会有提示:

DGMGRL>start observer

Observer started

01:03:01.88Tuesday, December 14, 2010

Initiating fast-start failover to database "orcl_st"...

Performing failover NOW, please wait...

Failover succeeded, new primary is "orcl_st"

01:04:53.38Tuesday, December 14, 2010

原来的备库:

SQL> select open_mode,database_role from v$database;

OPEN_MODEDATABASE_ROLE

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

READ WRITE PRIMARY

SQL> select fs_failover_status from v$database;

FS_FAILOVER_STATUS

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

REINSTATE REQUIRED --表明原来的主库还没有被切换为备库

用dgmgrl连接到备库看看:

[oracle@dg2 dbs]$ dgmgrl

DGMGRL for Linux: Version 10.2.0.1.0 - Production

Copyright (c) 2000, 2005, Oracle. All rights reserved.

Welcome to DGMGRL, type "help" for information.

DGMGRL> connect sys/oracle@orcl_st;

Connected.

DGMGRL> show database verbose orcl_st;

Database

Name:orcl_st

Role:PRIMARY

Enabled:YES

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl_st'

LogXptMode= 'SYNC'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '30'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= 'orcl_pd'

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg2'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521))'

StandbyArchiveLocation= '/u01/archive'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_st":

Warning: ORA-16817: unsynchronized Fast-Start Failover configuration

DGMGRL> show database verbose orcl_pd;

Database

Name:orcl_pd

Role:PHYSICAL STANDBY

Enabled:NO

Intended State:ONLINE

Instance(s):

orcl

Properties:

InitialConnectIdentifier= 'orcl'

LogXptMode= 'sync'

Dependency= ''

DelayMins= '0'

Binding= 'OPTIONAL'

MaxFailure= '0'

MaxConnections= '1'

ReopenSecs= '300'

NetTimeout= '180'

LogShipping= 'ON'

PreferredApplyInstance= ''

ApplyInstanceTimeout= '0'

ApplyParallel= 'AUTO'

StandbyFileManagement= 'AUTO'

ArchiveLagTarget= '0'

LogArchiveMaxProcesses= '2'

LogArchiveMinSucceedDest= '1'

DbFileNameConvert= ''

LogFileNameConvert= ''

FastStartFailoverTarget= 'orcl_st'

StatusReport= '(monitor)'

InconsistentProperties= '(monitor)'

InconsistentLogXptProps= '(monitor)'

SendQEntries= '(monitor)'

LogXptStatus= '(monitor)'

RecvQEntries= '(monitor)'

HostName= 'dg1'

SidName= 'orcl'

LocalListenerAddress= '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521))'

StandbyArchiveLocation= 'dgsby_orcl_pd'

AlternateLocation= ''

LogArchiveTrace= '0'

LogArchiveFormat= '%t_%s_%r.dbf'

LatestLog= '(monitor)'

TopWaitEvents= '(monitor)'

Current status for "orcl_pd":

Error: ORA-16661: the standby database needs to be reinstated

(3)将原主库启动到startup mount状态

Broker需要SYSDBA凭证以重新启动两个数据库或其中一个数据库。如果没有该凭证,Broker仍将完成角色转换,但需要手动重新启动数据库.

将原主库启动到mount状态之后,Observer会使用当前主库的Flashback Logs,将原来的备库切换到mount状态状态。

恢复的第一步是将数据库闪回到备用数据库变为主数据库的SCN处(新主数据库上的v$database.standby_became_primary_scn)。闪回数据库将分成两个阶段进行:恢复阶段和介质恢复阶段。

在恢复阶段,闪回数据库使用闪回数据库日志中的前映像块将数据库恢复到standby_became_primary_scn之前的一点。在介质恢复阶段中,闪回数据库应用重做以将数据库带到standby_became_primary_scn。为使闪回数据库成功,闪回数据库日志中必须包括足够的可用历史记录,并且恢复点和standby_became_primary_scn之间生成的所有重做必须可用。如果闪回数据库失败,自动恢复将停止,您将需要手动执行基于SCN的恢复以恢复到standby_became_primary_scn,直到完成该恢复。

一旦闪回数据库成功,观察器会将该数据库转换为备用数据库,执行回弹并开始应用服务。

原主库的log会有如下信息:

[oracle@dg1 bdump]$ D

[oracle@dg1 bdump]$ pwd

/u01/app/oracle/admin/orcl/bdump

[oracle@dg1 bdump]$ ls

alert_orcl.logorcl_arc0_5217.trcorcl_mrp0_5237.trcorcl_nsv1_5173.trcorcl_rsm0_5177.trc

drcorcl.logorcl_arc1_5219.trcorcl_nsv1_5165.trcorcl_pmon_5131.trcorcl_rsm0_5233.trc

[oracle@dg1 bdump]$ tail -100 drcorcl.log

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM REGISTER]

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM REGISTER] Executed successfully

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_dest_1='location="/u01/archive"', 'valid_for=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='orcl' ]

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_dest_1='location="/u01/archive"', 'valid_for=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='orcl' ] Executed successfully

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=BOTH sid='orcl'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET standby_archive_dest='/u01/archive' SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET standby_archive_dest='/u01/archive' SCOPE=BOTH sid='orcl'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH sid='orcl']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH sid='orcl'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE sid='orcl']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE sid='orcl']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_format='%t_%s_%r.dbf' SCOPE=SPFILE sid='orcl'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH sid='*'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH sid='*'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET log_archive_max_processes=2 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_max_processes=2 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_max_processes=2 SCOPE=BOTH sid='*'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Setting init.ora parameter with SQL [ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH sid='*']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH sid='*'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl_st_XPT)(SERVER=dedicated)))']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET fal_server='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl_st_XPT)(SERVER=dedicated)))'] Executed successfully

DG 2010-12-14-01:12:120 2 0 Executing SQL [ALTER SYSTEM SET fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl_pd_XPT)(INSTANCE_NAME=orcl)(SERVER=dedicated)))']

DG 2010-12-14-01:12:120 2 0 SQL [ALTER SYSTEM SET fal_client='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl_pd_XPT)(INSTANCE_NAME=orcl)(SERVER=dedicated)))']Executed successfully

(4)最后验证切换之后的状态

在原备库:

SQL> select open_mode,database_role from v$database;

OPEN_MODEDATABASE_ROLE

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

READ WRITE PRIMARY

SQL> select fs_failover_status from v$database;

FS_FAILOVER_STATUS

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

SYNCHRONIZED

原主库:

SQL> connect sys/oracle as sysdba;

Connected.

SQL> select open_mode from v$database;

OPEN_MODE

----------

MOUNTED

DGMGRL> show configuration verbose;

Configuration

Name:OrclBroker

Enabled:YES

Protection Mode:MaxAvailability

Fast-Start Failover: ENABLED

Databases:

orcl_pd - Physical standby database

- Fast-Start Failover target

orcl_st - Primary database

Fast-Start Failover

Threshold: 120 seconds

Observer:dg2

Current status for "OrclBroker":

SUCCESS

三.移除Broker

官网的说明参考:

How to Safely Remove a Data Guard Broker Configuration [ID 261336.1]

http://blog.csdn.net/xujinyang/article/details/6833165

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值