Oracle Data Guard是由Oracle公司提供的一套高可用性數(shù)據(jù)庫解決方案。Data Guard可以確保企業(yè)數(shù)據(jù)的高可用性,并實現(xiàn)數(shù)據(jù)保護(hù)和災(zāi)難恢復(fù)。Data Guard提供了一套綜合創(chuàng)建、維護(hù)、管理和監(jiān)視一個或多個備用數(shù)據(jù)庫的服務(wù),使得用戶能夠輕松地應(yīng)對Oracle生產(chǎn)數(shù)據(jù)庫的災(zāi)難發(fā)生和數(shù)據(jù)損壞。Data Guard將維護(hù)的備用數(shù)據(jù)庫保持為和主數(shù)據(jù)庫(生產(chǎn)數(shù)據(jù)庫)的數(shù)據(jù)和事物的一致性,當(dāng)主數(shù)據(jù)庫意外當(dāng)機(jī)或者不可用時,Data Guard可以將任何一臺備用數(shù)據(jù)庫切換為主數(shù)據(jù)庫,從而大限度的減少數(shù)據(jù)庫服務(wù)器當(dāng)機(jī)的時間。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機(jī)域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、豐澤網(wǎng)站維護(hù)、網(wǎng)站推廣。Data Guard原理
利用重做日志實現(xiàn)從生產(chǎn)庫(主)到備用數(shù)據(jù)庫的實時備份(備庫通過應(yīng)用主庫上的數(shù)據(jù)變化來保持?jǐn)?shù)據(jù)的同步),主備服務(wù)器可以互相切換(即將其中一臺提升為主服務(wù)器)。
Data Guard架構(gòu)
Primary Database(主數(shù)據(jù)庫): 即一個生產(chǎn)數(shù)據(jù)庫,在Data Guard中其主要角色的作用,是大多數(shù)應(yīng)用程序訪問的數(shù)據(jù)庫。
Standby Database(備數(shù)據(jù)庫): Standby數(shù)據(jù)庫是主數(shù)據(jù)的備份副本,備用數(shù)據(jù)庫可以是物理備用數(shù)據(jù)庫或邏輯備用數(shù)據(jù)庫,即以下兩種類型
- Physical standby database: 物理備用數(shù)據(jù)庫(使用Redo Apply技術(shù)),主要用于災(zāi)難恢復(fù)。
- Logical standby database: 邏輯備用數(shù)據(jù)庫(使用SQL Apply技術(shù)),除了用于災(zāi)難恢復(fù)外,還可以提供數(shù)據(jù)查詢、分析等服務(wù)
Data Guard數(shù)據(jù)保護(hù)模式
Data Guard可以運行以三種不同的模式運行。
Maximum protection(大保護(hù)): 確保主數(shù)據(jù)庫發(fā)生故障時不會發(fā)生數(shù)據(jù)丟失。在所有重做數(shù)據(jù)寫入到本地在線重做日志和至少一個備用數(shù)據(jù)庫的備用重做日志之前,不允許事務(wù)的提交。如果由于故障不能將主數(shù)據(jù)庫的重做日志寫入到至少一個備用數(shù)據(jù)庫的備用重做日志,則主數(shù)據(jù)庫將關(guān)閉。
Maximum availability(高可用性): 提供高級別的數(shù)據(jù)保護(hù),而不會影響主數(shù)據(jù)庫的可用性。與大保護(hù)模式一樣,在恢復(fù)事物所需的重做日志寫入本地聯(lián)機(jī)重做日志和至少一個備用數(shù)據(jù)庫的備用重做日志之前,事務(wù)不會提交。大保護(hù)模式不同的是,在主數(shù)據(jù)庫發(fā)生故障時不會將其重做日志寫入備用數(shù)據(jù)庫的重做日志。相反,主數(shù)據(jù)庫以大的性能模式下運行。
Maximum performance(高性能): 默認(rèn)模式。提供高級別的數(shù)據(jù)保護(hù),但不影響主數(shù)據(jù)庫的性能。
環(huán)境準(zhǔn)備
在我的測試環(huán)境中,我準(zhǔn)備了兩臺CentOS7.4虛擬機(jī),并同時都安裝了Oracle11gR2的11.2.0.4.0企業(yè)版的數(shù)據(jù)庫軟件,其中只有主服務(wù)器創(chuàng)建一個數(shù)據(jù)庫實例,備用服務(wù)器僅安裝Oracle數(shù)據(jù)庫軟件。
主數(shù)據(jù)庫:
OS: CentOS7.4
Hostname: hmdb11dg-db1
Oracle Version: 11.2.0.4.0
Oracle SID: HMDG(使用DBCA工具創(chuàng)建的一個數(shù)據(jù)庫)
備數(shù)據(jù)庫:
OS: CentOS7.4
Hostname: hmdb11dg-db2
Oracle Version: 11.2.0.4.0
Oracle SID: HMDG2
注意: 在開始之前,備用服務(wù)上還沒有將要與主服務(wù)器同步備份的數(shù)據(jù)庫實例
主數(shù)據(jù)庫的設(shè)置
1. 啟用歸檔日志
檢查主數(shù)據(jù)是否處于歸檔日志模式
SQL> SELECT log_mode FROM v$database; LOG_MODE ------------ ARCHIVELOG如果是NOARCHIVELOG模式,則將其修改為ARCHIVELOG模式
SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER DATABASE ARCHIVELOG; SQL> ALTER DATABASE OPEN;2. 啟用強(qiáng)制日志
SQL> ALTER DATABASE FORCE LOGGING; SQL> SELECT name,force_logging FROM v$database; NAME FOR --------- --- HMDG YES3. 創(chuàng)建密碼文件
如果密碼文件不存在,則創(chuàng)建一個密碼文件,備用服務(wù)器使用主服務(wù)器的密碼文件。Data Guard配置中的每個數(shù)據(jù)庫的所有用戶密碼必須完全相同。
$ orapwd file=/tmp/orapwHMDG password=hm_201802 entries=204. 創(chuàng)建備用重做日志
備用重做日志文件的大小要與當(dāng)前主數(shù)據(jù)庫的在線重做日志文件大小完全匹配。
確定備用重做日志文件組的數(shù)量,建議的數(shù)量:(每個線程大的日志數(shù) + 1) * 大線程數(shù)
5. 開啟閃回日志
SQL> alter database flashback on; SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES6. Oracle監(jiān)聽配置
主備數(shù)據(jù)庫必須配置注冊靜態(tài)監(jiān)聽服務(wù)(listener.ora配置)
#主數(shù)據(jù)庫 $ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hmdb11dg-db1)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = HMDG.DB) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (SID_NAME = HMDG) ) ) ADR_BASE_LISTENER = /u01/app/oracle #備數(shù)據(jù)庫 $ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hmdb11dg-db2)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = HMDG2.DB) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (SID_NAME = HMDG2) ) ) ADR_BASE_LISTENER = /u01/app/oracle7. 主備數(shù)據(jù)庫TNS別名連接信息配置
修改兩臺服務(wù)器上的$ORACLE_HOME/network/admin/tnsnames.ora配置文件,主備使用相同的配置
HMDG = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hmdb11dg-db1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = HMDG.DB) ) ) HMDG2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hmdb11dg-db2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = HMDG2.DB) ) )8. 測試使用TNS別名連接數(shù)據(jù)庫
[oracle@hmdb11dg-db1 ~]$ sqlplus system/hm_123456@HMDG SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 7 16:07:54 2018 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>9. 主數(shù)據(jù)庫初始化參數(shù)設(shè)置
檢查DB_NAME和DB_UNIQUE_NAME參數(shù)設(shè)置,在我的例子中,主數(shù)據(jù)庫的DB_NAME和DB_UNIQUE_NAME值都為HMDG。DB_NAME是主備所有節(jié)點都使用相同的值,即使用主的DB_NAME值,DB_UNIQUE_NAME必須是全局唯一的值,即每一個節(jié)點值都不同
SQL> SHOW PARAMETER DB_NAME NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_name string HMDG SQL> SHOW PARAMETER DB_UNIQUE_NAME NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string HMDG #設(shè)置DB_UNIQUE_NAME參數(shù)值 SQL> ALTER SYSTEM SET DB_UNIQUE_NAME=HMDG SCOPE=SPFILE;確定備庫的DB_UNIQUE_NAME之后,接下來首先我們設(shè)置LOG_ARCHIVE_CONFIG參數(shù)
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(HMDG,HMDG2)' SCOPE=SPFILE;配置主數(shù)據(jù)庫本地歸檔日志的位置和遠(yuǎn)程備用數(shù)據(jù)重做日志的位置,注意LOG_ARCHIVE_DEST_1為本地的參數(shù)設(shè)置,LOG_ARCHIVE_DEST_2為遠(yuǎn)程節(jié)點的設(shè)置
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/oradata/HMDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=HMDG' SCOPE=SPFILE; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=HMDG2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=HMDG2' SCOPE=SPFILE;設(shè)置LOG_ARCHIVE_DEST_STATE_1和LOG_ARCHIVE_DEST_STATE_2的值為ENABLE
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=ENABLE SCOPE=SPFILE; SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE SCOPE=SPFILE;設(shè)置LOG_ARCHIVE_FORMAT和LOG_ARCHIVE_MAX_PROCESSES參數(shù)為合適的值,并且REMOTE_LOGIN_PASSWORDFILE必須設(shè)置為'EXCLUSIVE'
SQL> ALTER SYSTEM SET LOG_ARCHIVE_FORMAT = '%t_%s_%r.arc' SCOPE = SPFILE; SQL> ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 30 SCOPE = SPFILE; SQL> ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE;接下來設(shè)置與備用數(shù)據(jù)庫相關(guān)的參數(shù)值,確保主數(shù)據(jù)庫已經(jīng)準(zhǔn)備好切換為備數(shù)據(jù)庫
SQL> ALTER SYSTEM SET FAL_SERVER=HMDG2 SCOPE = SPFILE; SQL> ALTER SYSTEM SET FAL_CLIENT=HMDG SCOPE = SPFILE; SQL> ALTER SYSTEM SET DB_FILE_NAME_CONVERT='HMDG2','HMDG' SCOPE = SPFILE; SQL> ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/HMDG2/','/u01/app/oracle/oradata/HMDG/' SCOPE = SPFILE; SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE = SPFILE;設(shè)置完主數(shù)據(jù)庫初始化參數(shù)后,需要重新啟動數(shù)據(jù)庫配置才生效
SQL> shutdown immediate SQL> startup SQL> show parameter standby_file_management NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ standby_file_management string AUTO10. 生成一個PFILE參數(shù)文件
在設(shè)置了主數(shù)據(jù)庫初始化參數(shù)之后,我們可以手動生成一個主服務(wù)器的PFILE參數(shù)文件
SQL> CREATE PFILE FROM SPFILE;查看$ORACLE_HOME/dbs/目錄下生成的initHMDG.ora文件
$ cat initHMDG.ora HMDG.__db_cache_size=234881024 HMDG.__java_pool_size=33554432 HMDG.__large_pool_size=1962934272 HMDG.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment HMDG.__pga_aggregate_target=150994944 HMDG.__sga_target=3137339392 HMDG.__shared_io_pool_size=0 HMDG.__shared_pool_size=872415232 HMDG.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/HMDG/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/HMDG/control01.ctl','/u01/app/oracle/fast_recovery_area/HMDG/control02.ctl' *.db_block_size=8192 *.db_domain='' *.db_file_name_convert='HMDG2','HMDG' *.db_name='HMDG' *.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=10737418240 *.db_unique_name='HMDG' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=HMDGXDB)' *.fal_client='HMDG' *.fal_server='HMDG2' *.log_archive_config='DG_CONFIG=(HMDG,HMDG2)' *.log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/HMDG VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=HMDG' *.log_archive_dest_2='SERVICE=HMDG2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=HMDG2' *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.log_archive_max_processes=30 *.log_file_name_convert='/u01/app/oracle/oradata/HMDG2/','/u01/app/oracle/oradata/HMDG/' *.memory_target=3277848576 *.open_cursors=300 *.processes=5000 *.remote_login_passwordfile='EXCLUSIVE' *.sessions=5505 *.standby_file_management='AUTO' *.undo_tablespace='UNDOTBS1'11. 備份主數(shù)據(jù)庫
為通過手動同步主數(shù)據(jù)庫的原始數(shù)據(jù)文件創(chuàng)建備份,如果你使用的是RMAN 的DUPLICATE來恢復(fù)備用數(shù)據(jù)庫,則不需要執(zhí)行次步驟。
[oracle@hmdb11dg-db1 ~]$ rman target = / RMAN> BACKUP DATABASE PLUS ARCHIVELOG;12. 創(chuàng)建備用數(shù)據(jù)庫的控制文件和PFILE文件
創(chuàng)建備用數(shù)據(jù)庫控制文件
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/HMDG2.ctl';創(chuàng)建備用數(shù)據(jù)庫的PFILE文件
SQL> CREATE PFILE='/tmp/initHMDG2.ora' FROM SPFILE;備用數(shù)據(jù)庫服務(wù)器設(shè)置
1. 備用數(shù)據(jù)庫上創(chuàng)建必要的目錄
$ mkdir /u01/app/oracle/admin $ mkdir /u01/app/oracle/admin/HMDG2 $ mkdir /u01/app/oracle/admin/HMDG2/{adump,dpdump,pfile,scripts} $ mkdir -p /u01/app/oracle/oradata/HMDG2 $ mkdir -p /u01/app/oracle/fast_recovery_area/HMDG22. 將控制文件、參數(shù)文件和密碼文件從主服務(wù)器上復(fù)制到備用服務(wù)器上
#控制文件 $ scp oracle@hmdb11dg-db1:/tmp/HMDG2.ctl /u01/app/oracle/oradata/HMDG2/control01.ctl $ cp /u01/app/oracle/oradata/HMDG2/control01.ctl /u01/app/oracle/fast_recovery_area/HMDG2/control02.ctl #密碼文件 $ scp oracle@hmdb11dg-db1:/tmp/orapwHMDG /u01/app/oracle/product/11.2.0/db_1/dbs/orapwHMDG2 #參數(shù)文件 $ scp oracle@hmdb11dg-db1:/tmp/initHMDG2.ora /u01/app/oracle/product/11.2.0/db_1/dbs/ initHMDG2.ora3. 修改備用數(shù)據(jù)庫初始化參數(shù)
修改備用服務(wù)器的PFILE文件$ORACLE_HOME/dbs/initHMDG.ora
... *.audit_file_dest='/u01/app/oracle/admin/HMDG2/adump' *.control_files='/u01/app/oracle/oradata/HMDG2/control01.ctl','/u01/app/oracle/fast_recovery_area/HMDG2/control02.ctl *.db_name='HMDG' *.db_unique_name='HMDG2' *.db_file_name_convert='HMDG','HMDG2' *.log_archive_config='DG_CONFIG=(HMDG,HMDG2)' *.log_archive_dest_1='LOCATION=/u01/app/oracle/oradata/HMDG2 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=HMDG2' *.log_archive_dest_2='SERVICE=HMDG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=HMDG' *.fal_client='HMDG' *.fal_server='HMDG2 *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.log_archive_format='%t_%s_%r.arc' *.log_archive_max_processes=30 *.log_file_name_convert='/u01/app/oracle/oradata/HMDG/','/u01/app/oracle/oradata/HMDG2/' ...創(chuàng)建備用數(shù)據(jù)庫(DUPLICATE)
使用備庫的PFILE文件以NOMOUNT模式啟動備用數(shù)據(jù)庫實例
$ sqlplus / as sysdba SQL> STARTUP NOMOUNT PFILE='/u01/app/oracle/product/11.2.0/db_1/dbs/initHMDG2.ora';創(chuàng)建SPFILE文件
SQL> CREATE SPFILE FROM PFILE;使用RMAN將主數(shù)據(jù)庫復(fù)制到備用數(shù)據(jù)庫,以sys用戶連接,并使用DUPLICATE復(fù)制主庫到備庫
$ rman TARGET sys/hm_123456@HMDG AUXILIARY sys/hm_123456@HMDG2使用以下DUPLICATE語句復(fù)制主庫
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;在RMAN復(fù)制過程中如果沒有產(chǎn)生任何錯誤,接下來就可以立即開啟日志重做應(yīng)用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 或者 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;取消申請恢復(fù)命令
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;在主上強(qiáng)制主數(shù)據(jù)庫上的日志切換器將當(dāng)前的重做日志組歸檔
SQL> ALTER SYSTEM SWITCH LOGFILE;在備上查詢?nèi)罩緫?yīng)用情況
SQL> select sequence#, first_time, applied from v$archived_log order by sequence#; SEQUENCE# FIRST_TIM APPLIED ---------- --------- --------- 100 08-FEB-18 YES 101 08-FEB-18 YES 102 08-FEB-18 IN-MEMORY在主上執(zhí)行日志切換
ALTER SYSTEM SWITCH LOGFILE;再查看備上日志應(yīng)用
SQL> select sequence#, first_time, applied from v$archived_log order by sequence#; SEQUENCE# FIRST_TIM APPLIED ---------- --------- --------- 100 08-FEB-18 YES 101 08-FEB-18 YES 102 08-FEB-18 YES 103 08-FEB-18 IN-MEMORY主備切換
1. 主數(shù)據(jù)庫
在當(dāng)前主數(shù)據(jù)庫中查詢主備狀態(tài)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS -------------------- TO STANDBY當(dāng)主數(shù)據(jù)庫的狀態(tài)為TO STANDBY時,表示可以切換到備用數(shù)據(jù)庫
主上執(zhí)行
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; -- 在備切換為主時,將舊的主啟動為備用數(shù)據(jù)庫 SQL> STARTUP NOMOUNT; SQL> ALTER DATABASE MOUNT STANDBY DATABASE; SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;2. 備數(shù)據(jù)庫
在備上確定當(dāng)前切換狀態(tài)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS ----------------- TO_PRIMARY 1 row selected
備上執(zhí)行
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。