Bu kurulum hem sun solaris 10 hem de OEL (Oracle Linux Server release 6.4) üzerine oracle 11.2.0.2 binary leriyle gerçekleştirildi. Makalede solarisi baz almaya çalıştım ama linux tarafından da eklemeler oldu. Kuruluma geçmeden önce tüm makaleyi okumanızı tavsiye ederim. Eğer single instance tan single instance a data guard ve RAC kurulumları yaptı iseniz adımlar daha kolay gelecektir. Eksik ya da yanlış olan yerleri bildirirseniz sevinirim.
Bu makale aşağıdaki bölümlere sahiptir:
- Primary Database’ deki Adımlar
- Standby Database’ deki Adımlar
- DataGuard durumunu kontrol etmek için sorgular
- DataGuard Broker Yapılandırması
- SWITCHOVER yapmak için
- Protectıon Mode
- Shutdown standby database
- Startup standby database
- Errors & Solutions
PRIMARY |
STANDBY |
|
Hostname/s |
dbk01, dbk02 | stddbk |
Database Name |
mx |
mx |
Database Unique Name |
mx |
stdmx |
Net Service Name |
mx.sysdba.org |
stdmx.sysdba.org |
Clusterware |
11g R2 Grid Infrastructure (11.2.0.2) |
11g R2 Grid Infrastructure (11.2.0.2) |
Cluster Nodes |
node1, node2 (2-node RAC) |
Single instance |
SCAN |
mx-scan |
– |
SCAN listener Host/port |
SCAN VIPs (port 1521) |
|
DB Instances |
mx1, mx2 | stdmx |
DB STORAGE |
ASM | ASM |
File Management |
||
ASM diskgroup for DB files |
DATA | DATA |
ASM diskgroup for recovery files |
FRA | FRA |
GRID_HOME |
/u01/11.2.0/grid | /u01/11.2.0/grid |
ORACLE_HOME |
/u01/app/oracle/product/11.2.0/db_1 | /u01/app/oracle/product/11.2.0/db_1 |
OS |
SUN 10u10 | SUN 10u10 |
RDBMS Version |
11.2.0.2 | 11.2.0.2 |
Grid Version |
11.2.0.2 | 11.2.0.2 |
– Standby Server (Grid Inf., stand alone server, kurulur. Asmca ile DATA ve FRA disk gruplari oluşturulur.)
– RDBMS software only olarak kurulur. (database oluşturulmaz)
– Primary de redologlarin DATA ve FRA’ da olmak üzere her grubun 2 üyesi oldugu kontol edilir yok ise eklenir.
Kurulumda kullanılan .bash_profile/.profile, listener.ora, tnsnames.ora ve başlangıç parametre (pfile) dosyalarını linkinden indirebilirsiniz.
oracle ve grid kullanıcılarının hangi gruplara dahil edildiği önemli maalesef guide larda yanlışlık ya da bug dan kaynaklı sorunlar olabiliyor. Bu kurulumda grup üyelikleri aşağıdaki gibiydi.
1 2 3 4 |
dba::101:oracle,grid asmadmin::102:grid asmdba::103:grid,oracle asmoper::104:grid |
Primary Database’ deki Adımlar
Adım 1: Primary DB archivelog moda alınır.
1 2 3 4 5 6 |
archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 407 Current log sequence 408 |
1 2 3 |
set linesize 1200 col member format a70 select * from v$logfile; |
1 2 |
column member format a50 select f.member,l.bytes/1024/1024 as "Size in MB" from v$log l,v$logfile f where l.group#=f.group#; |
1 2 3 4 |
alter system set db_recovery_file_dest_size=40g scope=both sid='*'; alter system set db_recovery_file_dest='+fra' scope=both sid='*'; alter system set log_archive_dest_1='location=+fra' scope=both sid='*'; alter system set log_archive_format='arch_%t_%s_%r.arc' scope=spfile; |
Tüm instancelar srvctl ile kapatılır
1 |
$ srvctl stop database -d mx |
1 2 3 |
$ sqlplus "/ as sysdba" startup mount |
1 2 |
alter database archivelog; shutdown immedite |
DB’ leri açalım
1 |
$ srvctl start database -d mx |
Kontrol edelim
1 |
archive log list |
Adım 2: Enable Force Logging. (fast start fail over kullanılacaksa) ve servis tanimlanir.
1 |
alter database force logging; |
1 |
alter system set service_names='mx,mx.sysdba.org' scope=both sid='*'; |
Adım 3: Standby Redo log ları oluşturalım.
StandBY redolog ları aşağıdaki gibi alies ile yapmayın. ASM kullanılan yerlerde bu şekilde (+FRA/mx/onlinelog/STDredo030b.log) ne online redo log ne de standby redo logları alias ile oluşturmayın. Aslında izin de vermemesi lazım madem tavsiye etmiyor.
Ek olarak üye de oluşturmamakta fayda var performans için.
Her nodda 2 adet redo log var, her nod icin, nod sayisinin bir fazlasi ini olusturuyoruz (yedekli olarak).
1 2 3 4 |
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 30 ('+DATA/mx/onlinelog/STDredo030a.log','+FRA/mx/onlinelog/STDredo030b.log') SIZE 100m, GROUP 40 ('+DATA/mx/onlinelog/STDredo040a.log','+FRA/mx/onlinelog/STDredo040b.log') SIZE 100m, GROUP 50 ('+DATA/mx/onlinelog/STDredo050a.log','+FRA/mx/onlinelog/STDredo050b.log') SIZE 100m; |
1 2 3 4 |
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 60 ('+DATA/mx/onlinelog/STDredo060a.log','+FRA/mx/onlinelog/STDredo060b.log') SIZE 100m, GROUP 70 ('+DATA/mx/onlinelog/STDredo070a.log','+FRA/mx/onlinelog/STDredo070b.log') SIZE 100m, GROUP 80 ('+DATA/mx/onlinelog/STDredo080a.log','+FRA/mx/onlinelog/STDredo080b.log') SIZE 100m |
Bu şekilde oluşturulması gerekir.
1 2 3 4 |
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 5 SIZE 100M, GROUP 6 SIZE 100M, GROUP 7 SIZE 100M; |
1 2 3 4 |
ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 8 SIZE 100M, GROUP 9 SIZE 100M, GROUP 10 SIZE 100M; |
Not: DG kurulduktan sonra olusturulsa daha iyi olacak sanirim ikinci kurulumda denenecek,. (hem Primary da hem de standby da olusturulacak)
1 2 3 4 |
col member format a90 set lines 132 set trims on select group#,type,member from v$logfile; |
1 |
select bytes from v$log; |
1 |
select group#, member from v$logfile ; |
Adım 4: Password (orapw$instance_ismi) dosyalarını oluşturalım.(Password bütün makinelerde aynı olmalı).
Bütün nodlarda
1 2 3 |
orapwd file=$ORACLE_HOME/dbs/orapwstdmx password=0racle ignorecase=y force=y orapwd file=$ORACLE_HOME/dbs/orapwmx1 password=0racle ignorecase=y force=y orapwd file=$ORACLE_HOME/dbs/orapwmx2 password=0racle ignorecase=y force=y |
–ignore case is important parameter here since from 11gR2 onwards passwords are case-sensitive
PING[ARC2]: Heartbeat failed to connect to standby ‘mx’. Error is 16191.
Error 1017 received logging on to the standby
These are common errors associated with password files. If you encounter the above errors, recreate the password files.
Adım 5: listener.ora dosyasına SID bilgileri girilir.(Bütün makinelerde standby lar dahil)
Primary (RAC-GRID HOME 2 node da da ayni)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))) # line added by Agent LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))) # line added by Agent LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))) # line added by Agent LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))) # line added by Agent ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON # line added by Agent ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON # line added by Agent ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON # line added by Agent ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON # line added by Agent #################################################### stdmx = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = stddbk.sysdba.org)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mx.sysdba.org) (ORACLE_HOME = /u01/11.2.0/grid) (SID_NAME = mx) ) (SID_DESC = (GLOBAL_DBNAME = stdmx.sysdba.org) (ORACLE_HOME= /u01/11.2.0/grid) (SID_NAME = stdmx) ) (SID_DESC = (GLOBAL_DBNAME = mx_DGMGRL) (ORACLE_HOME= /grid/11.2.0/grid) (SID_NAME = mx) ) (SID_DESC = (GLOBAL_DBNAME = stdmx_DGMGRL) (ORACLE_HOME= /u01/11.2.0/grid) (SID_NAME = stdmx) ) ) |
StandBY ve Primary de “lsnrctl status” de instance ların kayıtlı olduğu görülmeli. Gerekirse local_listener parametresi set edilip (alter local_listener ” / register)
(listener.ora ile oynamadan da çalışmıştı ?)
Adım 6: tnsnames.ora
Butun nodlarda ve stanby da
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mx = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = murex-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mx.sysdba.org) ) ) stdmx = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = stddbk.sysdba.org)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = stdmx.sysdba.org) ) ) |
1 2 3 4 5 6 7 8 |
$tnsping stdmx TNS Ping Utility for Solaris: Version 11.2.0.2.0 - Production on 25-APR-2013 18:33:54 Copyright (c) 1997, 2010, Oracle. All rights reserved. Used parameter files: Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = stddbk.sysdba.org)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = stdmx.sysdba.org))) OK (160 msec) |
Adım 7: init.ora Parametrelerini DataGuard için ayarlıyoruz (primary için)
Öncesinde yedek pfile oluşturulur. (bir kopyasi da standby a gonderilecek)
1 |
create pfile='/opt/oracle/stage/initprimary_bck.ora from spfile; |
1 2 3 4 5 6 7 8 9 10 11 |
alter system set log_archive_config='dg_config=(mx,stdmx)' scope=both sid='*'; alter system set log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=mx' scope=both sid='*'; alter system set log_archive_dest_2='service=stdmx LGWR SYNC AFFIRM max_failure=10 max_connections=5 reopen=180 valid_for=(online_logfiles,primary_role) db_unique_name=stdmx' scope=both sid='*'; alter system set log_archive_dest_state_1='enable' scope=both sid='*'; alter system set log_archive_dest_state_2='enable' scope=both sid='*'; alter system set fal_server='stdmx' scope=both sid='*'; alter system set fal_client='mx' scope=both sid='*'; alter system set log_archive_max_processes=10 scope=both sid='*'; alter system set standby_file_management='AUTO' scope=both sid='*'; alter system set db_file_name_convert='+DATA/STDMX/','+DATA/MX/' scope=spfile sid='*'; alter system set log_file_name_convert='+FRA/STDMX/','+FRA/MX/','+DATA/STDMX/','+DATA/MX/' scope=spfile sid='*'; |
Kapatıp açıp, güncel değerler kontrol edilir.
Full halini aynı dizinde primaryinit.ora_for_std.ora adinda
1 |
create pfile='/opt/oracle/stage/initprimary_for_std.ora from spfile; |
Bu pfile standby a gönderilip , düzenlemeler yapılacak
1 2 3 |
$vi /u01/app/oracle/product/11.2.0/db_1/dbs/initstdmx.ora --icerigi asagidaki gibi olmali SPFILE='+DATA/stdmx/spfilestdmx.ora' |
spfile’ ın nerede olduğunu adresliyor. Aksi halde spfile ı bulamadığı için DB’yi açamaz
Adım 8: RMAN backup için geçici “stage” dizini oluşturulur. Primary/standby (oracle kullanicisi ile)
1 2 3 |
$mkdir /opt/oracle/stage $chmod -R g+w /opt/oracle $mkdir -p /opt/oracle/stage |
Adım 9: Primary Database de Standby için rman yedek alıyoruz.
1 2 3 4 5 6 |
$rman target / backup device type disk format '/opt/oracle/stage/mx_%u' database plus archivelog; --Yer sıkıntısı ya da lokasyonlar arası erişim hızı düşükse sıkıştırılmış yedek alınabilir. backup as compressed backupset database format '/opt/oracle/stage/mx_dbf_%u_%t_%s.rman' plus archivelog format '/opt/oracle/stage/mx_arc_%d_%t_%s.rman' ; backup device type disk format '/opt/oracle/stage/mx_%u' current controlfile for standby; |
1 |
$scp /opt/oracle/stage/mx_* stddbk:/opt/oracle/stage/ |
Not : lokasyonlar arası erişim hızı düşük ise ve DB boyutu büyük ise rman backup ın alınıp karşı tarafa başka bir şekilde göndermek gerekebilir.
Table Space Yönetimi
12 Mart 2019