DATAGUARD SWITCHOVER (SQL*PLUS & DGMGRL)

SWITCHOVER

Data Guard yapılandırmasında, planlı bir şekilde rol değişimi yapmaya Switchover diyoruz, yani primary db. artık standby db. oluyor , standby db. ise primary db. haline geliyor.

Primary tarafta bakım işlemleri için (RAM Değiştirme, local disk değiştirme vb.), FKM testlerini geçekleştirmek için, vb. Switchover işlemi yapılır, işlem Enterprise Manager Cloud Control üzerinden, Data Guard Broker (dgmgrl) üzerinden ve Sql*Plus üzerinden gerçekleştirilebilir.

Burada Sqlplus ve dgmgrl üzerinden switover işlemi yaparak kontrollerini gerçekleştireceğiz.

Bir önceki yazıda 2 adet 2 nodlu RAC veritabanını Data Guard olarak konfigurasyonunu yapmıştık. https://www.farukcevik.com.tr/primary-rac-standby-rac-dataguard-configuraton-oracle19c-data-guard-broker-setting/

ROLEDB_UNIQUE_NAMEOracle Service NameInstances
Primaryfrkdbfrkdbfrkdb1, frkdb2
Standbysfrkdbsfrkdbdgfrkdb1,dgfrkdb2

Öncelikle Sql*plus ile Switchover işlemini yapalım;

Primary taraftaki tüm logların archiveloga dönüşüp sonrasında DB üzerinden taşınması için logswitch işlemini yapalım sonra switchover durumunu kontrol edelim;

SQL> alter system switch logfile;

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO STANDBY

Artık primary veritabanımızı standby olarak switch edelim;

SQL> alter database commit to switchover to physical standby with session shutdown;

Database altered.

[[email protected] ~]$ srvctl stop database -d frkdb
[[email protected] ~]$ srvctl start database -d frkdb -o mount

Standby tarafını Primary yapalım;

SQL> select switchover_status from v$database;

SWITCHOVER_STATUS
--------------------
TO PRIMARY

SQL> alter database commit to switchover to primary with session shutdown;

Database altered.

[[email protected] ~]$ srvctl stop database -d sfrkdb
[[email protected] ~]$ srvctl start database -d sfrkdb

Artık eski primary veritabanımız standby oldu orada mrp prosesini çalıştıralım; (frkdb)

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT

Yeni primary veritabanımızı kontrol edelim;

SQL> SELECT DATABASE_ROLE, OPEN_MODE, SWITCHOVER_STATUS
 FROM V$DATABASE;  2

DATABASE_ROLE    OPEN_MODE            SWITCHOVER_STATUS
---------------- -------------------- --------------------
PRIMARY          READ WRITE           TO STANDBY

DATA GUARD BROKER İLE SWITCHOVER

Switchover işlemini DGMGRL ile de yapabiliriz.

Eğer sql*plus ile bir rol değişimi yaptıysanız sonrasında dgmgrl ile baktığınızda şöyle bir hata alırsınız;

DGMGRL> show configuration

Configuration - dg_config

  Protection Mode: MaxPerformance
  Members:
  frkdb  - Primary database
    Error: ORA-16810: multiple errors or warnings detected for the member


    sfrkdb - Physical standby database
      Error: ORA-16816: incorrect database role

Fast-Start Failover:  Disabled

Configuration Status:
ERROR   (status updated 71 seconds ago)

DGMGRL> show database sfrkdb

Database - sfrkdb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      (unknown)
  Apply Lag:          (unknown)
  Average Apply Rate: (unknown)
  Real Time Query:    OFF
  Instance(s):
    dgfrkdb1 (apply instance)
    dgfrkdb2

  Database Error(s):
    ORA-16816: incorrect database role

Database Status:
ERROR

DGMGRL> show database 'frkdb'

Database - frkdb

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    frkdb1
      Warning: ORA-16715: redo transport-related property LogXptMode of member "sfrkdb" is inconsistent

    frkdb2
      Warning: ORA-16715: redo transport-related property LogXptMode of member "sfrkdb" is inconsistent

  Database Error(s):
    ORA-16816: incorrect database role
    ORA-16816: incorrect database role


Database Status:
ERROR

Bu hatayı alıyorsanız dgmgrl konfigürasyonunu kaldırıp tekrar oluşturun; kaldırıp tekrar oluşturma adımları aşağıda göterilmektedir.

DGMGRL> remove configuration
DGMGRL> create configuration 'dg_conf' as primary database is 'sfrkdb' connect identifier is 'sfrkdb';
DGMGRL> add database 'frkdb' as connect identifier is 'frkdb';
DGMGRL> enable configuration;

Kontrol edelim

DGMGRL> show configuration

Configuration - dg_conf

  Protection Mode: MaxPerformance
  Members:
  sfrkdb - Primary database
    frkdb  - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 58 seconds ago)


DGMGRL> show database frkdb

Database - frkdb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON

  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 3.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    frkdb1 (apply instance)
    frkdb2

Database Status:
SUCCESS

DGMGRL> show database sfrkdb

Database - sfrkdb

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    dgfrkdb1
    dgfrkdb2

Database Status:
SUCCESS

Şimdi dgmgrl ile switchover işlemini yapalım;

Çok kolay tek satırlık bir komut; Bütün açma kapama mount moda alma hepsini bizim için broker yapıyor olacak, Fakat öncesinde kontrolleri ayaplım;

DGMGRL> validate database 'frkdb'

  Database Role:     Physical standby database
  Primary Database:  sfrkdb

  Ready for Switchover:  Yes
  Ready for Failover:    Yes (Primary Running)

  Flashback Database Status:
    sfrkdb:  Off
    frkdb :  Off

  Managed by Clusterware:
    sfrkdb:  YES
    frkdb :  YES

  Log Files Cleared:
    sfrkdb Standby Redo Log Files:  Cleared
    frkdb Online Redo Log Files:    Not Cleared
    frkdb Standby Redo Log Files:   Available


DGMGRL> validate database sfrkdb

  Database Role:    Primary database

  Ready for Switchover:  Yes

  Flashback Database Status:
    sfrkdb:  Off

  Managed by Clusterware:
    sfrkdb:  YES

Artık switchover komutunu verebiliriz;

DGMGRL> switchover to frkdb