windows平臺Oracle 8i DataGuard 建立和管理

zhanglincon發表於2009-04-23
Oracle 8i DataGuard 建立和管理 standby database概述

作用:primary database即為生產用的資料庫,standby database用於對primary database進行備援,在primary database出現故障時可以啟用standby database從而取代primary database對外提供服務,也可以通過standby database對primary database進行恢復。

 

軟硬體要求:oracle 7.x、8.0.x要求os型別相同,host硬體相同

oracle 8i要求os型別相同(比如同為unix或同為nt),不強求host硬體相同

 

standby database的建立:把primary database的一個全備份拷貝到standby主機並啟動到standby模式即可,具體細節看後面的介紹。

 

同步的原理:定期手動或自動的把primary database產生的歸檔日誌檔案傳輸到standby database,對standby database進行提升,使它與primary database進行同步。standby database與primary database將始終相差一個當前的online redo log。關於這一點在9i被實現,在9i裡面能保持兩個資料庫絕對的同步,包括current online redo log。

 

歸檔日誌檔案的傳輸:在oracle 7.x、8.0.x,primary database產生的歸檔日誌檔案必須手工傳輸到standby database,一般我們可以定義一些batch job自動做這件事。

從oracle 8i開始,可以使primary database進入managed standby environment模式,它將通過net 8自動把歸檔日誌檔案傳輸到standby database的相應目錄,這個過程可以由oracle自動並且同步進行。

 

Standby database是否會丟失資料:standby database與primary database將始終相差一個當前線上日誌。因此,如果primary database損壞並且不能啟動,此時從standby database進行恢復將丟失一個日誌;此外,如果primary database損壞但能啟動,此時可使用ALTER DATABASE ARCHIVE LOG CURRENT命令對當前日誌進行歸檔,此時從standby database進行恢復將不會丟失資料。

 

9i的新特性:在oracle 9i ,standby database被改名成為data guard,將能對包括當前線上日誌在內的所有日誌進行傳輸,保持兩邊資料庫資料的絕對同步。這些傳輸是通過tcp網路進行的,因此,我們的網路必須有足夠的頻寬。

standby database相關術語

primary database

是我們用於生產的資料庫。一個primary database可以有多個standby database。

 

primary site

也稱為primary host,即primary database所在的主機。

 

standby database

這是一個資料庫,用於對primary database進行備份。Standby database與primary database處於不同的host上,有自己的init.ora、controlfile、logfile、datafile等檔案,必要時可以被啟用從而取代primary database的功能。

 

standby site: (Oracle7, Oracle8, Oracle8i)

也稱為standby host,即standby database所在的主機。

 

啟用(activation)

standby資料庫可以通過ALTER DATABASE ACTIVATE STANDBY DATABASE命令被啟用。一旦standby資料庫被啟用,就成為一個普通的資料庫對外提供服務,此時不再能apply log,並且不能再回到standby狀態。

 

 

managed standby environment

這是primary資料庫的第一種模式,處於這種模式下的主資料庫將對線上日誌檔案進行自動歸檔並通過net8把它自動推送到standby資料庫。standby資料庫將始終能接收到這些歸檔的日誌檔案,如果standby資料庫處於managed recovery mode,它還將自動apply這些歸檔的日誌檔案。

 

non-managed standby environment

這是primary資料庫的第二種模式,處於這種模式下的主資料庫將對線上日誌檔案進行自動歸檔,但並不把它傳輸到standby資料庫。

 

managed recovery mode

這是standby資料庫的第一種模式。oracle 8i一般處於這種模式,這是8i的新特性。系統自動apply從primary資料庫來的最新的歸檔日誌檔案到standby資料庫。我們可以使用recover managed standby database timeout 10命令修改系統自動apply新log的時間間隔,這裡時間間隔被改成了10分鐘,預設為15秒。

 

manual recovery mode

這是standby資料庫的第二種模式。必須使用RECOVER STANDBY DATABASE命令手工apply從primary資料庫來的歸檔的日誌檔案。

 

open read only模式

這是standby資料庫的第三種模式。僅僅允許對standby資料庫進行select操作,但不允許update操作。此時不能apply從primary資料庫來的歸檔的日誌檔案。如果使用者需要apply,必須重新使資料庫進入standby mode或managed standby mode。

 

文件約定:

藍色標題的部分表示在主機上進行的操作,綠色標題的部分表示在備機上進行的操作。

灰色底紋的內容為在命令列視窗內操作的內容。

常量定義:

常量

說明

%PRI_SID%

主機資料庫的SID

%STD_SID%

備機資料庫的SID

%PRI_INIT%

主機的初始化引數檔案

%STD_INIT%

備機的初始化引數檔案

%PRI_SYS_PASSWORD%

主機資料庫Sys使用者的密碼

%STD_SYS_PASSWROD%

備機資料庫Sys使用者的密碼

%PRI_ARCHIVE_LOG_PATH%

主資料庫的歸檔日誌存放的位置

%STD_ARCHIVE_LOG_PATH%

備資料庫的歸檔日誌存放的位置

%ARCHIVE_LOG_FORMAT%

歸檔日誌檔名稱的格式(%T_%S.ARC)

%STD_CONTROL_PATH%

備機的控制檔案存放的位置

%STD_DATA_PATH%

備機資料檔案存放的位置

%PRI_LOG_PATH%

主機聯機日誌存放的位置

%STD_LOG_PATH%

備機聯機日誌存放的位置

%PRI_STD_NAME%

主機上配置的備機的連線字串的名稱

%STD_STD_NAME%

備機上配置的備機的連線字串的名稱

%STD_SYSTEM_LOG_PATH%

備機系統日誌存放的位置

%STD_PROFILE_PATH%

備機初始化引數檔案存放的位置

%PRI_ORACLE_HOME%

主機Oracle的主目錄

%STD_ORACLE_HOME%

備機Oracle的主目錄

%STD_IP_ADDRESS%

備機的IP地址

%STD_LISTEN_PORT%

備機監聽埠

操作前請確定好這些常量的資料。


 

DataGuard的建立 1-確定資料庫版本以管理員使用者的身份執行以下的語句來確定資料庫的版本:

SQL>Select * From v$Version

2-安裝資料庫軟體安裝資料庫軟體,要保證資料庫軟體的版本與主機的一致。

3-建立指向備機的資料庫連線資訊

在主機中的%PRI_ORACLE_HOME%\Network\Admin\Tnsnames.Ora增加以下的內容

%PRI_STD_NAME% =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = %STD_SID%)

    )

  )

4-確定主機資料庫的執行模式

確定主機資料庫執行在歸檔日誌模式下,並且歸檔日誌的檔案命名格式不要與資料庫的SID相關。

確定資料庫是否執行在歸檔日誌模式下

DOS>sqlplus /nolog

SQL>connect sys/%PRI_SYS_PASSWORD%@%PRI_SID% as sysdba

SQL>archive log list

如果資料庫沒有執行在歸檔日誌模式下,那麼按照下面的步驟將資料庫設定到歸檔日誌模式下。

修改主資料庫的初始化檔案%PRI_INIT%增加以下的內容

Log_Archive_Start=True

Log_Archive_Format=%ARCHIVE_LOG_FORMAT%

Log_Archive_Dest_1=” LOCATION =%PRI_ARCHIVE_LOG_PATH%”

Log_Archive_Dest_State_1=enable

Log_Archive_Dest_2=”SERVICE=%PRI_STD_NAME% reopen=60”

Log_Archive_Dest_State_2=enable

在SQL PLUS視窗中執行以下的命令

SQL>Alter Database Close;

SQL>Alter Database Archivelog;

SQL>Shutdown Immediate;

SQL>Archive log list

SQL>Startup;

SQL>Alter System Switch Logfile;

檢視資料是否處於歸檔日誌模式,同時在設定的%PRI_ARCHIVE_LOG_PATH%目錄中是否生成了歸檔日誌檔案。

5-對主資料庫進行一次全熱備份

使用資料庫備份工具操作,在備機上執行。備份檔案的位置放到%STD_DATA_PATH%

6-確定要備份到備機的資料檔案的位置和名稱

將臨時表空間檔案複製到備機的%STD_DATA_PATH%目錄下。

將聯機日誌檔案複製到備機的%STD_LOG_PATH%目錄下。

將初始化引數檔案複製到備機的%STD_PROFILE_PATH%目錄下並且更名為%STD_INIT%。

這些檔案可以聯機複製,資料檔案和控制檔案不可以。

建立備機的控制檔案

SQL>Alter Database Create Standby Controlfile As ‘C:\STD.CTL’

將生成的Std.CTL檔案複製到備機的%STD_CONTROL_PATH%目錄下,同時建立兩個一樣的備份。

7-修改備庫初始化引數檔案

修改Control_Files引數,將相關的路徑和檔名改為備機上的配置。

刪除Log_Archive_Dest_2、Log_Archive_Dest_State_2和Log_Archive_Dest_State_1的配置資訊。

修改Log_Archive_Start = Flase

修改Log_Archive_Dest_1 = "Location=%STD_ARCHIVE_LOG_PATH%"

增加Standby_Archive_Dest="%STD_ARCHIVE_LOG_PATH%"

standby_archive_dest = "C:\oracle\oradata\ora8db2\archive"

不要加location,否則無法歸檔

增加LOG_FILE_NAME_CONVERT =( '%PRI_LOG_PATH%', '%STD_LOG_PATH%' )

增加Background_Dump_Dest="%STD_SYSTEM_LOG_PATH%"

增加User_Dump_Dest="%STD_SYSTEM_LOG_PATH%"

8-建立備機資料庫的監聽

確定%STD_ORACLE_HOME%\Network\Admin下是否有Listener.Ora,如果沒有則將一下的內容儲存到%STD_ORACLE_HOME%\Network\Admin\Listener.Ora檔案中。

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

      )

      (ADDRESS_LIST =

        (ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))

      )

    )

    (DESCRIPTION =

      (PROTOCOL_STACK =

        (PRESENTATION = GIOP)

        (SESSION = RAW)

      )

      (ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = 2481))

    )

  )

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = %STD_ORACLE_HOME%)

      (PROGRAM = extproc)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = %STD_SID%)

      (ORACLE_HOME = %STD_ORACLE_HOME%)

      (SID_NAME = %STD_SID%)

    )

  )

如果有,則將下面的內容追加到%STD_ORACLE_HOME%\Network\Admin \Listener.Ora檔案中的SID_LIST_LISTENER段中。

(SID_DESC =

      (GLOBAL_DBNAME = %STD_SID%)

      (ORACLE_HOME = %STD_ORACLE_HOME%)

      (SID_NAME = %STD_SID%)

)

9-建立備機的資料庫連線字串

在備機中的%STD_ORACLE_HOME%\Network\Admin\Tnsnames.Ora增加以下的內容。如果該檔案不存在則建立改檔案。

%STD_STD_NAME% =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = %STD_SID%)

    )

  )

10-建立備機的密碼檔案

直接拷貝主機的密碼檔案也可以

DOS>orapwd filename=%STD_ORACLE_HOME%\Database\pwd%STD_SID%.ora password=%STD_SYS_PASSWORD%

11-建立備機資料庫的Windows服務

DOS>Oradim –NEW –SID %STD_SID% –STARTMODE manual

12-啟動監聽,並檢查狀態

如果是在本機上操作,那麼執行一下的命令啟動監聽,如果要重啟,要到windows服務裡面重啟

DOS>Lsnrctl Start

如果是在遠端桌面上操作,那麼執行一下的命令啟動監聽

DOS>Sc Start 監聽服務的名字

執行以下的命令,檢視監聽是否正常工作

DOS>Lsnrctl Status

13-測試是否能夠連線到備機

執行以下的命令,測試網路連線

DOS>Tnsping %PRI_STD_NAME%

14-啟動備機資料庫

DOS>sqlplus /nolog

SQL>connect sys/%STD_SYS_PASSWORD%@%STD_STD_NAME% as sysdba

SQL>Startup Nomount PFile = ’%STD_PROFILE_PATH%\%STD_INIT%’;

SQL>Alter Database Mount Standby Database;

15-更新備機資料庫的資料檔案存放資訊

SQL>Alter Database Rename File ‘主機上的位置’ To ‘備機上的位置’;

要將主機上DBA_DATA_FILES中的全部資料檔案逐個按照上面的模式執行一次。

例如:主機上的檔案為C:\Oracle\Ora81\OraData\System.Ora,在備機上存放的位置為E:\StdDB\Data\System.Ora,那麼對應的語句就是

SQL>Alter Database Rename File ‘C:\Oracle\Ora81\OraData\System.Ora’ To ‘E:\StdDB\Data\System.Ora’;

16-重新整理歸檔日誌,檢視是否正確更新到備機上

以System使用者模式執行以下的命令

SQL>Alter System Switch Logfile;

執行完畢後,檢視備機的%STD_ARCHIVE_LOG_PATH%下是否有日誌檔案生成。

在主庫上執行以下語句檢視歸檔是否出錯,或者看警告檔案

SQL> select status, error from v$archive_dest where dest_id=2;

STATUS    ERROR

--------- -----------------------------------------------------------------

VALID

17-同步資料庫記錄

SQL>Recover Standby Database;

這是手工應用日誌的模式,因為我們的standby資料庫跟主庫時間點不一致,所以我先手工的應用所需的日誌,然後按照提示顯示的檔案編號,將從該檔案以後生成的所有歸檔日誌檔案從主機上覆制到備機的%STD_ARCHIVE_LOG_PATH%中,然後輸入Auto執行同步操作。

18-將資料庫設定成自動應用模式

SQL>Recover Managed Standby Database;

執行完17步,備庫跟主庫就同步了,以後就可以讓備庫自動應用主庫推過來的日誌了,執行完本操作後,自動應用歸檔,程式將處於“掛起”狀態,請不要關閉程式執行視窗。

19-檢查DataGuard工作是否正常

檢查%STD_SYSTEM_LOG_PATH%下的日誌檔案,看是否現實在不斷的更新新的歸檔日誌資料到資料庫中。

 

DataGuard資料庫的啟動和關閉 20-DataGuard資料庫的關閉

DOS>sqlplus /nolog

SQL>connect sys/%STD_SYS_PASSWORD%@%STD_STD_NAME% as sysdba

SQL> Recover Managed Standby Database Cancel;

SQL>Shutdown Immediate;

21-DataGuard資料庫的啟動

從建立步驟的第12步開始執行,一直到第19步為止。

 

 

 

  

 

 

說明:

===========

 

- 要保持standby資料庫處於最新狀態,可以手工把primary資料庫產生的archived redo logs拷貝到standby主機並apply,這個工作最後通過batch job完成。

 

- 在primary資料庫所做的任何改變都必須在standby資料庫完成,如果在primary資料庫增加了資料檔案則在standby資料庫也必須在standby資料庫增加相應的檔案或把primary資料庫的檔案拷貝到standby資料庫,如果standby資料庫不能找到相應的datafile,則在恢復的過程中會產生ORA-1157錯誤。使用以下語句為standby資料庫建立新檔案:

  ALTER DATABASE CREATE DATAFILE  

 

- 在standby資料庫,任何Offlined狀態的檔案將不能被恢復,在standby資料庫出現個別檔案損壞時我們可能需要這麼做。

 

- 你可以在primary資料庫增加或減少online redo log而不對standby資料庫造成影響。

 

- 如果primary資料庫被修改成MTS或OPS資料庫,則你必須重建standby資料庫的controlfile (可以按照上面的第2步進行).

 

- 如果在primary資料庫使用了 ALTER DATABASE CLEAR UNARCHIVED LOGFILE語句或做了不完全恢復(ALTER DATABASE OPEN RESETLOGS),則standby資料庫的日誌將會出現中斷,此時需要按照以上的所有步驟重建standby資料庫。

 

- 如果在primary資料庫使用ALTER DATABASE CREATE CONTROLFILE ,則你必須重建standby資料庫的controlfile,使用以下步驟:

  1、shut down standby資料庫。2、在 primary資料庫 使用ALTER DATABASE ARCHIVE LOG CURRENT對當前日誌進行歸檔。3、拷貝primary資料庫產生的歸檔日誌到standby主機。4、在standby主機做以下操作:  STARTUP NOMOUNT, ALTER DATABASE MOUNT STANDBY DATABASE,  RECOVER STANDBY DATABASE.

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8554499/viewspace-591564/,如需轉載,請註明出處,否則將追究法律責任。

相關文章