
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/
ROLE | DB_UNIQUE_NAME | Oracle Service Name | Instances |
Primary | frkdb | frkdb | frkdb1, frkdb2 |
Standby | sfrkdb | sfrkdb | dgfrkdb1,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.
[oracle@dbnode2 ~]$ srvctl stop database -d frkdb
[oracle@dbnode2 ~]$ 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.
[oracle@dgnode1 ~]$ srvctl stop database -d sfrkdb
[oracle@dgnode1 ~]$ 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
Bir yanıt yazın