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önetebiliriz. 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 🙂
Sanırım tüm adımlar üzerinden geçmiş olduk, umarım faydalı olmuştur.