ORA-06552错误的解决
来源:互联网 发布:九本满防防御数据 编辑:程序博客网 时间:2024/04/29 02:06
有一个建好的数据,Oracle 9.2.0.4 for linux,字符集是缺省的WE8ISO8859P1,没有改成ZHS16GBK. 库中暂时没有任何数据。
由于字符集不是超集/子集关系,无法通过ALTER DATABASE CHARACTER SET修改字符集。
当时时间紧张,就没有重建数据库,而是直接修改prop$表,将NLS_CHAR字符集改为ZHS16GBK。
update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
重启后建表、insert数据,一切正常。。。直到今天要exp出数据。
执行 exp userid=system owner=username ... 报错!
即将导出指定的用户…
. 正在导出 pre-schema 过程对象和操作
. 正在导出用户 USERNAME 的外部函数库名称
. 导出 PUBLIC 类型同义词
EXP-00008: 遇到 ORACLE 错误 6552
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-553: character set name is not recognized
EXP-00000: 导出终止失败
隐隐感觉与当时的字符集设置有关。http://www.eygle.com/special/NLS_CHARACTER_SET_03.htm: “正式修改字符集时,Oracle至少需要更改12张数据字典表,而这种直接更新props$表的方式只完成了其中十二分之一的工作,潜在的完整性隐患是可想而知的。”
但是如何解决呢?后来搜索到未公开的INTERNAL_USE用法,强制完成字符集一致化,解决了问题。
首先,确认字符集是否修改的不彻底。
SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET,
DECODE(TYPE#, 1,
DECODE(CHARSETFORM, 1, 'VARCHAR2', 2, 'NVARCHAR2', 'UNKOWN'),
9,
DECODE(CHARSETFORM, 1, 'VARCHAR', 2, 'NCHAR VARYING', 'UNKOWN'),
96,
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'),
112,
DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN
FROM SYS.COL$
WHERE CHARSETFORM IN (1, 2)
AND TYPE# IN (1, 9, 96, 112);
如果上面的查询的确显示有多个字符集的设定,则进行如下处理:SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
COL VALUE NEW_VALUE CHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
COL VALUE NEW_VALUE NCHARSET
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET';
--INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;
SHUTDOWN IMMEDIATE;
STARTUP;
-- 再次启动数据库一遍
SHUTDOWN IMMEDIATE;
STARTUP;
至此,EXP问题得到了解决。
注意:修改字符集只是修改了数据字典,并没有对数据进行字符集转换!
- ORA-06552错误的解决
- ORA-04080 错误的解决
- ORA-12537错误的解决
- ORA-12638错误的解决
- ORA-12514: 错误的解决
- ORA-30036 的错误解决
- 一次ora-12560错误的解决过程!
- 11g的ORA-00845错误解决
- ORA-01940错误的解决过程
- 一则ORA-12500错误的解决案例
- ORA-600(17069)错误的解决过程
- ORA-00257的错误代号及解决
- Oracle Stream ORA-01403 错误的解决
- [转]ORA-12638错误的解决
- Streams复制的ORA-01341错误解决
- ORA-04031错误的解决思路
- ORA-01589错误的解决过程
- ORA-08103错误的解决过程
- IOS之——判断设备是否越狱
- sliverlight-Resources-2
- TCP NAT 穿透原理相关文档
- NYOJ-453 小珂的烦恼【模拟||找规律】
- 业务规则引擎-jboss Drools Expert
- ORA-06552错误的解决
- JS中的instanceof和typeof
- Ext核心API详解-Ext.tree.TreePanel
- 对项目质量的无止境追求---读《微软的秘密》有感
- Sharepoint2010-常用方法技巧总结
- [Silverlight学习记录]Resources-1
- Ext.form.ComboBox最常用的一些属性和方法
- 异常来自 HRESULT:0x80040E14
- objective C中的@class, SEL , IMP等灵活机制(五)