6 Nisan 2011 Çarşamba

Data Guard Broker Konfigurasyonu ve Switchover Operasyonu


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

Hiç yorum yok: