天天看點

Oracle Data Guard配置

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不能同步特定的表空間或特定的表,它的作用更像是給主庫建立一個備份庫,如果主庫挂了,可以實時的切換到備庫。是以其意義更多的是資料同步而非資料采集。

如果我的文章對你有幫助,就點一下推薦吧.(*^__^*)