Oracle Data Guard 的配置在網上有不少資料,可是沒有一個完整的,配置下來多少有些問題。在踩了各類坑以後,本身終於配置成功,就想把這過程記錄下來。java
主數據庫:windows7;版本Oracle11g(11.2.0);IP地址10.0.1.165;實例SID:PRIMARYsql
備用數據庫:windows7;版本Oracle11g(11.2.0);IP地址10.0.2.116;實例SID:STANDBY數據庫
一、在主數據庫和備用數據庫的全部機器上必須安裝同一個版本的Oracle企業版。:SELECT * FROM V$VERSION;windows
二、主數據庫必須運行在歸檔模式下,推薦主和備用數據庫都是force Logging模式,這樣方便雙向自由切換:ALTER DATABASE FORCE LOGGING;session
三、主數據庫和備用數據庫的操做系統必須同樣(容許版本不一樣),備用數據庫可使用與主數據庫不一樣的目錄結構,ORACLE推薦使用相同的目錄結構。app
四、主備用數據庫硬件系統的體系結構必須相同,但容許主備數據庫硬件的配置能夠不一樣如:CPU數量、內存大小、存儲配置等。dom
五、主備數據庫能夠是單實例的數據庫,也能夠是多實例的RAC數據庫。異步
六、每一個主備數據庫必須有它本身的控制文件,ORACLE NET不一樣,必須分別修改。性能
一、 本例中主數據庫Oracle安裝在: E:\app\Administrator,備用安裝在:E:\app\Administrator,建議使用相同的安裝路徑。安裝時先不要安裝數據庫,即在安裝過程當中「數據庫配置」一項下面選擇「只安裝軟件」;測試
二、 在主數據庫上使用DBCA(Database Configuration Assistant)命令建一個數據庫,SID設爲PRIMARY;
三、 用Oracle Net Configuration Assistang配置監聽程序
配置完成後在windows服務中,能夠看到監聽服務
四、 打開cmd,輸入sqlplus "/as sysdba" ,鏈接到Oracle.
五、 設置主數據庫的歸檔路徑爲:
E:\app\Administrator\database\Archive
SQL>alter system set log_archive_dest_1
='LOCATION=D:\app\Administrator\database\Archive MANDATORY' scope=both;
六、 將主數據庫實例、數據庫關閉,而後啓動實例,但不打開數據庫,只啓動到數據庫掛載模式:
SQL>shutdown immediate;
SQL>startup mount;
七、 將主數據庫設置成歸檔狀態和自動歸檔模式:
SQL>alter database archivelog;
SQL>alter system set log_archive_start=true scope=spfile;
八、 在主數據庫上面建立備用數據庫的控制文件standby.ctl:
SQL>alter database create standby controlfile as 'E:\app\zengjiyang\oradata\standby.ctl';
九、 在主數據庫上面建立備用數據庫的初始化參數文件standby.ora(將其拷貝回備用數據庫後轉換成備用數據庫的spfile)
SQL>create pfile='E:\app\zengjiyang\oradata\standby.ora' from spfile;
十、查看主數據庫的數據文件及其的位置:SQL>select name from v$datafile;記下查詢結果中的數據文件的位置。
十一、關閉實例:SQL>shutdown immediate;
十二、將第8步中的standby.ctl、第9步中的standby.ora和第10步驟中的數據文件、還有E:\app\Administrator\oradata\PRIMARY路徑下面的聯機日誌文件(REDO.LOG)、E:\app\Administrator\product\11.2.0\dbhome_1\database裏面的口令文件PWDPRIMARY.ora備份出來,拷貝到備用數據庫中;在備用數據庫中建立路徑E:\app\Administrator\oradata\PRIMARY,存放standby.ctl、數據文件、聯機日誌文件;
建立路徑E:\app\Administrator\admin\PRIMARY,在裏面建立空文件夾bdump、cdump、udump、create、pfile;
將standby.ora放到E盤根目錄下面;
將口令文件PWDPRIMARY.ora改名爲PWDSTANDBY.ora,放到備用數據庫的E:\app\Administrator\product\11.2.0\dbhome_1\database下面。
1三、回到主數據庫,啓動主數據庫實例和數據庫:SQL>startup
1四、轉回到備用數據庫,手動建立服務OracleServiceSTANDBY:oradim -new -sid STANDBY -startmode manual,
設置環境變量:在環境變量的「Administrator的用戶變量」一欄裏面新建一個值,變量名爲ORACLE_SID,變量值爲STANDBY(服務名)。
1五、建立備用數據庫監聽器OracleOraHome92TNSListener:進入Net Configuration Assistant,使用「監聽程序配置」來建立備用數據庫的監聽器,同時會在E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN下面生成listener.ora文件,並修改以下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:e:\app\Administrator\product\11.2.0\dbhome_1\bin\orapls11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
主數據庫listener.ora修改以下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\app\zengjiyang\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\zengjiyang\product\11.2.0\dbhome_1\bin\orapls11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
1六、配置本地NET服務名:進入Net Configuration Assistant,使用「本地NET服務名配置」來配置,同時會在E:\app\Administrator\product\11.2.0\dbhome_1
\NETWORK\ADMIN下面生成tnsnames.ora文件。(同第3步,這步若是已經生成了tnsnames.ora文件就能夠不用了)
1七、配置主和備用數據庫的tnsnames.ora,都將裏面的內容設置成以下內容:
主數據庫tnsnames.ora
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
備用數據庫:
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
1八、修改E根目錄下面的初始化參數文件standby.ora,裏面的所有內容以下(刪除了原來的control_files參數,將instance_name改爲了STANDBY,添加的內容):
*.aq_tm_processes=1
*.background_dump_dest='E:\app\Administrator\admin\PRIMARY\bdump'
*.compatible='11.2.0.0.0'
*.core_dump_dest='E:\app\Administrator\admin\PRIMARY\cdump'
*.db_block_size=8192
*.db_cache_size=728760320
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='PRIMARY'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=PRIMARYXDB)','(PROTOCOL=TCP)'
*.fast_start_mttr_target=300
*.instance_name='STANDBY'
*.java_pool_size=20971520
*.job_queue_processes=10
*.large_pool_size=143654912
*.log_archive_dest_1='LOCATION=E:\app\Administrator\database\Archive'
*.log_archive_start=TRUE
*.open_cursors=300
*.pga_aggregate_target=324009984
*.processes=150
*.query_rewrite_enabled='FALSE'
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=242221056
*.sort_area_size=52428800
*.star_transformation_enabled='FALSE'
*.timed_statistics=TRUE
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='E:\app\Administrator\admin\PRIMARY\udump'
*.standby_file_management=AUTO
*.lock_name_space='standby'
*.fal_server='primary'
*.fal_client='standby'
*.standby_archive_dest='E:\app\Administrator\database\Archive'
*.control_files='E:\app\Administrator\oradata\STANDBY.CTL'
1九、進入SQLplus將standby.ora建立成備用數據庫的spfile:
SQL>create spfile from pfile='e:\standby.ora';
20、啓動備用數據庫的實例,而且將備用數據庫設置成standby模式:
SQL>startup nomount;
SQL>alter database mount standby database;
2一、在備用數據庫啓動日誌應用服務:SQL>alter database recover managed standby database disconnect from session;
2二、轉到主數據庫,啓動到物理備用數據庫的歸檔:
SQL: alter system set log_archive_dest_2='service=standby mandatory reopen=60'
主庫,歸檔當前日誌: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
從庫,校驗歸檔日誌是否正常接收: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
從庫,查看新的歸檔日誌是否正經常使用於恢復:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
若是都是YES的話就表示成功了。
前面的運做從庫只是將日誌文件拿過來存放起來,但並無執行日誌文件,因此在主庫上所作的操做沒法在從庫上獲得結果,即沒法在從庫上查詢數據。要在從庫上查詢數據,要執行如下語句:在從庫上用sysdba 用戶鏈接
Sql>alter database recover managed standby database disconnect from session ;
Sql>alter database recover managed standby database cancel ;
Sql>alter database open read only ;
查詢數據便可。查詢完成之後,須要恢復從庫爲恢復模式
Sql>alter database recover managed standby database disconnect from session ; 這個功能的能夠用來查詢前一天(或者前若干時間)之前的數據,好比報表之類的,由於今天只能查詢昨天之前的報表,對數據的同步性的要求不是那麼嚴格。查詢完後必定要將從庫設回恢復模式。
Oracle DataGuard |
Oracle GoldenGate |
|
原理 |
複製歸檔日誌或在線日誌 |
抽取在線日誌中的數據變化,轉換爲GGS自定義的數據格式存放在本地隊列或遠端隊列中 |
穩定性 |
做爲災備的穩定性極高 |
穩定性不如DataGuard |
維護 |
維護簡單,極少出現問題 |
命令行方式,維護較複雜 |
對象支持 |
徹底支持 |
部分對象需手工建立於維護 |
備份端可用性 |
備份端處於恢復或只讀狀態,在只讀狀態下不能同時進行恢復。 |
兩端數據庫是活動的,備份端能夠提供實時的數據查詢及報表業務等,從而提升系統總體的業務處理能力,充分利用備份端的計算能力,提高系統總體業務處理性能。能夠實現兩端數據的同時寫入 |
接管時間 |
數據庫工做在mount狀態下,接管業務時,數據庫要open |
可實現當即接管 |
複製方式 |
經過恢復機制實現的,沒法實現同步複製 |
GoldenGate能夠提供秒一級的大量數據實時捕捉和投遞,異步複製方式,沒法實現同步複製 |
資源佔用 |
複製經過數據庫的LGWR進程或ARCN進程完成,佔用數據庫少許資源 |
業務高峯時在數據抽取轉換時消耗系統資源較多,低峯時佔用較小 |
異構數據庫支持 |
單一數據庫解決方案,僅運行在Oracle數據庫上,源端和目標端操做系統必須相同,版本號能夠不一樣 |
能夠在不一樣類型和版本的數據庫之間進行數據複製。如ORACLE,DB2,SYBASE,SQL SERVER,INFORMIX、Teradata等。 |
帶寬佔用 |
使用Oracle Net傳輸日誌,可經過高級壓縮選項進行壓縮,壓縮比在2-3倍 |
利用TCP/IP傳輸數據變化,集成數據壓縮,提供理論可達到9:1壓縮比的數據壓縮特性 |
拓撲結構 |
能夠實現一對多模式 |
能夠實現一對1、一對多、多對1、雙向複製等多種拓撲結構 |
Data Guard的基本原理是將日誌文件從原數據庫傳輸到目標數據庫,而後在目標數據庫上應用這些日誌文件,從而使目標數據庫與源數據庫保持同步,是一種數據庫級別的高可用性方案。Data Guard不能同步特定的表空間或特定的表,它的做用更像是給主庫創建一個備份庫,若是主庫掛了,能夠實時的切換到備庫。因此其意義更多的是數據同步而非數據採集。