12C cdb同pdb字符集不同,导致pdb无法启动

来源:互联网 发布:龙与地下城ol 知乎 编辑:程序博客网 时间:2024/06/01 14:54

前言

今天在升级一个11g实例到12C并转换为PDB插入已有的一个CDB的过程中,升级转换过程都没有问题,在最后启动pdb的时候,提示如下错误:
SQL> alter pluggable database zlemr open;
警告: PDB 已变更, 但出现错误。

SQL> show pdbs    CON_ID CON_NAME                       OPEN MODE  RESTRICTED---------- ------------------------------ ---------- ----------         2 PDB$SEED                       READ ONLY  NO         3 ORCL                           READ WRITE NO         4 ZLEMR                          READ WRITE YES

问题分析

可以看到,ZLEMR实例虽然启动,但是只能在独占模式下启动,显然是存在问题的,我们通过alert日志查找更多的信息,发现启动时候,出现如下信息

alter pluggable database zlemr openThu Jun 23 14:32:21 2016***************************************************************WARNING: Pluggable Database ZLEMR with pdb id - 4 is         altered with errors or warnings. Please look into         PDB_PLUG_IN_VIOLATIONS view for more details.***************************************************************Opening pdb ZLEMR (4) with no Resource Manager plan activePluggable database ZLEMR opened read writeCompleted: alter pluggable database zlemr open


提示很清楚,叫我们去查询视图PDB_PLUG_IN_VIOLATIONS,该视图需要在CDB环境下去查询,否则没有内容,查询后发现如下错误

SQL> select name,type,message from  PDB_PLUG_IN_VIOLATIONs order by name; NAME        TYPE      MESSAGE-------------- --------- --------------------------------------------------------------------------------ZLEMR       ERROR     Character set mismatch: PDB character set AL32UTF8. CDB character set ZHS16GBK.ZLEMR       WARNING   Database option DV mismatch: PDB installed version NULL. CDB installed version 1ZLEMR       WARNING   Database option OLS mismatch: PDB installed version NULL. CDB installed version

重点看ERROR提示,信息很明确,提示的是PDB的字符集为AL32UTF8,而CDB的字符集为ZHS16GBK,看来在12C的情况下,CDB必须同其包含的PDB保持一致的字符集,否则无法启动。

解决途径

我们知道数据库的字符集更改不是简单的操作,以前按照MOS的操作更改过字符集,看着更改成果,但是结果后续在应用过程中却出现一些莫名其妙的问题,总之我是不建议手工修改数据库的字符集,如果确实要修改,也建议用oracle提供的dum工具操作,具体自己研究。

如果实例应用确实无法统一字符集,建议多创建几个CBD实例,将不同的字符集数据库插入不同的CBD实例中,当然这也增加了管理的复杂度,但是谁叫应用要求这么多呢?如果有兴趣深入研究的可以看看

0 0
原创粉丝点击