DATA GUARD -2 (INSTALLATION 19C)

Eğer sadece verilerin güvenliği alınacak ise Standby sunucunu primary sunucusunda daha düşük özelliklerde ayarlayabiliriz, ancak bir hata durumunda standby sunucu primary veritabanının yerini alacaksa, production ortamının yükünü kaldırabilecek bir sunucu konfigürasyonu yapılmalıdır. Primary veritabanı ARCHIVELOG Modda olmalı, primary ve standby makinelerin COMPATIBLE parametreleri, versiyonları ve patchset seviyeleri aynı almalıdır.

Üç farklı yöntem ile Physical Standby Veritabanı kurabiliriz, Cloud Control ile, Data Guard Broker ile ve Sqlplus ile kurulum yapılabilir, ilk olarak sqlplus üzerinden rman duplicate yaparak bir standby kurulumu yapacağız.

Standby veritabanı için eğer ASM kullanıyorsak grid yazılımı kurulmuş olmalı, veritabanı ise Install Database Software olarak yani sadece veritabanı yazılımı kurulmuş olması gerekmektedir. Ayrıca Listener servisleri oluşturulmuş ve çalışıyor olması da gerekmektedir.

Öncelikle iki sunucumuzun da hosts dosyalarını düzenliyoruz.

vi /etc/hosts

150.150.100.135 dbm01stb.frkcvk         dbm01stb
150.150.100.121 dbm01.frkcvk            dbm01

Primary veritabanı makinesi ayarlanması;

  • Veritabanımız archivelog modda olmalı
  • Vertabanı bütün aktiveteleri loglamalı.
    • SQL> alter database force logging;
  • Standby veritabanımız için primary tarafından bir fazla logfile oluşturuyoruz.

ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 50M;

  • Hem primary hem de standby veritabanları için tnsnames.ora dosyalarını düzenliyoruz.

FRKDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbm01.frkcvk)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = frkdb)
    )
  )

frkdbstb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbm01stb.frkcvk)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = frkdbstb)
    )
  )

tnsping ile kontrol ediyoruz sorun yoksa devam ediyoruz.

  • Standby tarafında grid kurulumundaki listeneri silip db değişkenleri ile yeni bir listener oluşturuyoruz ve listener.ora dosyasını düzenliyoruz.
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = dbm01stb.frkcvk)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = frkdbstb)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0.0/db)
      (SID_NAME = frkdb)
      (ENVS="TNS_ADMIN=/u01/app/oracle/product/19.0.0.0/db/network/admin")
    )
  )
  • Standby veritabanında $ORACLE_BASE/admin/$ORACLE_SID/adump dizinini oluşturmamız gerekiyor duplicate kısmında hata alırız.
  • Primary veritabanının password dosyası standby tarafına kopyalanır.
[oracle@dbm01 dbs]$ pwd
/u01/app/oracle/product/19.0.0.0/db/dbs

scp orapwfrkdb oracle@150.150.100.135:/u01/app/oracle/product/19.0.0.0/db/dbs/
  • Parametrelerimiz set ediyoruz. Bu parametrelerin ne anlama geldiği Data Guard mimarisi yazsısında anlatıldı, bu parametreleri siz kendi senaryonuza göre konfigüre etmelisiniz.
SQL> alter system set log_archive_config='DG_CONFIG=(frkdb,frkdbstb)';

SQL> alter system set log_archive_dest_2='SERVICE=frkdbstb ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=frkdbstb' SCOPE=both;

SQL> alter system set LOG_ARCHIVE_DEST_1='LOCATION=/data/ARCH/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=frkdb' SCOPE=both;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
SQL>  alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;

SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;

SQL> ALTER SYSTEM SET fal_server=’frkdbstb’ SCOPE=both;

SQL> alter system set FAL_CLIENT='frkdb' SCOPE=both;

SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=both;

Standby veritabanında boş bir pfile oluşturuyor ve içerisine sadece aşağıdakileri ekliyoruz gerisini RMAN bizim için zaten yapacak.

vi /u01/app/oracle/product/19.0.0.0/db/dbs/initfrkdb.ora
*.db_name='frkdb'
*.DB_UNIQUE_NAME='frkdbstb'

Stndby veritabanımız nomount modda açıyoruz

sqlplus / as sysdba
SQL> startup nomount

Primary veritabanında RMAN üzerinden duplicate işlemini yapacak olan scripti hazırlayalım

vi /home/oracle/dataguard_duplicate

 run{
allocate channel prmy1 type disk;
allocate channel prmy2 type disk;
allocate channel prmy3 type disk;
allocate channel prmy4 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby from active database
spfile
 parameter_value_convert 'FRKDB','FRKDBSTB'
 set db_unique_name='FRKDBSTB'
 set log_archive_max_processes='5'
 set fal_server='FRKDB'
 set standby_file_management='AUTO'
 set log_archive_config='dg_config=(FRKDB,FRKDBSTB)'
 set log_archive_dest_2='service=FRKDB ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=FRKDB';
}

Primary veritabanına giderek RMAN üzerinden duplicate işlemini başlatıyoruz.

rman target sys/Syspass@frkdb auxiliary sys/Syspass@Syspass@frkdbstb;

Recovery Manager: Release 19.0.0.0.0 - Production on Sun Nov 1 15:25:22 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: FRKDB (DBID=666421844)
connected to auxiliary database (not started)

Duplicate işlemini başlatıyrouz

RMAN> @dataguard_duplicate.sql

--başarı ile duplicate edildi :))

Standby veritabanı için  MRP (Managed Recovery Process) process başlatılır ve logların işlemesini sağlanır.

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

Şimdi Data Guard sağlıklı çalışıyormu kontrol edelim.

Primary Veritabanında

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

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

Standby tarafında

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

DATABASE_ROLE    OPEN_MODE            SWITCHOVER_STATUS
---------------- -------------------- --------------------
PHYSICAL STANDBY MOUNTED              NOT ALLOWED

Primary tarafında

SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;

PROCESS   STATUS
--------- ------------
DGRD      ALLOCATED
ARCH      CLOSING
DGRD      ALLOCATED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CLOSING
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
LNS       OPENING

PROCESS   STATUS
--------- ------------
DGRD      ALLOCATED
LNS       WRITING

Standby tarafında

SQL> SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY;

PROCESS   STATUS
--------- ------------
RFS       IDLE
ARCH      CONNECTED
DGRD      ALLOCATED
DGRD      ALLOCATED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

PROCESS   STATUS
--------- ------------
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED
ARCH      CONNECTED

PROCESS   STATUS
--------- ------------
RFS       IDLE
MRP0      APPLYING_LOG
RFS       IDLE

Bir sonraki Data Guard yazımızda Standby Database türleri, switch işlemleri ve data guard yönetimi konularına değineceğiz.