Oracle 12c中DBCA搭建備庫體驗(r11筆記第92天)

jeanron100發表於2017-03-03

   Oracle 12c中DBCA有一個特性看起來蠻有意思,就是直接透過DBCA來搭建Data Guard,當然這麼說也有點噱頭,我們來實際看看。

  Oracle提供的官方命令結構如下:       dbca -createDuplicateDB
        -gdbName global_database_name
        -primaryDBConnectionString easy_connect_string_to_primary
        -sid database_system_identifier
        [-createAsStandby
            [-dbUniqueName db_unique_name_for_standby]]
        [-customScripts scripts_list]    至少我開始聽到的時候是很興奮的,真正看到這個幫助命令的時候還是很欣喜的,感覺一種要革命化的衝動,恨不得現在就在生產中馬上投入使用,實際上我看簡單了。

    部署兩套資料庫軟體,有了靜默安裝,有了克隆,這些都是分分鐘的事情。    使用dbca的help得到的命令解釋比官方文件更加細緻,還提供了引數示例,這個很難得。$ dbca –silent -createDuplicateDB -help
        -createDuplicateDB - Command to Duplicate a database.
                -gdbName <Global database name>
                -primaryDBConnectionString <EZCONNECT string to connect to primary database for example "host:port/servicename">
                -sid <Database system identifier>
                [-createAsStandby <Option to create a standby database>]
                        [-dbUniqueName <db_unique_name for standby db>]
                [-customScripts <A comma separated list of SQL scripts which needs to be run post db creation.The scripts are run in order they are listed>]
                [-datafileDestination <Destination directory for all database files>]
                [-initParams <Comma separated list of name=value pairs>]
                        [-initParamsEscapeChar <Specify escape character for comma when a specific initParam has multiple values.If the escape character is not specified backslash is the default escape character>]

然後我簡單修改了下就開始了DBCA,沒想到提示了下面的資訊。

$ dbca –silent -createDuplicateDB -primaryDBConnectionString  newtest.oracle.com:1521/test12c -gdbName test12c -sid test12c -initParams instance_name=test12c –createAsStandby
DISPLAY not set.
Set DISPLAY environment variable, then re-run.   這個剛開始感覺還挺納悶,最後發現我這個伺服器上安裝了多套環境,11g,12c並存,我竟然使用了11g的ORACLE_HOME,所以這個是個開篇的簡單問題,我們簡單跳過.

    簡單調整後繼續嘗試,發現這次的錯誤讓我大跌眼鏡。

$ dbca -silent -createDuplicateDB -primaryDBConnectionString  newtest.oracle.com:1521/test12c -gdbName test12c -sid test12c -initParams instance_name=test12c -createAsStandby -dbUniqueName stest12c
Enter SYS user password:
[FATAL] [DBT-16057] Specified primary database is a container database (CDB).
   CAUSE: Duplicate database operation is supported only for non container databases.
    竟然丟擲了一個致命錯誤,而主要原因就是DBCA不支援容器複製,在非容器資料庫環境下才可以。

    帶著疑問,再次開啟文件,發現這個命令開篇就解釋的很清楚了,明確表示了只支援非容器資料庫。The DBCA command qualifier used to create the physical standby database is createDuplicateDB .
DBCA can only be used to create standby databases for non-multitenant primary databases.    12c的亮點之一就是容器,而這個場景中我們只能使用非容器模式,然後搭建備庫,這個讓我的積極性消失了大半。

    究其原因,其實和12cR2裡面的PDB層面的特殊定製有關。有一個相關的引數ENABLED_PDBS_ON_STANDBY,在PDB的場景下,可做多重定製,實際上對線上應用來說,和我的預期還有一些差別。

   

   那麼我們牽強一下,是否能夠輕鬆完成非容器資料庫的Duplicate呢。這個地方實際上也讓我不大滿意。

我重新dbca初始化了1套環境,指定為非容器模式。

dbca -silent -createDatabase -templateName $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc -gdbname test12cs -sid test12cs  -characterSet UTF8  -createAsContainerDatabase false -sysPassword oracle -systemPassword oracle然後繼續使用上面的命令來嘗試建立DG,產生了下面的日誌。

Listener config step
33% complete
Auxiliary instance creation
66% complete
RMAN duplicate
DBCA Operation failed.最後還是失敗了,這個地方牽扯到一些網路的配置原因。

   當然翻看日誌可以很快定位出一些方向,但是實際上的操作讓我感覺到,網路的配置不是我期望的那麼規範,而最重要的是,最後完成的不是DG的搭建,就如同這個命令選項所說,只是Duplilcate,Data Guard的配置沒有,主備庫都不用自動啟用DG Broker,對於搭建Data Guard的一個最佳實踐其實DG Broker就是一個很不錯的選擇,而在這裡似乎沒有找到我期望中的亮點。

    所以我感覺這個特性目前對於我而言,沒有想象中那麼好。而我手工嘗試搭建了下,實際上幾分鐘也能達到同樣那個命令的效果,因為只在duplicate部分截止,後期的工作職能透過定製指令碼等方式來實現了。與其如此,還不如用我自己之前寫指令碼,最起碼能夠達到基本的可控和規範。

    這個特性本身是一個不錯的想法,但是在這個特定的版本環境下,竟然有點華而不實,而退開一步來看,其實有些配置還達不到目前我們要求的一個配置要求,所以瞭解學習一下還是必要的,但是不隆重推薦給大家使用。

   

  


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

相關文章