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

junsansi發表於2009-05-21

前文連結:
物理Standby資料庫的檔案路徑轉換(1)--*_FILE_NAME_CONVERT 引數什麼時候生效的呢

==========================================

2、 STANDBY_FILE_MANAGEMENT 引數的值很重要

  看了前面的例子,相信會對scott01.dbf檔案印象深刻。這傢伙不知道是哪位大員的表親或內侍,反正後臺相當強硬,*_file_name_convert這麼彪悍的實權派都耐何不了它。偷偷告訴你,後臺老闆有可能是STANDBY_FILE_MANAGEMENT喲。話不多說,直接看示例:

  手動修改資料檔案路徑:

    JSSPDG> alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF';

    alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF'

    *

    ERROR at line 1:

    ORA-01511: error in renaming log/data files

    ORA-01275: Operation RENAME is not allowed if standby file management is automatic.

  注意檔案路徑喲。

  命令執行報錯,提示需要修改standby file maangement引數為手動,好吧,聽它的:

    JSSPDG> show parameter standby

    NAME                                 TYPE        VALUE

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

    standby_archive_dest                 string      %ORACLE_HOME%\RDBMS

    standby_file_management              string      AUTO

    SQL> alter system set standby_file_management = MANUAL;

    System altered.

  然後再次執行修改:

    JSSPDG> alter database rename file ' F:\ORACLE\ORADATA\JSSBOOK\USERS01.DBF ' to 'L:\ORADATA\JSSPDG\USERS01.DBF';

    Database altered.

  成功,然後再次檢視當前檔案路徑:

    JSSPDG> show parameter db_file_name_convert;

    NAME                                 TYPE        VALUE

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

    db_file_name_convert                 string      

    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

    L:\ORADATA\JSSPDG\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

  顯式手動修改檔案路徑後,即使不設定檔案轉換的引數,顯示的也是正確的路徑了(廢話,我們手動指定了嘛,當然指定成什麼就顯示什麼)。

  注意這個顯式手動指定的概念,這個包含的範圍是很廣的,不僅僅是我們手動通過alter database命令修改,alter tablespace修改肯定也好使。另外還有一條,就是standby_file_management引數的初始功能。該引數其實就用來同步Primary資料庫與物理Standby資料庫,當有表空間或資料檔案修改操作時,是否自動同步到Standby端,預設情況下是AUTO,也就是自動同步。如果是AUTO狀態,自動繼承自Primary資料庫的修改,那麼這部分檔案的路徑儲存在Standby資料庫的控制檔案中時,仍然是Primary資料庫時的路徑,顯示時受制於*_file_name_convert引數的影響。受制於篇幅,這裡就不演示standby_file_management引數在Primary和物理Standby間自動同步表空間、資料檔案修改時的狀態了,如果有興趣,你可以私下自行測試。

  另外,有沒有可能,前面不生效是由於db_file_name_convert引數設定不適當造成的呢?之前都是對f:\oracle.....路徑進行轉換,修改一下初始化引數,顯式指定l:\oradata\jsspdg試一試呢:

    JSSPDG> alter system set db_file_name_convert='L:\ORADATA\JSSPDG\','L:\ORADATA\JSS\',' F:\ORACLE\ORADATA\JSSBOOK \','L:\ORADATA\JSS\' Scope=spfile;

    System altered.

  重新啟動物理Standby資料庫(沒辦法,convert引數均無法即時生效):

    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

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

    L:\ORADATA\JSS \SYSTEM01.DBF

    L:\ORADATA\JSS \UNDOTBS01.DBF

    L:\ORADATA\JSS \SYSAUX01.DBF

    L:\ORADATA\JSSPDG\USERS01.DBF

    L:\ORADATA\JSSPDG\SCOTT01.DBF

  未顯式修改過的檔案的路徑已經做了轉換,但其它兩個檔案的路徑毫無變化,看起來對於這類檔案手動指定過的檔案路徑,即使設定*_file_name_convert引數,也無法對它們的檔案路徑做轉換。如果這類檔案路徑有誤或需要修改,唯一的方式,只能是顯式通過SQL命令手動修改其路徑。接著,我們再來探討一個問題,什麼情況下*_file_name_convert引數能夠"真正"起作用呢?

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

相關文章