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.
[[email protected] dbs]$ pwd
/u01/app/oracle/product/19.0.0.0/db/dbs
scp orapwfrkdb [email protected]:/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/[email protected] auxiliary sys/[email protected]@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
STANDBY DATABASE READ-ONLY OLARAK AÇMAK
Standby database Read-Only olarak açılabilir.
- Recovery iptal edilir
- Standby Read-Only olarak açılır
- Recovery tekrar başlatılır.
SQL> alter database recover managed standby database cancel;
Database altered.
SQL> alter database open read only;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
SQL> alter database recover managed standby database using current logfile disconnect;
Database altered.
Bir sonraki Data Guard yazımızda Standby Database türleri, switch işlemleri ve data guard yönetimi konularına değineceğiz.