Windows 下DataGuard 搭建

本文參考了網上幾篇文章,然後經過修改,測試成功。

一、    環境

Windows20008 server

Oracle 11.2.0.1

主機:192.168.70.170(primary), 實例名:dbtest

備機:192.168.70.164(standby),不帶實例

 

primary 和 standby 是數據庫唯一名。不是機器名。

二、    準備條件

分別在primary上安裝oracle 和數據庫,standby安裝oracle不帶實例;安裝路徑、數據庫實例名(dbtest)和sys和其他用戶的密碼設置爲admin

三、    Primary操作

1、 設置主數據庫爲force logging 模式 

SQL>sqlplus"/as sysdba"

SQL>alterdatabase force logging;

2、 設置主數據庫爲歸檔模式,並以mount 啓動數據庫

SQL>archivelog list

SQL>shutdownimmediate

SQL>startupmount

SQL>alterdatabase archivelog;

SQL>archivelog list

3、 添加"備用聯機日誌文件"

SQL>select* from v$logfile; 

再添加:

alterdatabase add standby logfile group 4 (' E:\app\Administrator \ORADATA\DBTEST\redo04.log')size 50m;

alterdatabase add standby logfile group 5 ('E:\app\Administrator \ORADATA\DBTEST\redo05.log') size 50m;

alterdatabase add standby logfile group 6 (' E:\app\Administrator \ORADATA\DBTEST\redo06.log')size 50m;

alterdatabase add standby logfile group 7 (' E:\app\Administrator \ORADATA\DBTEST\redo07.log')size 50m;

4、 創建主庫的初始化參數給備庫用 

SQL>Createpfile from spfile; 

產生的文件名爲initdbtest.ora 存放目錄默認放在$ORACLE_HOME/database下

5、 在主庫創建監聽和配置tnsnams.ora

listener.ora配置如下:

SID_LIST_LISTENER中添加紅色部分:這裏要特別注意了

 

紅色部分是添加的內容

SID_LIST_LISTENER=

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (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\oraclr11.dll")

    )

         (SID_DESC=

                  (GLOBAL_DBNAME= dbtest)

                  (ORACLE_HOME= E:\app\Administrator\product\11.2.0\dbhome_1)

                  (SID_NAME= dbtest)

         )

  )

 

LISTENER=

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST =WIN-32I7T8HE0VE)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

    )

  )

 

ADR_BASE_LISTENER= E:\app\Administrator

 

tnsnames.ora配置如下:

添加:

primary=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.170)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dbtest)

    )

  )

standby=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.164)(PORT= 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = dbtest)

    )

  )

 

修改完成後重啓監聽:

lsnrctl stop

lsnrctl start

 

6、 在initdbtest.ora中添加以下內容: 

*.log_archive_format='%T%S%r.ARC'

*.DB_UNIQUE_NAME='primary'

*.log_archive_config='DG_CONFIG=(primary,standby)'

*.log_archive_dest_1='location=E:\app\Administrator\oradata\archVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'

*.log_archive_dest_2='SERVICE=standby LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'

*.STANDBY_FILE_MANAGEMENT=AUTO

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.FAL_SERVER='standby'

*.FAL_CLIENT='primary'

 

接下來關閉數據庫,並啓動,讓修改生效

SQL> shutdown immediate

SQL> create spfile from pfile;

SQL> startup

 

7、 用Rman備份,不用停機

$rman target /

RMAN>backupfull format 'E:/FULL_%d_%T_%s.bak' database include current controlfile forstandby;

RMAN>sql'alter system archive log current';

RMAN>BackupArchiveLog all format='E:/arch_%d_%T_%s.bak'; 

備份完後將3個備份文件拷到standby上同樣的目錄,強調:同樣的目錄(E盤),以便在standby進行rman恢復

四、    Standby操作

對於備機因爲只安裝軟件,沒有創建數據庫實例。因此在進行下面操作前需要首先創建同名的空閒實例

oradim -new -sid dbtest

之後即可使用:

cmd> set oracle_sid=dbtest

SQL>sqlplus / as sysdba來連接到這個空閒實例。

 

其中cmd表示command窗體下的命令行

拷貝閃回區內容

1、 拷貝閃回區內容

將主機的閃回目錄 e:\app\Administrator\flash_recovery_area下所有內容拷貝到備機

e:\app\Administrator\flash_recovery_area下,注意備機此時還沒有flash_recovery_area目錄

 

2、 拷貝配置文件

拷貝主機E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\ listener.ora 和

tnsnames.ora 到備機相應的位置下。

 

並且修改listener.ora文件中的IP地址爲備機IP,如下標紅部分,其餘不變

 

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.164)(PORT = 1521))

     (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

   )

 )

 

且修改tnsnames.ora文件中的IP地址,如下標紅部分,其餘不變

DBTEST =

 (DESCRIPTION =

   (ADDRESS_LIST =

     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.164)(PORT = 1521))

   )

   (CONNECT_DATA =

     (SERVICE_NAME = dbtest)

   )

 )

 

修改完成後重啓監聽:

lsnrctl stop

lsnrctl start

3、 拷貝initdbtest.ora和密碼文件到備機並修改initdbtest.ora

E:\app\Administrator\product\11.2.0\dbhome_1\database\initdbtest.ora

E:\app\Administrator\product\11.2.0\dbhome_1\database\PWDdbtest.ora

 

然後編輯$ORACLE_HOME/database目錄下的initdbtest.ora相應部分爲以下內容 

*.log_archive_format='%T%S%r.ARC'

*.DB_UNIQUE_NAME='standby'

*.log_archive_config='DG_CONFIG=(primary,standby)'

*.log_archive_dest_1='location=E:\app\Administrator\oradata\archVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

*.log_archive_dest_2='SERVICE=primary LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'

*.STANDBY_FILE_MANAGEMENT=AUTO

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.FAL_SERVER='primary'

*.FAL_CLIENT='standby'

 

4、 手動創建下面的目錄

E:\app\Administrator\oradata\dbtest

 

5、 啓動備用數據庫

SQL>startup nomount;

SQL>create spfile from pfile;

SQL>shutdown immediate;

SQL>starup nomount;

 

6、 用Rman還原數據庫

 

Cmd> set oracle_sid=dbtest

cmd>rman target sys/admin@primary auxiliary /

 

此步驟如果報下面的錯誤:

C:\Users\Administrator>rman target sys/admin@primary  auxiliary/

恢復管理器: Release 11.2.0.1.0 -Production on星期四 4 716:05:56 2016

Copyright (c) 1982, 2009, Oracle and/or itsaffiliates.  All rights reserved.

 

RMAN-00571:===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS===============

RMAN-00571:===========================================================

RMAN-00554: 內部恢復管理器程序包初始化失敗

RMAN-04005: 目標數據庫中存在錯誤:

ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務

那麼就是前面備端listener.ora配置有問題 ,或者是主機端沒有重啓監聽

 

rman target sys/admin@primary auxiliary /這個命令的含義是連接2個目標,一個爲primary,一個爲本備機的dbtest

可通過在主機端上執行rman target sys/admin@primary,在備機上執行rman target /來定位分析問題。只有2個目標都成功連接,上述命令纔會成功。

 

恢復數據:

RMAN>duplicatetarget database for standby dorecover nofilenamecheck;

 

數據恢復完成後,執行下面的命令,準備測試

SQL>shutdownimmediate;

SQL>startupnomount;

SQL>alter database mount standby database;

SQL>alter database add standby logfile;

SQL>alter database add standby logfile;

SQL>alter database add standby logfile;

SQL>alter database add standby logfile;

SQL>alter database recover managed standby database using current logfile disconnect from session;

 

五、    測試 

1、 在主庫:

SQL>alter system switch logfile;

SQL>select max(sequence#) from v$archived_log;

2、 在備庫檢查日誌是否和主庫一致

SQL>select max(sequence#) from v$archived_log;

注:主備查詢結果一致,Data Guard 搭建結束。

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