primary RAC to single standby
參考文獻:
RAC+單實例DATAGUARD 配置 http://blog.csdn.net/miyatang/article/details/9979579
配置要點
rac為主時:
rac中的每個實例都需要配置傳輸日志
單節點為主時:
向rac中的其中一個節點傳輸日志
在rac中的其中一個節點上啟動MRP進程
創建standby redo log 日志組
RAC中的每個thread都需要創建對應的standby redo log。創建原則和單實例一樣:
--在主庫創建standbylogfile是便於發生角色轉換后備用?
--sandby redo log創建原則:?
--a)、確保standbyredo log的大小與主庫online redolog的大小一致???
--b)、如主庫為單實例數據庫:standbyredo log組數=主庫日志組總數+1?
--c)、如果主庫是RAC數據庫:standby redo log組數=(每線程的日志組數+1)*線程數?
--d)、不建議復用standbyredo log,避免增加額外的I/O以及延緩重做傳輸?
查看rac中聯機日志
SQL> select thread#,group#,members,bytes/1024/1024 from v$log;
THREAD# GROUP# MEMBERS BYTES/1024/1024
---------- ---------- ---------- ---------------
1 1 1 50
1 2 1 50
2 3 1 50
2 4 1 50
SQL> select GROUP#,STATUS,TYPE,MEMBER from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ------------------------------------------------------------
2 ONLINE +DATA/paydb/onlinelog/group_2.262.927484759
1 ONLINE +DATA/paydb/onlinelog/group_1.261.927484751
3 ONLINE +DATA/paydb/onlinelog/group_3.266.927485173
4 ONLINE +DATA/paydb/onlinelog/group_4.267.927485181
RAC有兩個redo thread,每個thread有兩個日志組,每個日志組有一個日志文件,文件大小為50M,所以要針對每個thread需要3組standby redo,大小為50M
創建6個日志組,每個日志組有一個日志文件
單實例standby:
alter database add standby logfile thread 1 group 5('/data0/u01/app/data/oradata/orcl11g/standby_redo05.log') size 50m;
alter database add standby logfile thread 1 group 6('/data0/u01/app/data/oradata/orcl11g/standby_redo06.log') size 50m;
alter database add standby logfile thread 1 group 7('/data0/u01/app/data/oradata/orcl11g/standby_redo07.log') size 50m;
alter database add standby logfile thread 2 group 8('/data0/u01/app/data/oradata/orcl11g/standby_redo08.log') size 50m;
alter database add standby logfile thread 2 group 9('/data0/u01/app/data/oradata/orcl11g/standby_redo09.log') size 50m;
alter database add standby logfile thread 2 group 10('/data0/u01/app/data/oradata/orcl11g/standby_redo10.log') size 50m;
primary rac下:
alter database add standby logfile thread 1 group 5 size 50M,group 6 size 50M ,group 7 size 50M ;
alter database add standby logfile thread 2 group 8 size 50M,group 9 size 50M ,group 10 size 50M ;
監聽配置
將10.100.211.250 db-scan 加入standby的hosts文件
靜態注冊監聽
standby:
[oracle@test02 admin]$ cat listener.ora
LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = 10.100.211.30)(Port = 1521))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl11g)
(ORACLE_HOME = /data0/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
rac已自動注冊了動態監聽,監聽scan-ip:1521,無需再靜態注冊(創建listener.ora文件)
rac兩節點和單節點standby上tnsname.ora一致
[oracle@test02 admin]$ cat tnsnames.ora
PAYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = paydb)
)
)
SIGDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.100.211.30)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl11g)
)
)
每個節點上檢查:
tnsping SIGDB
tnsping PAYDB
參數配置
數據文件目錄和歸檔日志文件目錄查看:
rac:
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 +DATA/paydb/datafile/system.256.927484413
2 +DATA/paydb/datafile/sysaux.257.927484413
3 +DATA/paydb/datafile/undotbs1.258.927484415
4 +DATA/paydb/datafile/users.259.927484415
5 +DATA/paydb/datafile/example.264.927484777
6 +DATA/paydb/datafile/undotbs2.265.927485095
7 +DATA/paydb/datafile/paybiz01.dbf
歸檔日志目錄:
log_archive_dest_1 string LOCATION=+DATA/archlog
standby 單節點
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 /data0/u01/app/data/oradata/orcl11g/system01.dbf
2 /data0/u01/app/data/oradata/orcl11g/sysaux01.dbf
3 /data0/u01/app/data/oradata/orcl11g/undotbs01.dbf
4 /data0/u01/app/data/oradata/orcl11g/users01.dbf
5 /data0/u01/app/oracle/product/11.2.0/dbhome_1/dbs/catlog01.d
bf
歸檔日志目錄:
log_archive_dest_1 string location=/data0/arch
primary rac上操作:
alter database force logging;
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(paydb,orcl11g)';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=SIGDB ASYNC LGWR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl11g';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
ALTER SYSTEM SET FAL_SERVER=SIGDB;
ALTER SYSTEM SET FAL_SERVER=PAYDB;
ALTER SYSTEM SET DB_FILE_NAME_CONVERT='/data0/u01/app/data/oradata/orcl11g/','+DATA/paydb/datafile/' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/data0/arch','+DATA/archlog' SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
在線創建物理備機
將primary的口令文件、參數文件scp到standby,並對參數文件進行修改,重命名為init$sid.ora
standby操作:
create spfile from pfile
startup nomount
rac上操作:
rman TARGET sys/oracle@PAYDB AUXILIARY sys/oracle@SIGDB
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE nofilenamecheck;
會在線備份數據文件、控制文件、tempfile、redo logfile恢復到從庫
創建完physical standby 后會自動啟動到mount
創建standby redo logfile
==========================
DG Broker
https://docs.oracle.com/cd/B28359_01/server.111/b28295/configure.htm#CFHICBJH
查看磁盤:
select dg.name,DGName, INSTANCE_NAME, DB_NAME,STATUS, from Gv$asm_diskgroup dg ;
用於管理dg的工具,會在所有的主備庫通過自己的DMON進程和配置文件進行通信,可以配置dg或管理已配置好的dg及監控dg狀態
支持primary和standby是單實例或rac,支持一主多從,從的個數上限是9個
會在主和從上啟動DMON進程,通過參數DG_BROKER_START 控制是否啟動dg broker,此參數默認是false,不啟動
broker的配置文件是二進制文件,有默認的路徑;允許有多份,通過指定參數DG_BROKER_CONFIG_FILEn來進行創建配置文件;如果是RAC環境,每個實例都要有Broker配置文件,放在共享存儲上;
配置DG Broker
SQL> show parameter broker;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string /data0/u01/app/oracle/product/
11.2.0/dbhome_1/dbs/dr1orcl02.
dat
dg_broker_config_file2 string /data0/u01/app/oracle/product/
11.2.0/dbhome_1/dbs/dr2orcl02.
dat
dg_broker_start boolean FALSE
SQL> alter system set dg_broker_config_file1='+DATA/dr1orcl11g.dat';
SQL> alter system set dg_broker_config_file2='+DATA/dr2orcl11g.dat';
開啟dg broker
SQL> alter system set dg_broker_start=true;
連接到主庫
DGMGRL> connect sys/oracle@PAYDB
創建配置文件
DGMGRL> help create
DGMGRL> CREATE CONFIGURATION primary AS PRIMARY DATABASE IS paydb CONNECT IDENTIFIER IS PAYDB;
Configuration "primary" created with primary database "paydb"
條件備庫配置
ADD DATABASE <database name> ====db_unique_name
[AS CONNECT IDENTIFIER IS <connect identifier>]
[MAINTAINED AS {PHYSICAL|LOGICAL}];
DGMGRL> ADD DATABASE orcl11g AS CONNECT IDENTIFIER IS SIGDB MAINTAINED AS PHYSICAL;
Database "orcl11g" added
DGMGRL> enable configuration;
===
rac 修改參數文件
如果我們直接使用: create pfile from spfile 命令穿件pfile,那么生成的pfile 文件將覆蓋原有$ORACLE_HOME/dbs 目錄下的pfile 文件。 而在之前的pfile文件里面值保留了一條指向spfile存放位置的記錄。 這樣修改之后,就會造成數據庫啟動時會因為找不到spfile文件而讀取本地的pfile文件,而不是共享設備上的spfile文件。這樣對參數管理上就會帶來麻煩,也帶來其他的隱患。
正確做法
SQL> create pfile='/data0/app/oracle/initpaydb.ora' from spfile;
修改后
SQL> create spfile='+DATA/paydb/spfilepaydb.ora' from pfile='/data0/app/oracle/initpaydb.ora'
主從(physical standby)切換:
switchover
原主庫會重啟成為新的備庫
為參與switchover的其他的備庫會接受並應用來自新的主庫的redo log
broker的行為:
主庫或備庫如果是rac,只會保證一個實例啟動,其他的實例均關閉,如果無法關閉則需要手工關閉
首先將主庫切換為備,將目標備庫切換為主
修改不broker的配置文件
重啟新備庫,應用redo,如果原主庫是rac,重啟在switchover之前關閉的實例
將新的主庫啟動到讀寫狀態,如果原備庫是rac,則重啟在switchover之前關閉的實例
failover
兩種模式complete和immediate,前者是在備庫應用完日志之后再進行切換,后者是直接切換
如果目標備庫是rac,broker將會指示CRS關閉除應用日志的實例之外的其他實例,如果關閉失敗,則需要手動關閉,然后再次執行難failover命令;
在failover期間不可以打開任何新的實例
broker會指示CRS重啟在failover前關閉的其他的實例
更改保護模式:
如果failover前的數據庫保護模式是maximum protection,則在failover后被重置為maximum performance
maximum protection:
在事務提交之前會保證將事務變更信息寫到online redo log,並保證同步到至少一個備庫上,保證數據0丟失
maximum performance:
在事務提交之前會將事務變更信息寫到online redo log 然后提交,然后再同步到從庫,主庫down掉后不能保證數據不丟失
DGMGRL> FAILOVER TO database-name [IMMEDIATE];