400-920-0692
技术资源

最近一个客户搭建了一套Redhat7.2+11.2.0.4RAC,搭建完成数据库运行也都正常。由于服务器内存很大,cpu数量也很多。客户希望通过建立多套数据库来充分利用硬件资源。一天,客户工程师突然给我打电话反应,dbca图形界面建库只能看到一个节点,不能出现集群模式。根据经验,我电话中让检查oracledatabase主目录的owner是不是oracle,以往经验,oracle database的主目录的owner如果不是oracle,那么可能会出现这个问题。

客户赶紧确认,发现一切都正常,而且客户反应,之前已经创建了10套数据库,也都是正常。接下来,我电话中让客户工程师检查资源使用情况,发现资源利用率也不高,考虑到之前10套数据库都可以创建成功,理论上再创建第11套应该也不会有问题,如果说一台服务器上允许运行的实例数有限制,那如果关闭一套应该就可以继续创建一套新的数据库。基于这个猜想,我电话建议客户关闭一套数据库,重新运行dbca,这时候居然成功的出现了集群建库界面。问题临时解决了,接下来就是到了分析原因的阶段。

为了确认oracle11.2.0.4Redhat7.2上是否真的有最大实例限制,我们向oracle开了SR。并且说明我们之前有一套Redhat6.5+11.2.0.4的环境上运行了23套数据库,并未出现dbca建库超过10套无法出现集群界面。经过oracle工程师的分析,给出的答复如下:

我们检查了CVU的输出信息,当前kenerl.sem值是按照oracle推荐设置的,可以满足正常的安装,是没有问题。我在内部资料库检索到一个类似的bug: Bug 23526058 : LXC: DBCA FAILED FORORA-27301: OS FAILURE MESSAGE: NO SPACE LEFT ON DEVICE

这个bug的原因是code层面错误的计算了OS信号量,导致DBCA认为资源不足。这个问题在未来12.2以后的版本中修复了,但是在11.2版本由于这个code关联几个领域, oracle DEV不建议修改。

这个问题只有在DBCA阶段会出现,DBCA创建好数据库之后,以后启动数据库没有问题,基于现有情况,我们非常推荐按照客户之前的解决方法/workaround,先关闭一个数据库,然后再运行dbca创建新的数据库,DBCA创建完成新的数据库之后,以后可以正常启动/停止所有的数据库。

由上可知,这次诡异的dbca建库问题,最终又是一个很难理解的bug导致的,解决办法就是关闭数据库到9个以下,然后dbca建库即可。特别说明,这个问题在Linux6.x+11.2.0.4的平台并没有出现,只发生在Redhat7.2+11.2.0.4环境。除此之外,本人不建议在一套集群中运行太多数据库,建议将一些小库以schema的方式进行整合,从而降低维护成本。一般来说,一套集群尽量控制数据库的数量在10个以内,即使硬件资源很充足,个人推荐3-5套数据库比较合适。