Oracle11g Data Guard配置手冊
備庫:192.168.20.27 paidb
作業系統:linux
oracle版本:11.2.0.4
Oracle11g Data Guard配置手冊
概述
Oracle Data Guard 是針對企業資料庫的最有效和最全面的資料可用性、資料保護和災難恢復解決方案。它提供管理、監視和自動化軟體基礎架構來建立和維護一個或多個同步備用資料庫,從而保護資料不受故障、災難、錯誤和損壞的影響。一臺主資料庫最多可以配備9個備資料庫。
|
環境要求
1) 主資料庫伺服器和備資料庫伺服器的作業系統版本必須一致。
2) 主資料庫伺服器和備資料庫伺服器的資料庫版本必須一致。
3) 主資料庫伺服器和備資料庫伺服器的安裝目錄必須一致。
配置步驟
資料庫安裝完後,主庫和備庫都配置為MTS方式,建立PI使用者前進行配置。配置完成後在主庫建立PI使用者,備庫會自動建立PI使用者。
以下步驟主庫和備庫的操作完全相同:
將資料庫配置為歸檔模式。
sqlplus / as sysdba
shutdown immediate;
startup mount;
alter database archivelog;
alter system set control_file_record_keep_time=30 scope=both;
alter system set log_archive_dest_1='location=/home/oracle/archivelog' scope=both;
注:/home/oracle/archivelog為歸檔重做日誌存放目錄
alter database open;
alter system archive log start;
exit;
啟用資料庫閃回功能
檢視閃回目錄
show parameter db_recovery_file_dest
檢視閃回目錄可用大小
show parameter db_recovery_file_dest_size
修改閃回目錄位置:
alter system set db_recovery_file_dest='newpath';
修改閃回目錄大小
alter system set db_recovery_file_dest_size=400G;
檢視閃回功能是否啟用,預設不啟用
select flashback_on from v$database;
啟用閃回功能:
alter database flashback on;
判斷Data Guard是否安裝
select * from v$option where parameter = 'Oracle Data Guard';
如果是true表示已經安裝可以配置,否則需要安裝相應元件
設定資料庫為強制記錄日誌
alter database force logging;
檢查狀態:select name,force_logging from v$database;
設定自動管理備庫檔案
alter system set standy_file_management='AUTO';
新增日誌檔案組
建立standby如要注意以下幾點:
<1>standby log files的大小和redo log
files一樣。
查詢redo log
files檔案大小(預設50M,3個):select group#,bytes/1024/1024 as M from v$log
<2>一般而言, standbyredo 日誌檔案組數要比 primary 資料庫的 online redo 日誌檔案組數至少多一個。
有一個推薦的公式可以做參考:(每執行緒的日誌組數+1)*最大執行緒數
假設現在節點是1個,則=(3+1)*1=4
如果是雙節點 則=(3+1)*2=8
這裡我們建立4個standby
logfile:
另:不建議組號group#緊挨著redo,因為後續redo有可能調整,這裡我們從建立從11到14的standby logfile
alter database add standby logfile group 11 '/opt/oracle/oradata/orcl/dg/standby11.log' size 50M;
alter database add standby logfile group 12 '/opt/oracle/oradata/orcl/dg/standby12.log' size 50M;
alter database add standby logfile group 13 '/opt/oracle/oradata/orcl/dg/standby13.log' size 50M;
alter database add standby logfile group 14 '/opt/oracle/oradata/orcl/dg/standby14.log' size 50M;
注:/opt/oracle/oradata/orcl/dg/standby14.log 可以自定義檔名,但是目錄必須存在,檔名必須不存在
=========================
以上配置主庫備庫一致
配置db_unique_name
檢視db_unique_name
show parameter db_unique_name
主庫:alter system set db_unique_name=paidb scope=spfile;
備庫:alter system set db_unique_name=paidb27 scope=spfile;
配置主庫的fal_server
alter system set FAL_SERVER='paidb27';
alter system set log_archive_config = 'dg_config=(paidb,paidb27)';
配置備庫的fal_server
alter system set FAL_SERVER='paidb';
alter system set log_archive_config = 'dg_config=(paidb,paidb27)';
配置主庫,把重做日誌寫到備庫
alter system set log_archive_dest_2='service=paidb27 lgwr sync affirm valid_for=(online_logfile,primary_role) db_unique_name=paidb27’;
注:paidb27為備庫的db_unique_name
配置備庫,當備庫轉換為主庫的時候把重做日誌寫到新備庫
alter system set log_archive_dest_2='service=paidb lgwr sync affirm valid_for=(online_logfile,primary_role) db_unique_name=paidb’;
注:paidb為備庫的db_unique_name
複製密碼檔案
將主庫的密碼檔案複製到備庫
關閉主庫和備庫:shutdown immediate
scp $OARCLE_HOME/dbs/orapwpaidb 備庫:$ORACLE_HOME/dbs/
在主庫上建立standby控制檔案
關閉主庫和備庫shutdown immediate;
主庫執行:
startup mount;
alter database create standby controlfile as ‘/home/oracle/standby_control01.ctl’;
shutdown immediate;
將standby控制檔案複製到備庫
關閉備庫shutdown immediate;
scp /home/oracle/standby_control01.ctl 備庫:$ORACLE_HOME/../../../oradata/paidb/
scp /home/oracle/standby_control01.ctl 備庫:$ORACLE_HOME/../../../fast_recovery_area/paidb/
配置主庫的listener.ora
vi $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = paidb)
(ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = paidb)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))
)
)
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF
配置主庫的tnsnames.ora
PAIDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = paidb)
(SID = paidb)
)
)
PAIDB27 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = paidb27)
(SID = paidb)
)
)
配置備庫的listener.ora
SID_LIST_LISTENER=
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = paidb27)
(ORACLE_HOME = /data1/oracle/app/oracle/product/11.2.0.4/dbhome_1)
(SID_NAME = paidb)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))
)
)
配置備庫的tnsnames.ora
PAIDB27 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.27)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = paidb27)
(SID = paidb)
)
)
PAIDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.20.28)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = paidb)
(SID = paidb)
)
)
重啟監聽
先重啟備庫:
lsnrctl stop
lsnrctl start
後重啟主庫:
lsnrctl stop
lsnrctl start
拷貝主庫的檔案到備庫
主庫和備庫都關閉:
shutdown immediate;
scp $ORACLE_HOME/../../../oradata/paidb/* 備庫:$ORACLE_HOME/../../../oradata/paidb/
啟動備庫:
startup nomount;
alter database mount standby database;
啟動實時應用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
//暫停redo應用:
//ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
啟動主庫:
startup
備用伺服器的管理模式與只讀模式
啟動到管理模式
shutdown immediate;
startup nomount;
alter database mount standby database;
alter database recover managed standby database disconnect from session;
啟動到只讀方式
SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database open read only;
在管理恢復模式下到只讀模式
SQL> recover managed standby database cancel;
SQL> alter database open read only;
從只讀方式到管理恢復方式
SQL> recover managed standby database disconnect from session;
監控standby配置是否成功
確認主備庫裡的歸檔目的地配置都是有效的select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
目的地狀態status應該顯示為 VALID,注意如果上面沒有執行redo應用會有一條error資訊 確認重做日誌是否真的被應用了,在主庫執行
select SEQUENCE#, FIRST_TIME, NEXT_TIME,
APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = 'JED2' order by FIRST_TIME;
如果歸檔和日誌應用均正常,APPLIED 和 ARCHIVED 列都應該是 YES。(如果沒有應用redo,applied應該是NO)
如果你發現日誌沒有被應用,那可能是重做日誌有了缺口,這種情況下備庫無法進行日誌應用。但如果你的 FAL_SERVER 引數設定正確,這應該不會有問題
select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
如果一切正常,應該返回 VALID 和 NO GAP .切記啟用redo應用才能顯示No GAP 在主備庫上執行以下查詢檢視資料庫狀態
select * from V$DATAGUARD_STATUS order by TIMESTAMP; 檢查是否成功:
主庫上檢視日誌傳送情況:
sql>select dest_name,status,error from v$archive_dest;
應該log_archive_dest_1和2狀態應該是valid
切換幾次日誌:
sql>alter system switch logfile;
檢視日誌序號:
sql>select sequence# from v$archived_log;
備庫驗證:
sql>select sequence#,applied from v$archived_log;
DataGuard啟動關閉順序
監聽
先啟備庫再起主庫
#lsnrctl start
啟動
先啟備庫:
sql>startup nomount
sql>alter database mount standby
database;
sql>alter database recover managed
standby database using current logfile disconnect from session;
在啟主庫
sql>startup
關閉
先關主庫:
sql>shutdown immediate
再關從庫:
sql>alter database recover
managed standby database cancel;
sql>shutdown immediate;
保護模式和身份
最大保護:這種模式能夠確保絕無資料丟失。要實現這一步當然是有代價的,它要求所有的
事務在提交前其 redo 不僅被寫入到本地的 online redo log,還要同時提交到
standby 資料庫的 standbyredo log,並確認 redo 資料至少在一個 standby 資料
庫可用(如果有多個的話),然後才會在 primary 資料庫上提交。如果出現了什麼
故障導致 standby 資料庫不可用的話,primary 資料庫會被 shutdown。
最高效能:這種模式提供在不影響 primary 資料庫效能前提下最高階別的資料保護策略。
事務可以隨時提交,當前 primary 資料庫的 redo 資料也需要至少寫入一個
standby 資料庫,不過這種寫入可以是不同步的。如果網路條件理想的話, 這
種模式能夠提供類似最高可用性的資料保護而僅對 primary 資料庫有輕微的性
能影響。
最高可用性:這種模式提供在不影響 primary 資料庫可用前提下最高階別的資料保護策略。
其實現方式與最大保護模式類似,也是要求所有事務在提交前必須保障 redo
資料至少在一個 standby 資料庫可用,不過與之不同的是,如果出現故障導
入無法同時寫入 standby 資料庫 redo log,primary 資料庫並不會 shutdown,
而是自動轉為最高效能 模式,等 standby 資料庫恢復正常之後,它又會再自
動轉換成最高可用性模式。
檢視保護模式:
select protection_mode,protection_level from v$database;
--預設是最大效能模式(maximum performance)
檢視身份:
select database_role from v$database; --主庫是primary備庫是physical standby
切換保護模式:
alter
database set standby database to maximize protection; --最大保護
alter database set standby
database to maximize availability; --最高可用性
alter database set standby
database to maximize performance; --最高效能
主備庫都可以在最高效能下執行,一旦升級到最高可用模式,
主庫log_archive_dest_2的status就變為error,錯誤資訊:ORA-16086: Redo data cannot be written to the standby redo log
解決辦法:
刪除主庫和備庫的 standby logfile group
然後到作業系統下rm standby的物理檔案,
然後重新新增 standby logfile group
問題解決
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12478376/viewspace-1130026/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Data Guard Broker進行Data Guard物理備用庫配置(Oracle 19c)Oracle
- [20221111]19c配置Data Guard Broker問題.txt
- Oracle Data Guard Broker元件Oracle元件
- Oracle Data Guard簡介Oracle
- 單機搭建Data Guard
- [20221111]19c配置Data Guard Broker問題2.txt
- 【DG】Data Guard搭建(physical standby)
- 1 關於 Oracle Data GuardOracle
- 2 Oracle Data Guard 安裝Oracle
- 1 Oracle Data Guard Broker 概念Oracle
- bd_ticket_guard_client_dataclient
- Oracle Data Guard和Broker概述Oracle
- 8 Oracle Data Guard Broker 屬性Oracle
- 9 Oracle Data Guard 故障診斷Oracle
- Bd-Ticket-Guard-Client-Data逆向client
- oracle 11g data guard維護Oracle
- 4.1.6 Oracle Restart 與 Oracle Data Guard 整合OracleREST
- 【DATAGUARD】Oracle19c Data Guard BrokerOracle
- 2 開始實用 Oracle Data GuardOracle
- 19 Oracle Data Guard 相關檢視Oracle
- 6 Oracle Data Guard Protection Modes 保護模式Oracle模式
- 【DG】Data Guard主備庫Failove切換AI
- 【DG】Data Guard主備庫Switchover切換
- 15 Oracle Data Guard Scenarios 保護場景OracleiOS
- A Oracle Data Guard Broker 升級和降級Oracle
- IDEA新手常用配置手冊Idea
- Oracle 12.2 How to Generate AWRs in Active Data Guard Standby DatabasesOracleDatabase
- Oracle Data Guard Feature 12cR2系列(二)Oracle
- Oracle Data Guard Feature 12cR2系列(一)Oracle
- 【ASK_ORACLE】Oracle Data Guard(一)DG架構Oracle架構
- 18 與Oracle Data Guard 相關的SQL語句OracleSQL
- 使用Broker管理Data Guard——停用、改保護模式等模式
- 需要了解的Data Guard理論知識(一)
- 需要了解的Data Guard理論知識(二)
- 需要了解的Data Guard理論知識(三)
- 【mos 1265700.1】Oracle Patch Assurance - Data Guard Standby-First Patch ApplyOracleAPP
- [20201110]How to get the Data Guard broker configuration from a SQL query.txtSQL
- Webpack 5 配置手冊(從0開始)Web
- Oracle 19C Data Guard基礎運維-02 Switchovers(物理)Oracle運維