Oracle 12c中DBCA搭建备库体验(r11笔记第92天)
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部分截止,后期的工作职能通过定制脚本等方式来实现了。与其如此,还不如用我自己之前写脚本,最起码能够达到基本的可控和规范。
这个特性本身是一个不错的想法,但是在这个特定的版本环境下,竟然有点华而不实,而退开一步来看,其实有些配置还达不到目前我们要求的一个配置要求,所以了解学习一下还是必要的,但是不隆重推荐给大家使用。
- 使用JDBC向Kudu表插入中文字符-双引号的秘密
- Yarn的JobHistory目录权限问题导致MapReduce作业异常
- 输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止
- Linux基础(day76)
- zabbix设置QQ邮箱告警
- 关于JSON CSRF的一些思考
- linux学习第七十篇:expect脚本同步文件,expect脚本指定host和要同步的文件,构建文件分发系统,批量远程执行命令
- linux学习第六十九篇:分发系统介绍,expect脚本远程登录,expect脚本远程执行命令,expect脚本传递参数
- linux学习第六十八篇:告警系统邮件引擎,运行告警系统
- linux学习第六十七篇:告警系统主脚本,告警系统配置文件,告警系统监控项目
- linux学习第六十六篇:shell中的函数,shell中的数组,告警系统需求分析
- linux学习第六十五篇:for循环,while循环, break跳出循环,continue结束本次循环
- linux学习第六十四篇:Shell脚本中的逻辑判断,文件目录属性判断, if特殊用法,case判断
- linux学习第六十三篇:Shell脚本介绍,Shell脚本结构和执行,date命令用法,Shell脚本中的变量
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flask单点登录竟然只要几行代码就能搞定!
- 区间调度问题
- 迷宫的最短路径
- Lake Counting (POJ No.2386)
- 部分和问题(DFS)
- 为什么 React Hooks useState 更新不符预期?
- 技术分享 | MySQL 使用 MariaDB 审计插件
- 第12期:压缩表性能监测
- 第05期:使用 prometheus 监控 clickhouse 集群
- 这 6 点知识让我对 JavaScript 的对象有了更进一步的了解
- Linux进程间通信(中)之信号、信号量实践
- Linux进程间通信(下)之共享内存实践
- 手把手教你快速使用Vmware虚拟机安装Linux操作系统实验环境
- 天啊!鹅厂都开始做开发板了?网红腾讯物联网开发板终极开箱评测,让我们一睹为快!
- 我用 React 和 Vue 构建了同款应用,来看看哪里不一样(2020 版)