Oracle 11g Data Guard (physical standby - active dataguard) [final]
Oracle 11g Data Guard
與Production DB同一臺Server上建立Standby庫,production db的名稱為
test11g, Standby庫名為teststby . 使用RMAN duplicate來建立standby
系統。 透過DBCA已經建立了一個teststby的庫結構(作為standby DB)。
備註: 不同Server建立的話,可以建立相同DBNAME,SID的例項, 只是引數配置
時候db_unique_name 不同即可 。
1. 連線Produciton DB, 做RMAN 備份, 採用nocatalog方式 。
dbtest$mkdir backup
dbtest$rman target /
RMAN> backup device type disk format '/data/backup/%U' database plus archivelog ;
RMAN> backup device type disk format '/data/backup/%U' current controlfile for standby ;
2. 連線Standby DB, 複製備份集到相關目錄,這裡由於在同一個Server上,
也使用上面的備份目錄 /data/backup , 所以備份檔案不用複製。
3. 在Standby機器上tnsnames.ora中加入連線primary db的別名test11g, 用於RMAN
duplicate 在standby上恢復時候的遠端連線別名 .
TEST11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.161.24.133)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test11g)
)
)
4. 注意建立Standby需要保持primary與Standby庫中的sys使用者密碼一致,一般我們
可以複製orapwSID檔案,也可以重建一個orapwd, 注意這裡我們在同一個server上,
sid是不一樣的。 這裡為了方便,可以直接修改兩個庫的sys密碼。如果sys密碼不記得,
可以更改密碼,也可以乾脆兩庫都重建也行 。
$ orapwd file=orapwtest11g password=sys ignorecase=y
$ orapwd file=orapwteststby password=sys ignorecase=y
備註: 密碼不一樣或檔名問題可能導致後面redo傳輸不能成功 。
5. 由於primary及standby庫中的datafile檔案位置不一致,那麼我們需要對Standby庫
的spfile進行調整及引數配置,比如db_file_name_convert, log_file_name_convert。
Standby DB上的引數修改如下(其他相關引數在建立standby完畢後配置):
*.audit_file_dest='/u01/product/admin/teststby/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/data/teststby/control01.ctl','/u01/product/flash_recovery_area/teststby/control02.ctl'
*.db_block_size=16384
*.db_domain=''
*.db_name='test11g'
*.db_unique_name='teststby'
*.global_names=TRUE
*.db_recovery_file_dest='/u01/product/flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='/u01/product'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=teststbyXDB)'
*.log_archive_dest_1='LOCATION=/data/teststby/arch'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=209715200
*.processes=400
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=445
*.sga_target=629145600
*.undo_tablespace='UNDOTBS1'
*.standby_file_management='AUTO'
*.db_file_name_convert='/data/test11g/','/data/teststby/'
*.log_file_name_convert='/data/test11g/','/data/teststby/'
然後使之在standby庫上生效:
SQL> shutdown immediate
SQL> create spfile from pfile='/u01/initstby.ora' ;
6. 在Standby上,進入到存放備份集的/data/backup目錄,如果primary及
standby是同一個server, 那麼需要切換ORACLE_SID到standby sid, 然後準備
開始恢復RMAN備份集到Standby 。 首先將Standby庫置為nomount模式,然後
進行standby庫的建立 :
SQL> startup nomount ;
dbtest$rman target auxiliary /
Recovery Manager: Release 11.2.0.1.0 - Production on Tue Aug 31 17:41:56 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: TEST11G (DBID=879780823)
connected to auxiliary database: TEST11G (not mounted)
RMAN> duplicate target database for standby nofilenamecheck;
7. 完成後,在Standby 上alert log或透過查詢v$database中的open_mode欄位
可以看到standby上的庫處於mounted狀態。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
8. 我們複製後期的一些歸檔到standby對應的歸檔目錄,手工進行恢復測試。
dbtest$cp 1_9* 1_10* /data/teststby/arch/
SQL> recover standby database;
9. 開始設定自動傳輸歸檔檔案進行恢復的引數。
首先,在primary db上設定引數 (需要先在primary 上tnsnames.ora中設定連線
到standby的別名standby):
standby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = teststby)
)
)
primary下引數修改如下:
(備註: ARCH模式的歸檔傳輸在11g中不是預設方式,11g中的預設是LGWR, 所以我們需要
在 *.log_archive_dest_2 屬性中加入 ARCH , 還有
*.log_archive_config='DG_CONFIG=(test11g,teststby)' 引數要麼在priamry及standby
上都加上,要麼都不加入,否則會有問題 。)
*.log_archive_config='DG_CONFIG=(test11g,teststby)'
-- 其中的test11g 及 teststby 分別代表primary及standby上的db_unique_name .
*.db_name='test11g'
*.db_unique_name='test11g'
*.log_archive_dest_1='location=/data/test11g/arch valid_for=(all_logfiles,all_roles) db_unique_name=test11g'
*.log_archive_dest_2='service=standby ARCH valid_for=(online_logfiles,primary_role) db_unique_name=teststby'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
/*以下部分為主機切換為備庫使用,如果不需要可以不設定*/
*.fal_server=standby
*.fal_client=primary
*.standby_file_management=auto
#如果主備庫檔案或路徑不同
*.db_file_name_convert='/data/test11g/','/data/teststby/'
*.log_file_name_convert='/data/test11g/','/data/teststby/'
重新啟動DB使之生效 。
10. 然後在standby db上設定引數 (如果需要switch角色,需要先在Standby上
tnsnames.ora中設定連線到primary的別名primary):
primary =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test11g)
)
)
Standby db上引數修改如下:
*.db_name='test11g'
*.db_unique_name='teststby'
*.log_archive_config='DG_CONFIG=(test11g,teststby)'
*.log_archive_dest_1='location=/data/teststby/arch valid_for=(all_logfiles,all_roles) db_unique_name=teststby'
*.log_archive_dest_2='service=primary ARCH valid_for=(online_logfiles,primary_role) db_unique_name=test11g'
--備庫中log_archive_dest_2可以不用設定,主要用於主庫備庫切換
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_min_succeed_dest=1
*.standby_file_management='AUTO'
*.fal_server='primary' -- 在tnsnames.ora 中的服務名
*.fal_client='standby' -- 在tnsnames.ora 中的服務名
--- 以下兩引數是為了切換用,如果後期不需要switch, 可以不用設定
*.db_file_name_convert='/data/teststby/','/data/test11g/'
*.log_file_name_convert='/data/teststby/','/data/test11g/'
備註: 10G下的standby_archive_dest 引數在11g中已經廢棄 。
11. 在Standby上是修改的引數生效,並開啟為 managed standby 模式 :
SQL> create spfile from pfile='/u01/initstby.ora';
SQL> startup nomount
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session ;
測試是否APPLY LOG正常,在Primary DB上 SQL> alter system switch logfile;
檢視是否在standby上log_archive_dest_1 對應的目錄下有相應的歸檔 。然後在alert log
中檢視是否已經恢復 。還可以在primary 中檢視 v$archive_dest 中的狀態值。
至此,常規的物理Standby配置成功。下面我們準備開始設定11g的active data guard,使
之能夠open read only的同時可以進行apply log . 這裡假設還是以ARCH模式傳輸歸檔。
12 . 在Standby庫中,11g 以只讀開啟庫應用日誌:
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
SQL> recover managed standby database cancel;
SQL> alter database open read only;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
SQL> alter database recover managed standby database disconnect from session;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
測試在stamdby恢復的時候進行查詢(可以使查詢及恢復持續進行觀察):
SQL> select * from tony.test2 ;
成功.....
-----------
13. 下面我們測試最大資料保護和最大可用性模式,採用lgwr非同步傳輸歸檔的情況。
需要修改原來的在primary上的ARCH最大效能保護模式為現在的LGWR非同步傳輸(ASYNC)
模式來進行 APPLY LOG . 我們在原來arch模式下進行修改。
首先要在standby上加入standby redo logfile. standby redo日誌檔案組數要
比primary 資料庫的online redo 日誌檔案組數至少多一組, 且與primary db上的
online redo log大小要一致 。如果後期想主備庫相互切換的話,在主庫及備庫上
都要加入standby redo logfile, 這裡我們兩邊都加入。
建議:
Standby redo log 組數公式>=(每個instance日誌組個數+1)*instance個數
Oracle文件原文是:
(maximum number of logfiles for each thread + 1) * maximum number of threads
14. 先在standby一端加入,由於primary db中有3組online redo, 這裡standby上的
standby redo log (注意不是online redo log哦) 加入4組 (單機,不是RAC, 只有
一個例項): 注意group的編號。
SQL> recover managed standby database cancel;
alter database add standby logfile group 10 ('/data/teststby/standbyredo10.dbf') size 50m ;
alter database add standby logfile group 11 ('/data/teststby/standbyredo11.dbf') size 50m ;
alter database add standby logfile group 12 ('/data/teststby/standbyredo12.dbf') size 50m ;
alter database add standby logfile group 13 ('/data/teststby/standbyredo13.dbf') size 50m ;
在priamry DB段修改引數log_archive_dest_2 :
alter system set log_archive_dest_2='service=standby LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=teststby';
在standby DB段修改引數(如果這個可選引數有設定的話):
alter system set log_archive_dest_2='service=primary LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=test11g';
然後將備庫standby置於實時日誌應用與查詢模式。
SQL> alter database recover managed standby database using current logfile disconnect;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
備註: 使用using current logfile 應用日誌是當日志傳到standby redo log的時候就去應用,
是real-time的,必須要有standby redo log。而沒有using current logfile是去apply standby
archived log.
15. 最後在primary db上加入standby redo logfile, 這一步是可選步驟,主要是為
主備庫相互切換。
alter database add standby logfile group 10 ('/data/test11g/standbyredo10.dbf') size 50m ;
alter database add standby logfile group 11 ('/data/test11g/standbyredo11.dbf') size 50m ;
alter database add standby logfile group 12 ('/data/test11g/standbyredo12.dbf') size 50m ;
alter database add standby logfile group 13 ('/data/test11g/standbyredo13.dbf') size 50m ;
透過V$STANDBY_LOG檢視驗證standby redo log檔案組是否成功建立 .
16. 啟用物理Standby和啟用9i,10g的一樣(注意啟用後修改引數及temp表空間)。
SQL> recover managed standby database cancel;
SQL> alter database activate standby database;
SQL> alter database open ;
SQL> shutdown immediate ;
SQL> startup ;
備註: 監聽檔案一般格式如下,一旦啟用standby後,如果SID與primary 庫不一致,可能
導致需要更改大量客戶端tnsnames.ora檔案,我們可以設定啟用後的standby 中的global_dbname,
使之與primary DB的SID(也就是客戶端設定的SERVICE_NAME)一致 。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/product/oracle)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = teststby)
(ORACLE_HOME = /u01/product/oracle)
(GLOBAL_DBNAME = test11g) ------ 修改這裡的teststby為test11g即可。
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.161.24.133)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
17. primary 及standby的swith over 用的比較少,這裡簡單介紹一下 。
具體切換的順序:先從主庫到備用,再從備庫到主庫
確保兩庫引數配置ok, primary是open, standby是mount狀態,及沒有活動會話。
在primarydb上:
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
切換為standby :
SQL> alter database commit to switchover to physical standby with session shutdown;
然後shutdown, 開啟為standby模式。
然後登陸standby DB, 同樣select switchover_status from v$database;
SQL> alter database commit to switchover to physical primary;
SQL> alter database open ;
登陸現在的standby庫:
SQL> alter database recover managed standby database disconnect from session ;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-672479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Script to Collect Data Guard Physical and Active Standby Diagnostic InformationORM
- 【DataGuard】11g 新特性:Active Data Guard
- 【DataGuard】Oracle 11g physical standby switchoverOracle
- 【DG】Data Guard搭建(physical standby)
- Oracle 11g Data Guard 使用 duplicate from active database 建立 standby databaseOracleDatabase
- Oracle 11g Data Guard 使用duplicate from active database 建立 standby databaseOracleDatabase
- Oracle 11g Data Guard Enabling Active Data GuardOracle
- Oracle 12.2 How to Generate AWRs in Active Data Guard Standby DatabasesOracleDatabase
- 【DataGuard】Oracle 11g物理Data Guard之Snapshot Standby資料庫功能Oracle資料庫
- Oracle Data Guard Linux 平臺 Physical Standby 搭建例項OracleLinux
- 【轉】【DataGuard】Oracle 11g物理Data Guard之Snapshot Standby資料庫功能Oracle資料庫
- Oracle 11g RAC Data Guard 物理standby 建立Oracle
- 【DataGuard】Oracle 11g物理Active Data Guard實時查詢(Real-time query)特性Oracle
- Oracle Data Guard Linux 平臺 Physical Standby 搭建例項-3OracleLinux
- Oracle Data Guard Linux 平臺 Physical Standby 搭建例項 -2OracleLinux
- Oracle Data Guard Linux 平臺 Physical Standby 搭建例項 -1OracleLinux
- Oracle 11g Data Guard 使用duplicate from active databaseOracleDatabase
- 【DataGuard】同一臺主機部署Oracle 11g物理Active Data Guard詳細過程Oracle
- DataGuard:Physical Standby Switchover
- ORA-01555 on Active Data Guard Standby DatabaseDatabase
- 實戰11g active data guard on rac
- Oracle 11g Active DataguardOracle
- Oracle10g Data Guard (Standby) 理論與實踐 [final]Oracle
- DataGuard:Physical Standby FailoverAI
- ORACLE10g DataGuard 配置Physical Standby DatabaseOracleDatabase
- 【DataGuard】Oracle 11g DataGuard 新特性之 Active Standby:Real-Time Apply+QueryOracleAPP
- Oracle Active Data Guard調整案例[2]Oracle
- physical data guard 的原理
- 搭建11g data guard(duplicate from active database方式)Database
- Oracle 11g Data GuardOracle
- Oracle 11g Cross platform Active StandbyOracleROSPlatform
- Active Data Guard初探(一)
- 【DATAGUARD】Oracle19c Data Guard BrokerOracle
- 單機Linux平臺Oracle 11g DataGuard Physical Standby 搭建例項(7)LinuxOracle
- 單機Linux平臺Oracle 11g DataGuard Physical Standby 搭建例項(6)LinuxOracle
- 單機Linux平臺Oracle 11g DataGuard Physical Standby 搭建例項(5)LinuxOracle
- 單機Linux平臺Oracle 11g DataGuard Physical Standby 搭建例項(4)LinuxOracle
- 單機Linux平臺Oracle 11g DataGuard Physical Standby 搭建例項(3)LinuxOracle