12C cdb同pdb字符集不同,导致pdb无法启动
Posted wenzhongyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12C cdb同pdb字符集不同,导致pdb无法启动相关的知识,希望对你有一定的参考价值。
前言
今天在升级一个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 open
Thu 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 active
Pluggable database ZLEMR opened read write
Completed: 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 1
ZLEMR 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实例中,当然这也增加了管理的复杂度,但是谁叫应用要求这么多呢?如果有兴趣深入研究的可以看看
以上是关于12C cdb同pdb字符集不同,导致pdb无法启动的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 19C同版本 non-cdb 转换为 cdb+pdb(DBMS_PDB.DESCRIBE方式)