關於dg broker的簡單配置(r5筆記第99天)
dataguard broker是在dataguard使用基礎上提供的一個工具,可以把原本複雜的命令控制語句整合起來,比如switchover,failover等等,可能在多個備庫的情況下需要敲不少的命令,這個dg broker的優越性就顯示出來了。
當然dg broker需要啟用還是需要預備一些條件的,比如需要設定local_listener,需要在spfile的基礎上,需要在網路配置中進行dgmgrl相關的標示。
應該是在內部實現中預設擁有這些配置。
我們先來看看一個簡單的配置情況。
首先啟用dg broker,在資料庫引數中有一個dg_broker_start的引數,預設為false,改為true即可。在後臺程序中就會看見dmon相關的程序起來了。
SQL> alter system set dg_broker_start=true ;
System altered.
如果要連入dg broker也很簡單,就是使用sys使用者,和建立一個數據庫連線差不多。
[ora11g@oel1 admin]$ dgmgrl
DGMGRL for Linux: Version 11.2.0.1.0 - Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/oracle@test11g
Connected.
檢視配置資訊。因為這個時候還沒有進行基本的配置,還是看不到什麼資訊的。
DGMGRL> show configuration
ORA-16532: Data Guard broker configuration does not exist
Configuration details cannot be determined by DGMGRL
這個時候需要做兩種配置,一種是primary database的配置,另外一種是standby的配置
主庫的配置如下:
DGMGRL> create configuration 'TEST11G' as
primary database is TEST11G
connect identifier is TEST11G;
Configuration "TEST11G" created with primary database "test11g"
備庫的配置如下:
DGMGRL> add database DG11G
as connect identifier is DG11G
maintained as physical;
Database "dg11g" added
DGMGRL> show configuration;
Configuration - TEST11G
Protection Mode: MaxPerformance
Databases:
test11g - Primary database
dg11g - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
DISABLED
如果想檢視更多的關於主庫,備庫的資訊,可以使用verbose的選項
DGMGRL> show database verbose TEST11G
Database - test11g
Role: PRIMARY
Intended State: OFFLINE
Instance(s):
TEST11G
Properties:
DGConnectIdentifier = 'test11g'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
DelayMins = '0'
Binding = 'optional'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '30'
RedoCompression = 'DISABLE'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '4'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = '/u02/ora11g/oradata/TEST11G, /u02/dg11g/oradata/DG11G'
LogFileNameConvert = '/u02/ora11g/oradata/TEST11G, /u02/ora11g/oradata/DG11G'
FastStartFailoverTarget = ''
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
HostName = 'oel1'
SidName = 'TEST11G'
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=TEST11G_DGMGRL)(INSTANCE_NAME=TEST11G)(SERVER=DEDICATED)))'
StandbyArchiveLocation = '/u02/ora11g/switchover/TEST11G/archivelog'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.dbf'
TopWaitEvents = '(monitor)'
Database Status:
DISABLED
這個時候所做的工作就比較簡單了,我們直接啟用即可。
DGMGRL> enable configuration;
Enabled.
DGMGRL> enable database TEST11G;
Enabled.
DGMGRL> enable database DG11G;
Enabled.
這個時候我們來看看是否能夠正常顯示broker的資訊
DGMGRL> show database TEST11G;
Database - test11g
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
TEST11G
Error: ORA-16797: database is not using a server parameter file
Database Status:
ERROR
從錯誤可以看出去,還是需要設定spfile的。
DGMGRL> show database DG11G;
Database - dg11g
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: (unknown)
Apply Lag: (unknown)
Real Time Query: OFF
Instance(s):
DG11G
Database Status:
DGM-17016: failed to retrieve status for database "dg11g"
ORA-16525: the Data Guard broker is not yet available
ORA-16625: cannot reach database "dg11g"
這個時候啟用spfile即可。 --主庫端驗證spfile是否使用,如果沒有啟用,需要啟用後重啟資料庫例項
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile from pfile;
File created.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 435224576 bytes
Fixed Size 1337044 bytes
Variable Size 272632108 bytes
Database Buffers 155189248 bytes
Redo Buffers 6066176 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/ora11g/product/11.2.0
/dbhome_1/dbs/spfileTEST11G.or
a
備庫中的設定基本是一樣的
配置完成了,dg broker還是能做很多工作的。
比如修改備庫為read-only模式
DGMGRL
DGMGRL> edit database 'DG11G' set state='read-only';
Succeeded.
通過sql命令檢視狀態的變化如下:
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
DG11G MOUNTED
SQL> /
INSTANCE_NAME STATUS
---------------- ------------
DG11G OPEN
當然主要的功能還是做switchover,failover的切換,後臺會做大量的檢查和校驗,switchover的命令在dg broker裡面極為精簡,但是有利有弊,如果配置不當,很可能就會出現下面的問題
DGMGRL> switchover to 'DG11G';
Performing switchover NOW, please wait...
Error: ORA-16664: unable to receive the result from a database
這個時候就會很可能備庫變主庫,存在兩個主庫了。
還是需要好好檢查一下dg broker的準備條件。