Bir önceki yazımda physical standby database’ in 10g ve 11g
sürümleri için ayrı ayrı nasıl create edileceğinden bahsetmiştim. Şimdi
oluşturmuş olduğumuz data guardımızı yönetmek için kullanabileceğimiz bir
yöntemden bahsetmek istiyorum. Dataguardı enterprise manager konsoldan veya
dataguardın yönetim paneli olan Dataguard broker’ dan yöntebiliriz. Bugünde bu yönetim
panelinin (DGMGRL) konfigurasyonundan
bahsedeceğiz.
Dg broker konfigurasyonu ;
·
Primary ve standby sunucularında dgmgrl için
listener.ora dosyasını aşağıdaki şekilde
düzenliyoruz.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = dg1)
(GLOBAL_DBNAME = dg1)
(ORACLE_HOME =
/data/oracle/11.2.0/dbhome_1)
)
(SID_DESC =
(SID_NAME = dg2)
(GLOBAL_DBNAME = dg2)
(ORACLE_HOME =
/data/oracle/11.2.0/dbhome_1)
)
(SID_DESC =
(SID_NAME = dg1)
(GLOBAL_DBNAME = dg1_DGMGRL)
(ORACLE_HOME =
/data/oracle/11.2.0/dbhome_1)
)
(SID_DESC =
(SID_NAME = dg2)
(GLOBAL_DBNAME = dg2_DGMGRL)
(ORACLE_HOME =
/data/oracle/11.2.0/dbhome_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL =
TCP)(HOST = 10.1.3.144)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /data/oracle
·
Hem primary hemde standby database’ imizde
dg_broker_start parametresini TRUE’ ya çekiyoruz. Böylelikle “DMON” adıyla yeni bir background processimiz daha
doğmuş oluyor.
ALTER SYSTEM SET
DG_BROKER_START=TRUE scope=spfile
Parametreyi değiştirdikden sonra aşağıdaki gibi
sorgulandığında dg_broker_config_file1 ve file2 parametrelerininde geldiğini
göreceksiniz.
SQL> show parameter dg_broker_start
NAME TYPE VALUE
------------------------------------
----------- ------
dg_broker_config_file1 string C:\...\DR1DGUARD.DAT
dg_broker_config_file2 string
C:\...\DR2DGUARD.DAT
dg_broker_start boolean TRUE
DGMGRL’ ye bağlanmaya
çalışırken aşağıdaki gibi bir hata ile karşılaşırsanız sebebi, dg_broker_start parametresinin TRUE olmamasındandır.
Dolayısıyla öncelikle bu parametreyi kontrol etmeniz gerekir.
DGMGRL> connect
sys/oracle@dguard
Connected.
Error:
ORA-16525: the Data
Guard broker is not yet available
ORA-06512: at
"SYS.DBMS_DRS", line 124
ORA-06512: at line 1
·
Dgmgrl ile komut satırına düşüyoruz.
Burada sırası ile primary ve standby sunucuyu data guard broker’ a
tanıtıyoruz, configurasyonunu kontrol edip gerekiyorsa değişikliklerimizi
yapıp, her iki database’ i enable hale geitirip switchover’ a hazırlıyoruz.
Bu örnekde son durum şu şekilde primary database’ imizin versiyonu 11gR2,
linux 5.5 64 bit üzerinde ve sid’ si dg1, standby olan sunucumuz yine 11gR2,
linux 5.5 64 bit üzerinde ve sid’ si dg2 şu anda da active standby dataguard
olarak çalışıyor.
DGMGRL tarafında yapılan işlemler ;
-- primary database' i eklemek için ;
CREATE CONFIGURATION DG1 as
PRIMARY DATABASE IS DG1
CONNECT IDENTIFIER IS DG1 ;
DGMGRL> CREATE CONFIGURATION dg1 as
> PRIMARY DATABASE IS dg1
> CONNECT IDENTIFIER IS dg1 ;
Configuration "dg1" created with primary database
"dg1"
DGMGRL>
-- standby database' i eklemek için ;
ADD DATABASE dg2 AS
CONNECT IDENTIFIER IS dg2
MAINTAINED AS PHYSICAL ;
DGMGRL> ADD DATABASE dg2 AS
> CONNECT IDENTIFIER IS dg2
> MAINTAINED AS PHYSICAL ;
Database "dg2" added
-- son durmu görüntülemek için ;
SHOW CONFIGURATION
DGMGRL> SHOW CONFIGURATION
Configuration
Name: dg1
Enabled: NO
Protection
Mode: MaxPerformance
Fast-Start
Failover: DISABLED
Databases:
dg1 - Primary database
dg2 -
Physical standby database
Current status for "dg1":
DISABLED
-- tanitilmis olan bir database' in ayarlarini CHECK etmek için ;
SHOW DATABASE VERBOSE dg1;
DGMGRL> SHOW DATABASE VERBOSE dg2;
Database
Name: dg2
Role: PHYSICAL STANDBY
Enabled: NO
Intended
State: OFFLINE
Instance(s):
dg2
Properties:
InitialConnectIdentifier =
'dg2'
LogXptMode =
'ARCH'
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 =
'10'
LogArchiveMinSucceedDest =
'1'
DbFileNameConvert =
'dg1, dg2'
LogFileNameConvert =
'D:\arch, D:\arch\standby_arch'
FastStartFailoverTarget = ''
StatusReport =
'(monitor)'
InconsistentProperties =
'(monitor)'
InconsistentLogXptProps =
'(monitor)'
SendQEntries =
'(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries =
'(monitor)'
HostName =
'WINTEST_PC'
SidName =
'dg2'
LocalListenerAddress =
'(ADDRESS=(PROTOCOL=tcp)(HOST=WINTEST_PC)(PORT=1521))'
StandbyArchiveLocation =
'D:\arch'
AlternateLocation =
''
LogArchiveTrace =
'0'
LogArchiveFormat =
'arch_%t_%s_%r_.arc'
LatestLog =
'(monitor)'
TopWaitEvents = '(monitor)'
Current status for "dg2":
DISABLED
DGMGRL>
-- tanitilmis olan bir database' in ayarlarini update etmek için (örnek
olarak dg1’ in SidName değerinin nasıl değiştirilebildiğini örnekledim) ;
EDIT DATABASE dg1 SET PROPERTY 'SidName'='dg1' ;
DGMGRL> EDIT DATABASE dg2 SET PROPERTY
'SidName'='dg2' ;
Property "SidName" updated
-- dataguard broker' i enable etmek için ;
ENABLE CONFIGURATION;
DGMGRL> enable configuration;
Enabled.
-- son durmu görüntülemek için ;
SHOW CONFIGURATION
DGMGRL> show configuration;
Configuration
Name: dg1
Enabled: YES
Protection
Mode: MaxPerformance
Fast-Start
Failover: DISABLED
Databases:
dg1 - Primary database
dg2 -
Physical standby database
Current status for "dg1":
SUCCESS
DGMGRL>
-- failover operasyonunda geçis için standby database' i hazirlamak
(enable etmek) ;
ENABLE DATABASE dg2;
DGMGRL> ENABLE DATABASE dg2;
Enabled.
DGMGRL>
ENABLE DATABASE dg1;
DGMGRL> ENABLE DATABASE dg1;
Enabled.
DGMGRL>
Switchover test ;
Switchover testine başlamadan önce primary ve standby
sunucularının statülerini kontrol ediyoruz. Show database komutu ile database’
lerimizi sorguladığımızda mutlaka SUCCES mesajını almamız gerekiyor. Eğer alamıyorsak konfigurasyonla ilgili bir
problem var demektir.
DGMGRL> show database dg1
Database - dg1
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
dg1
Database Status:
SUCCESS
DGMGRL>
DGMGRL> ENABLE DATABASE dg2
Enabled.
DGMGRL> show database dg2
Database - dg2
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds
Apply Lag: 0 seconds
Real Time Query: ON
Instance(s):
dg2
Database Status:
SUCCESS
Switchover işlemi için bir problem
gözükmüyor. Operasyona başlamadan önce
sql’ den database’ lerin statüsünü kontrol ediyorum.
(sorgu sonuçları select le seçilen alanlar biraz kalabalık olduğundan dolayı net
anlaşılamayabilir. )
Primary
database ‘i;
select name,
controlfile_type, open_mode, protection_mode,
protection_level, database_role, switchover_status,
dataguard_broker, guard_status, current_scn, db_unique_name,
fs_failover_status
from v$database
NAME CONTROLFILE_TYPE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE SWITCHOVER_STATUS DATAGUARD_BROKER GUARD_STATUS CURRENT_SCN
DB_UNIQUE_NAME
FS_FAILOVER_STATUS
--------- ----------------
-------------------- -------------------- -------------------- ----------------
-------------------- ---------------- ------------ -----------
------------------------------ ----------------------
DG1 CURRENT READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PRIMARY TO STANDBY ENABLED NONE 890056 dg1 DISABLED
1 row selected
Standby
database ‘i;
select name,
controlfile_type, open_mode, protection_mode,
protection_level,
database_role, switchover_status,
dataguard_broker, guard_status, current_scn, db_unique_name,
fs_failover_status
from v$database
NAME CONTROLFILE_TYPE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE SWITCHOVER_STATUS DATAGUARD_BROKER GUARD_STATUS CURRENT_SCN
DB_UNIQUE_NAME
FS_FAILOVER_STATUS
--------- ----------------
-------------------- -------------------- -------------------- ----------------
-------------------- ---------------- ------------ -----------
------------------------------ ----------------------
DG1 STANDBY READ ONLY WITH APPLY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED ENABLED NONE 890091 dg2 DISABLED
1 row selected
Switchover öncesi durumlarınıda baktıkdan sonra,
operasyona başlayabiliriz ;
İlk denememde aşağıdaki gibi bir hata aldım.
Hatayı dg2 instance’ ını başarıyle primary yaptıkdan sonra dg1’ i
standby’ a
dönüştürürken verdi, hata mesajı ve logu aşağıdaki gibi,
DGMGRL> switchnover to dg2;
Unrecognized command "switchnover", try
"help"
DGMGRL> switchover to dg2
Performing switchover NOW, please wait...
New primary database "dg2" is
opening...
Operation requires shutdown of instance
"dg1" on database "dg1"
Shutting down instance "dg1"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance
"dg1" on database "dg1"
Starting instance "dg1"...
Unable to connect to database
ORA-12545:
Connect failed because target host or object does not exist
Failed.
Warning: You are no longer connected to ORACLE.
Please complete the following steps to finish
switchover:
start up instance "dg1" of database "dg1"
DGMGRL>
Hatayı biraz araştırdıkdan sonra problemin
sunucuların hostlarında karşılıklı olarak ip ve hostname’ leri olmadığından
verdiğini gördüm, karşılıklı olarak ip ve host’ ları /etc/hosts dosyasına
ekledikden sonra (root userı ile eklenmesi gerekiyor) tekrar denedim ;
DGMGRL> switchover to dg2
Performing switchover NOW, please wait...
New primary database "dg2" is
opening...
Operation requires shutdown of instance
"dg1" on database "dg1"
Shutting down instance "dg1"...
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance
"dg1" on database "dg1"
Starting instance "dg1"...
ORACLE instance started.
Database mounted.
Database opened.
Switchover
succeeded, new primary is "dg2"
DGMGRL>
Hatasız olarak swicth operasyonunu
tamamladık. Şu anda artık primary database’ imiz dg2 oldu, standby sunucumuz da
dg1 oldu. Kontrol edelim ;
Dg1 üzerinde ;
select name,
controlfile_type, open_mode, protection_mode,
protection_level, database_role, switchover_status,
dataguard_broker, guard_status, current_scn, db_unique_name,
fs_failover_status
from v$database
NAME CONTROLFILE_TYPE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE SWITCHOVER_STATUS DATAGUARD_BROKER GUARD_STATUS CURRENT_SCN
DB_UNIQUE_NAME
FS_FAILOVER_STATUS
--------- ----------------
-------------------- -------------------- -------------------- ----------------
-------------------- ---------------- ------------ -----------
------------------------------ ----------------------
DG1 STANDBY READ ONLY WITH APPLY MAXIMUM
PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED ENABLED NONE 887698 dg1 DISABLED
1 row selected
Dg1’ in artık Standby
olduğunu doğruladık. Dg2’ yi kontrol
edelim ;
select name,
controlfile_type, open_mode, protection_mode,
protection_level, database_role, switchover_status,
dataguard_broker, guard_status, current_scn, db_unique_name,
fs_failover_status
from v$database
NAME CONTROLFILE_TYPE OPEN_MODE PROTECTION_MODE PROTECTION_LEVEL DATABASE_ROLE SWITCHOVER_STATUS DATAGUARD_BROKER GUARD_STATUS CURRENT_SCN
DB_UNIQUE_NAME
FS_FAILOVER_STATUS
--------- ----------------
-------------------- -------------------- -------------------- ----------------
-------------------- ---------------- ------------ ----------- ------------------------------
----------------------
DG1 CURRENT READ WRITE MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PRIMARY TO STANDBY ENABLED NONE 887765 dg2 DISABLED
1 row selected
Read write, database rolü
primary olarak çalışmakta, şimdide dg2 üzerinde yapılan bir değişikliğin dg1’ e
yansıyıp yansımadığını kontrol edelim (dikkat ettiyseniz switcover dışında
hiçbirşey yapmadık yani rollerin değişimi operasyonunu dgmgrl kendisi yapıyor
ve diğer tarafda );
Dg2’ de tablo create
ediyorum ;
create table deneme4 as
select * from tab
Table created
Dg1’ de select ediyoruz,
bakalım bu tarafa yansıdımı ;
select count(*) from
deneme4
COUNT(*)
----------
4653
1 row selected
Herşey çalışıyor J
Sanırım tüm adımlar
üzerinden geçmiş olduk, umarım faydalı olmuştur.
Kamil TÜRKYILMAZ
www.kamilturkyilmaz.com
Kamil TÜRKYILMAZ
www.kamilturkyilmaz.com
Hiç yorum yok:
Yorum Gönder