Oracle 12c中DBCA搭建备库体验(r11笔记第92天)
公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2017-03-03 23:49:19 · 原文链接
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 –createAsStandbyDISPLAY 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 stest12cEnter 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 step33% completeAuxiliary instance creation66% completeRMAN duplicateDBCA Operation failed.最后还是失败了,这个地方牵扯到一些网络的配置原因。
当然翻看日志可以很快定位出一些方向,但是实际上的操作让我感觉到,网络的配置不是我期望的那么规范,而最重要的是,最后完成的不是DG的搭建,就如同这个命令选项所说,只是Duplilcate,Data Guard的配置没有,主备库都不用自动启用DG Broker,对于搭建Data Guard的一个最佳实践其实DG Broker就是一个很不错的选择,而在这里似乎没有找到我期望中的亮点。
所以我感觉这个特性目前对于我而言,没有想象中那么好。而我手工尝试搭建了下,实际上几分钟也能达到同样那个命令的效果,因为只在duplicate部分截止,后期的工作职能通过定制脚本等方式来实现了。与其如此,还不如用我自己之前写脚本,最起码能够达到基本的可控和规范。
这个特性本身是一个不错的想法,但是在这个特定的版本环境下,竟然有点华而不实,而退开一步来看,其实有些配置还达不到目前我们要求的一个配置要求,所以了解学习一下还是必要的,但是不隆重推荐给大家使用。
