Oracle Data Guard 配置

一、測試環境

主數據庫:windows7;版本Oracle11g(11.2.0);IP地址10.0.1.165;實例SID:PRIMARY

備用數據庫:windows7;版本Oracle11g(11.2.0);IP地址10.0.2.116;實例SID:STANDBY

二、運行Data Guard的條件

1、在主數據庫和備用數據庫的所有機器上必須安裝同一個版本的Oracle企業版。:SELECT * FROM V$VERSION;

2、主數據庫必須運行在歸檔模式下,推薦主和備用數據庫都是force Logging模式,這樣方便雙向自由切換:ALTER DATABASE FORCE LOGGING;

3、主數據庫和備用數據庫的操作系統必須一樣(允許版本不同),備用數據庫可以使用與主數據庫不同的目錄結構,ORACLE推薦使用相同的目錄結構。

4、主備用數據庫硬件系統的體系結構必須相同,但允許主備數據庫硬件的配置可以不同如:CPU數量、內存大小、存儲配置等。

5、主備數據庫可以是單實例的數據庫,也可以是多實例的RAC數據庫。

6、每個主備數據庫必須有它自己的控制文件,ORACLE NET不同,必須分別修改。

三、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修改如下:

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))

    )

  )

 

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 =

      (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)

    )

  )

 

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'

 

四、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的話就表示成功了。

五、備用庫數據恢復

前面的運作從庫只是將日誌文件拿過來存放起來,但並沒有執行日誌文件,所以在主庫上所做的操作無法在從庫上得到結果,即無法在從庫上查詢數據。要在從庫上查詢數據,要執行以下語句:在從庫上用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 ; 這個功能的可以用來查詢前一天(或者前若干時間)以前的數據,比如報表之類的,因爲今天只能查詢昨天以前的報表,對數據的同步性的要求不是那麼嚴格。查詢完後一定要將從庫設回恢復模式。

六、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壓縮比的數據壓縮特性

拓撲結構

可以實現一對多模式

可以實現一對一、一對多、多對一、雙向複製等多種拓撲結構

七、總結

Data Guard的基本原理是將日誌文件從原數據庫傳輸到目標數據庫,然後在目標數據庫上應用這些日誌文件,從而使目標數據庫與源數據庫保持同步,是一種數據庫級別的高可用性方案。Data Guard不能同步特定的表空間或特定的表,它的作用更像是給主庫建立一個備份庫,如果主庫掛了,可以實時的切換到備庫。所以其意義更多的是數據同步而非數據採集。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章