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ö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.

Be Sociable, Share!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


× 7 = kırk dokuz