Tek instance çalışan veritabanının erişebilirliğini artırmak için DataGuard (primary – standby) yapısına geçmeye karar verdik. Mevcutta
çalışan ve SID i erp olan veritabanına “erpsby” yi ekleyeceğiz.
ADIM_1
Primary DB ArchiveLog Moda alınır
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!mkdir /Oracle/ArcLog !mkdir /Oracle/ArcLog alter system set log_archive_dest_10='LOCATION=/Oracle/ArcLog' scope=spfile; alter system set log_archive_format='arch_%d_%t_%r_%s.log' scope=spfile; shutdown immediate startup mount alter database archivelog; alter database open; Kontrol edelim. select log_mode from v$database; select archiver from v$instance; archive log list; |
ADIM_2
Stanby veritabanının klasik oracle yüklemesi gibi yapılır (primary veritabanı ile aynı klasör dizinleri kullanılmalı) Veritabanı
oluşturulmadan sadece yazılım kurulmalı (software only seçilerek kurulum yapılacak sonrasında netca ile listener oluşurulur.)
ADIM_3
/home/oracle/.bash_profile dosyalarını düzenliyoruz.
PRIMARY DB
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ORACLE_HOSTNAME=adb.sysdba.org; export ORACLE_HOSTNAME ORACLE_UNIQNAME=erpprm; export ORACLE_UNIQNAME ORACLE_BASE=/Oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/11G; export ORACLE_HOME ORACLE_SID=erp; export ORACLE_SID PATH=$ORACLE_HOME/bin:$PATH; export PATH PATH=/usr/sbin:$PATH; export PATH |
STANDBY DB
1 2 3 4 5 6 7 8 9 10 11 12 13 |
ORACLE_HOSTNAME=sdb.sysdba.org; export ORACLE_HOSTNAME ORACLE_UNIQNAME=erpsby; export ORACLE_UNIQNAME ORACLE_BASE=/Oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/11G; export ORACLE_HOME ORACLE_SID=erp; export ORACLE_SID PATH=$ORACLE_HOME/bin:$PATH; export PATH PATH=/usr/sbin:$PATH; export PATH |
ADIM_4
/etc/hosts dosyasını düzenliyoruz. Aşağıdaki iki satırı ekliyoruz. (her iki sunucuda da)
1 2 3 |
192.168.137.100 adb.sysdba.org adb 192.168.137.105 sdb.sysdba.org sdb |
ADIM_5
PRIMARY DB
“Force logging” özelliğini etkinleştiriyoruz.
1 |
alter database force logging; |
ADIM_6
PRIMARY DB
1 |
scp /Oracle/11G/dbs/orapwerp sdb:/Oracle/11G/dbs/ |
ADIM_7
PRIMARY DB de
/Oracle/11G/network/admin/tnsnames.ora
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ERPPRM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = adb)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = erpprm) ) ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ERPSBY = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = sdb)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = erpsby) ) ) |
StandBY DB ye gönderiyoruz
1 |
scp /Oracle/11G/network/admin/tnsnames.ora sdb:/Oracle/11G/network/admin/ |
ADIM_8
STANDBY DB de
1 2 3 4 5 6 7 8 9 10 11 12 13 |
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = sdb.sysdba.org)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ADR_BASE_LISTENER = /Oracle SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = erpsby) (ORACLE_HOME = /Oracle/11G) (SID_NAME = erp) ) ) |
1 2 3 |
lsnrctl reload lsnrctl start |
ADIM_9
PRIMARY DB de
1 2 3 |
alter system set service_names=’erpprm’ scope=both; alter system set DB_UNIQUE_NAME=’erpprm’ scope=spfile; |
1 |
show parameter service |
NAME TYPE VALUE
——————— ———– ———–
service_names string erpprm
1 2 3 |
shutdown immediate; startup; |
ADIM_10
STANDBY DB de
vi /Oracle/11G/dbs/initerp.ora ile yeni dosya oluşturulup.
select name from v$controlfile –sorgusu ile lokasyonlar öğrenilir.
1 2 3 |
DB_NAME=ERP CONTROL_FILES=’/Oracle/oradata/erp/control01.ctl’,’ /Oracle/fast_recovery_area/erp/control02.ctl’ |
ADIM_11
STANDBY DB
Klasörler oluşturulur.
1 2 3 4 5 6 7 |
mkdir -p /Oracle/fast_recovery_area/erp mkdir -p /Oracle/admin/erp/adump mkdir -p /Oracle/oradata/erp mkdir -p /Oracle/ArcLog |
ADIM_12
PRIMARY DB de
vi /home/oracle/CreateStandbyDB.rcv –adında bir rman script oluşturulup aşağıdakiler eklenir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET DB_UNIQUE_NAME='erpsby' SET LOG_ARCHIVE_DEST_2='SERVICE=erpprm LGWR SYNC AFFIRM REGISTER VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)' Set STANDBY_FILE_MANAGEMENT='AUTO' SET FAL_SERVER='erpprm' SET FAL_CLIENT='erpsby' SET CONTROL_FILES=’/Oracle/oradata/erp/control01.ctl’,’ /Oracle/fast_recovery_area/erp/control02.ctl’ NOFILENAMECHECK; |
ADIM_13
STANDBY DB de
nomount modda açılır.
1 2 3 |
sqlplus / as sysdba startup nomount |
ADIM_14
PRIMARY DB de
standby db yi rman dublicate ile oluşturuyoruz.
rman target / auxiliary sys/sys@erpsby cmdfile=/home/oracle/CreateStandbyDB.rcv log=/home/oracle/Log_CreateStandbyDB.log
To view the operations as they execute: tail -f /home/oracle/Log_CreateStandbyDB.log
bu işlem sırasında
tail -f /home/oracle/Log_CreateStandbyDB.log –ile olup biteni izleyebilirsiniz.
hata ile karşılanırsa.
tnsping erpsby ile test edebilirsiniz. Tekrar rman komutunu çalıştırmanız gerekirse standby db de /Oracle/11G/dbs/ dizinine oluşturulmuş
spfileerp.ora yı silmeniz gerekebilir.
ADIM_15
PRIMARY DB de
1 2 3 |
alter system set fal_server='erpsby' scope=both; alter system set fal_client='erpprm' scope=both; |
Primary db de yapılan değişikliklerin stanby db ye senkron olması için
1 2 3 |
alter system set standby_file_management=AUTO scope=both; alter system set LOG_ARCHIVE_DEST_10='LOCATION=/Oracle/ArcLog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=erpprm'; |
Eğer db_recovery_file_dest kullanıldı ise
1 |
alter system set LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=erpprm'; |
RedoLog ların taşınacağı stanby db nin belirtilmesi
ADIM_16
STANBBY DB De
1 2 3 4 5 6 7 8 9 10 11 12 13 |
shutdown immediate; startup alter database add standby logfile group 4 size 100m; alter database add standby logfile group 5 size 100m; alter database add standby logfile group 6 size 100m; alter database add standby logfile group 7 size 100m; alter database recover managed standby database using current logfile disconnect; |
Kontrol
1 2 3 4 5 |
!ps -ef | grep mrp oracle 471268 1 0 10:51:16 - 0:02 ora_mrp0_erp oracle 475150 270568 1 11:02:47 pts/0 0:00 grep mrp |
ADIM_17
PRIMARY DB de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
shutdown immediate; startup mount alter database add standby logfile group 4 size 100m; alter database add standby logfile group 5 size 100m; alter database add standby logfile group 6 size 100m; alter database add standby logfile group 7 size 100m; alter database set standby database to maximize availability; alter database open; |
ADIM_18
STANBY DB de
alter database open ;
1 2 3 4 5 6 7 8 9 |
SELECT open_mode FROM V$DATABASE;select SWITCHOVER_STATUS,PROTECTION_MODE,DATABASE_ROLE from v$database; Select Status, Error from v$Archive_dest ; select protection_mode from v$database; select SWITCHOVER_STATUS,OPEN_MODE from v$database ; SELECT name, value, datum_time, time_computed FROM V$DATAGUARD_STATS WHERE name like 'apply lag' --the difference should be less than 30 seconds; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
select loggroup.GROUP#, loggroup.SEQUENCE#, loggroup.archived, loggroup.status, logdetail.typefrom v$log loggroup join v$logfile logdetail on loggroup.GROUP# = logdetail.GROUP#; -- select loggroup.GROUP#, loggroup.SEQUENCE#, loggroup.archived, loggroup.status, logdetail.type from v$standby_log loggroup join v$logfile logdetail on loggroup.GROUP# = logdetail.GROUP#; |
In the Standby DB
1 |
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; |
In the Primary DB
1 |
ALTER SYSTEM SWITCH LOGFILE; |
In the Standby DB
1 |
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; |
Stanby db açıldıktan sonra kullanılması gereken komut;
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; |
Example:
Örnek:
ADIM_1
1 2 3 4 5 |
SELECT open_mode FROM V$DATABASE;OPEN_MODE -------------------- READ ONLY |
ADIM_2
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; |
ADIM_3
1 2 3 4 5 |
SELECT open_mode FROM V$DATABASE;OPEN_MODE -------------------- READ ONLY WITH APPLY |
Primary veritabanını, standby, stanby veritabanını primary yapacağız. (adb -> standby, sdb->primary olacak)
ADIM_1
primary database geçişi hazır olup olmadıgı kontrol edilir. “Session active” veya “to primary” olması gerekir.
1 2 3 4 5 |
SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS ----------------- TO STANDBY |
ADIM_2
PRIMARY DB de
1 |
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; |
ADIM_3
PRIMARY DB de (standby moda alınacak primary), kapatılıp mount modda açılır.
1 |
SHUTDOWN ABORT; STARTUP MOUNT; |
ADIM_4
STANDBY DB de (Primari olacak standby db) statusu TO PRIMARY or SESSIONS ACTIVE olmalı
1 2 3 4 5 |
SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS ----------------- TO_PRIMARY |
ADIM_5
standby db yi primary primari ye dönüştürmek için.
STANDBY DB de (Primari olacak standby db)
1 |
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN |
ADIM_6
PRIMARY DB (yeni) açılır.
1 |
ALTER DATABASE OPEN; |
ADIM_7
STANDBY DB de (yeni) redolog ları uygulaması için.
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; |
ADIM_8
STANDBY DB (yeni)
1 |
alter database open |
–eğer hata alınırsa
–ORA-10456: cannot open standby database; media recovery session may be in progress
1 |
alter database recover managed standby database cancel;alter database open ; |
–Tekrar- eski haline döndürülmek istenirse
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; |
Primary sunucu Erişilemez duruma geldi ise StandBy DB, Primary ye çevrilir. Arızalanan Primary DB yi tekrar standby ye çevirmek için en
baştan ayarların yapılması gerekir.
(target_db_name standbydb unique ismi)
ADIM_1
arızalanan PRIMARY sunucu mount modda açılabiliyorsa, standby a gönderilememiş archive ları göndermek için,
(target_db_name standbydb unique ismi)
1 |
ALTER SYSTEM FLUSH REDO TO target_db_name; |
güncel archived dosyaların oldugu kontrol edilir.
1 |
SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG; |
Eğer Primari sunucuya erişilebiliyorsa ve standby db (primary olacak stanby db) de olmayan archived loglar var ise bunlar standby db ye
kopyalanır ve
1 |
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'; |
ile sisteme kayıt edilir
1 |
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP; |
eğer
1 |
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE# |
———- ————- ————–
1 90 92
örnekteki gibi eksik archived redo varsa primari olacak standby db ye kopyalanıp
1 |
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'; |
ile kayıt edilir.
ADIM_2
PRIMARY DB de (pri db olacak sby da ) redo apply durdurulur.
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; |
Eğer bu hatası geçilirse ADIM_3 geçilir. Eğer hata verirse archivelogların kayıt işlemine devame edilir. Hata mesajı devam ediyorsa ve
giderilemiyorsa veri kaybı ile yola devam etmek için
1 |
ALTER DATABASE ACTIVATE PHYSICAL STANDBY DATABASE; |
ADIM_3
STANDBY DB de (primari olacak standby db), hazır olup olmadıgı kontrol edilir.
SELECT SWITCHOVER_STATUS FROM V$DATABASE;
1 |
SELECT SWITCHOVER_STATUS FROM V$DATABASE; |
SWITCHOVER_STATUS
—————–
TO PRIMARY
ADIM_4
STANDBY DB primary DB ye çevirilir.
1 |
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; |
alter database open
ADIM_5
Ortamdaki diğer STANDBY DB lerde
1 |
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; |
İlk Primary sunucunuzu (adb.sysdba.org) , tekrar primary yapmak için; önce kurulum adımları izlenerek stanby yapılır sonrasında switchover
ile primary olarak değiştirilir. ” LOG_ARCHIVE_DEST” güncellemek gerekebiliyor.
It may be necessary to update “LOG_ARCHIVE_DEST”.
Yararlanılan kaynaklar :
http://docs.oracle.com/cd/E11882_01/backup.112/e10642.pdf
http://www.troug.org/?page_id=42 (Uğur İnal)
Create Standby Database using 11g DUPLICATE FROM ACTIVE DATABASE
Not : Bu makale hazırlanırken sadece open source yazılımlar kullanılmıştır ( ücretsiz, açık kaynak kodlu yazılımlar) ;
Host makine işletim sistemi Ubuntu 11.10 X64
Sanal Makine yazılımı VirtualBox 4.1.2
Dizayn Dia
Text editör Gedit&Open ofis
RMAN ile farklı...
12 Mart 2019