Oracle Data Guard 的配置在網上有很多資料,但是沒有一個完整的,配置下來多少有些問題。在踩了各種坑之後,自己終于配置成功,就想把這過程記錄下來。
1 測試環境
主資料庫:windows7;版本Oracle11g(11.2.0);IP位址10.0.1.165;執行個體SID:PRIMARY
備用資料庫:windows7;版本Oracle11g(11.2.0);IP位址10.0.2.116;執行個體SID:STANDBY
2 運作Data Guard的條件
1、在主資料庫和備用資料庫的所有機器上必須安裝同一個版本的Oracle企業版。:SELECT * FROM V$VERSION;
2、主資料庫必須運作在歸檔模式下,推薦主和備用資料庫都是force Logging模式,這樣友善雙向自由切換:ALTER DATABASE FORCE LOGGING;
3、主資料庫和備用資料庫的作業系統必須一樣(允許版本不同),備用資料庫可以使用與主資料庫不同的目錄結構,ORACLE推薦使用相同的目錄結構。
4、主備用資料庫硬體系統的體系結構必須相同,但允許主備資料庫硬體的配置可以不同如:CPU數量、記憶體大小、存儲配置等。
5、主備資料庫可以是單執行個體的資料庫,也可以是多執行個體的RAC資料庫。
6、每個主備資料庫必須有它自己的控制檔案,ORACLE NET不同,必須分别修改。
3 Data Guard配置步驟
1、 本例中主資料庫Oracle安裝在: E:\app\Administrator,備用安裝在:E:\app\Administrator,建議使用相同的安裝路徑。安裝時先不要安裝資料庫,即在安裝過程中“資料庫配置”一項下面選擇“隻安裝軟體”;
2、 在主資料庫上使用DBCA(Database Configuration Assistant)指令建一個資料庫,SID設為PRIMARY;
3、 用Oracle Net Configuration Assistang配置監聽程式
配置完成後在windows服務中,可以看到監聽服務
4、 打開cmd,輸入sqlplus "/as sysdba" ,連接配接到Oracle.
5、 設定主資料庫的歸檔路徑為:
E:\app\Administrator\database\Archive
SQL>alter system set log_archive_dest_1
='LOCATION=D:\app\Administrator\database\Archive MANDATORY' scope=both;
6、 将主資料庫執行個體、資料庫關閉,然後啟動執行個體,但不打開資料庫,隻啟動到資料庫挂載模式:
SQL>shutdown immediate;
SQL>startup mount;
7、 将主資料庫設定成歸檔狀态和自動歸檔模式:
SQL>alter database archivelog;
SQL>alter system set log_archive_start=true scope=spfile;
8、 在主資料庫上面建立備用資料庫的控制檔案standby.ctl:
SQL>alter database create standby controlfile as 'E:\app\zengjiyang\oradata\standby.ctl';
9、 在主資料庫上面建立備用資料庫的初始化參數檔案standby.ora(将其拷貝回備用資料庫後轉換成備用資料庫的spfile)
SQL>create pfile='E:\app\zengjiyang\oradata\standby.ora' from spfile;
10、檢視主資料庫的資料檔案及其的位置:SQL>select name from v$datafile;記下查詢結果中的資料檔案的位置。
11、關閉執行個體:SQL>shutdown immediate;
12、将第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下面。
13、回到主資料庫,啟動主資料庫執行個體和資料庫:SQL>startup
14、轉回到備用資料庫,手動建立服務OracleServiceSTANDBY:oradim -new -sid STANDBY -startmode manual,
設定環境變量:在環境變量的“Administrator的使用者變量”一欄裡面建立一個值,變量名為ORACLE_SID,變量值為STANDBY(服務名)。
15、建立備用資料庫監聽器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修改如下:
(ORACLE_HOME = E:\app\zengjiyang\product\11.2.0\dbhome_1)
(ENVS = "EXTPROC_DLLS=ONLY:E:\app\zengjiyang\product\11.2.0\dbhome_1\bin\orapls11.dll")
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))
16、配置本地NET服務名:進入Net Configuration Assistant,使用“本地NET服務名配置”來配置,同時會在E:\app\Administrator\product\11.2.0\dbhome_1
\NETWORK\ADMIN下面生成tnsnames.ora檔案。(同第3步,這步如果已經生成了tnsnames.ora檔案就可以不用了)
17、配置主和備用資料庫的tnsnames.ora,都将裡面的内容設定成如下内容:
主資料庫tnsnames.ora
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
PRIMARY =
備用資料庫:
18、修改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'
19、進入SQLplus将standby.ora建立成備用資料庫的spfile:
SQL>create spfile from pfile='e:\standby.ora';
20、啟動備用資料庫的執行個體,并且将備用資料庫設定成standby模式:
SQL>startup nomount;
SQL>alter database mount standby database;
21、在備用資料庫啟動日志應用服務:SQL>alter database recover managed standby database disconnect from session;
22、轉到主資料庫,啟動到實體備用資料庫的歸檔:
SQL: alter system set log_archive_dest_2='service=standby mandatory reopen=60'
4 Data Guard檢驗
主庫,歸檔目前日志: 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的話就表示成功了。
5 備用庫資料恢複
前面的運作從庫隻是将日志檔案拿過來存放起來,但并沒有執行日志檔案,是以在主庫上所做的操作無法在從庫上得到結果,即無法在從庫上查詢資料。要在從庫上查詢資料,要執行以下語句:在從庫上用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 ; 這個功能的可以用來查詢前一天(或者前若幹時間)以前的資料,比如報表之類的,因為今天隻能查詢昨天以前的報表,對資料的同步性的要求不是那麼嚴格。查詢完後一定要将從庫設回恢複模式。
6 Data Guard與OGG的對比
Oracle DataGuard | Oracle GoldenGate | |
原理 | 複制歸檔日志或線上日志 | 抽取線上日志中的資料變化,轉換為GGS自定義的資料格式存放在本地隊列或遠端隊列中 |
穩定性 | 作為災備的穩定性極高 | 穩定性不如DataGuard |
維護 | 維護簡單,極少出現問題 | 指令行方式,維護較複雜 |
對象支援 | 完全支援 | 部分對象需手工建立于維護 |
備份端可用性 | 備份端處于恢複或隻讀狀态,在隻讀狀态下不能同時進行恢複。 | 兩端資料庫是活動的,備份端可以提供實時的資料查詢及報表業務等,進而提高系統整體的業務處理能力,充分利用備份端的計算能力,提升系統整體業務處理性能。可以實作兩端資料的同時寫入 |
接管時間 | 資料庫工作在mount狀态下,接管業務時,資料庫要open | 可實作立即接管 |
複制方式 | 通過恢複機制實作的,無法實作同步複制 | GoldenGate可以提供秒一級的大量資料實時捕捉和投遞,異步複制方式,無法實作同步複制 |
資源占用 | 複制通過資料庫的LGWR程序或ARCN程序完成,占用資料庫少量資源 | 業務高峰時在資料抽取轉換時消耗系統資源較多,低峰時占用較小 |
異構資料庫支援 | 單一資料庫解決方案,僅運作在Oracle資料庫上,源端和目标端作業系統必須相同,版本号可以不同 | 可以在不同類型和版本的資料庫之間進行資料複制。如ORACLE,DB2,SYBASE,SQL SERVER,INFORMIX、Teradata等。 适用于不同作業系統如windows、Linux、unix、aix等 |
帶寬占用 | 使用Oracle Net傳輸日志,可通過進階壓縮選項進行壓縮,壓縮比在2-3倍 | 利用TCP/IP傳輸資料變化,內建資料壓縮,提供理論可達到9:1壓縮比的資料壓縮特性 |
拓撲結構 | 可以實作一對多模式 | 可以實作一對一、一對多、多對一、雙向複制等多種拓撲結構 |
7
總結
Data Guard的基本原理是将日志檔案從原資料庫傳輸到目标資料庫,然後在目标資料庫上應用這些日志檔案,進而使目标資料庫與源資料庫保持同步,是一種資料庫級别的高可用性方案。Data Guard不能同步特定的表空間或特定的表,它的作用更像是給主庫建立一個備份庫,如果主庫挂了,可以實時的切換到備庫。是以其意義更多的是資料同步而非資料采集。
如果我的文章對你有幫助,就點一下推薦吧.(*^__^*)