物理Standby資料庫的檔案路徑轉換(1)

junsansi發表於2009-05-20

  Dataguard 是項常見並且實用的技術,常規方式的配置非常簡單,基本上沒有太多技術問題,大部時間可能都會花在複製資料檔案的 IO 操作上,不過如果條件特殊,比如 Primary 資料檔案路徑與 Standby 路徑不一致,配置時還是有一些需要引起注意的地方。

  下面通過示例,演示當物理 Standby 資料庫與 Primary 資料庫路徑不同時的可能出現的問題。

  設定環境如下:

  • Primary 資料庫: JSSWEB ,檔案路徑在 F:\oracle\oradata\jssbook 目錄下
  • 物理 Standby : JSSPDG ,通過 Primary 備份建立,檔案路徑在 L:\oradata\jsspdg 目錄下
  • 物理 Standby : JSSLDG ,通過 JSSPDG 建立,檔案路徑在 L:\oradata\jss l dg 目錄下

1、 *_FILE_NAME_CONVERT 引數什麼時候生效的呢

  如果要建立的 Standby 資料庫與 Primary 資料庫的路徑無法保持一致, ORACLE 中的實現方式都是藉助引數,自動轉換資料檔案路徑。需要設定設定的引數有兩個: db_file_name_convert 和 log_file_name_convert ,分別用來轉換資料檔案路徑和重做日誌檔案路徑 ( 含聯機重做日誌檔案和 Standby 重做日誌檔案 ) 。不過設定初始化引數的方式在任何場合都好使嗎,答案是否定的,下面的演示能詳細說明這一點。

  物理 Standby JSSPDG ,檢視當前的路徑轉換引數設定:

    JSSPDG> show parameter convert;

    NAME                                 TYPE        VALUE

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

    db_file_name_convert                 string      F:\oracle\oradata\jssbook, L:\

                                                     oradata\jsspdg, L:\oradata\jss

                                                     pdg, F:\oracle\oradata\jssbook

    log_file_name_convert                string      F:\oracle\oradata\jssbook, L:\

                                                     oradata\jsspdg, L:\oradata\jss

                                                     pdg, F:\oracle\oradata\jssbook

  檢視當前資料檔案路徑:

    JSSPDG> select name from v$datafile;

    NAME

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

    L:\ORADATA\JSSPDG\SYSTEM01.DBF

    L:\ORADATA\JSSPDG\UNDOTBS01.DBF

    L:\ORADATA\JSSPDG\SYSAUX01.DBF

    L:\ORADATA\JSSPDG\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

    JSSPDG> select member from v$Logfile;

    MEMBER

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

    L:\ORADATA\JSSPDG\REDO01.LOG

    L:\ORADATA\JSSPDG\REDO02.LOG

    L:\ORADATA\JSSPDG\REDO03.LOG

    L:\ORADATA\JSSPDG\STDREDO01.LOG

    L:\ORADATA\JSSPDG\STDREDO02.LOG

    L:\ORADATA\JSSPDG\STDREDO03.LOG

    6 rows selected.

  運氣不錯,看起來路徑轉換正常。不過你有沒有想過,當前顯示的資料檔案、日誌檔案的路徑是否就是控制檔案中所儲存的路徑呢?

  答案是否定的,例如,嘗試修改檔案轉換引數:

    JSSPDG > alter system set  db _file_name_convert='' scope=spfile;

    System altered.

  重新啟動資料庫:

    JSSPDG > shutdown immediate

    ORA-01109: database not open

    Database dismounted.

    ORACLE instance shut down.

    JSSPDG > startup mount;

    ORACLE instance started.

    Total System Global Area  314572800 bytes

    Fixed Size                  1248720 bytes

    Variable Size              96469552 bytes

    Database Buffers          209715200 bytes

    Redo Buffers                7139328 bytes

    Database mounted.

  再次檢視日誌檔案的路徑:

    JSSPDG > select  name  from v$ datafile ;

    NAME

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

    F:\ORACLE\ORADATA\JSSBOOK\SYSTEM01.DBF

    F:\ORACLE\ORADATA\JSSBOOK\UNDOTBS01.DBF

    F:\ORACLE\ORADATA\JSSBOOK\SYSAUX01.DBF

    F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

  除了 scott01.dbf 外,其它檔案仍然顯示的是原路徑。 Scott01.dbf 為什麼能顯示正確的路徑後面再說。其它資料檔案顯示的路徑和當前 db_file_name_convert 引數的設定,結合來看至少能夠得出結論:物理 Standby 控制檔案中儲存的檔案路徑並不一定就是實際路徑,同時而 *_file_name_convert 引數也不是任何情況下均有效。下面我們就接著探討另一個話題,什麼情況下控制檔案中儲存的檔案路徑等於實際顯示的路徑呢?

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

相關文章