<b>EXP碰到ORA-06552错误的办理-性能调优</b>[Oracle防范]
本文“<b>EXP碰到ORA-06552错误的办理-性能调优</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
有一个建好的数据,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: 导出终止失利
隐隐感受与当时的字符集设置有关 "正式改正字符集时,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 |
——INTERNAL_USE是没有写在文档中的参数,用以强迫完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET; SHUTDOWN IMMEDIATE; |
—— 再次启动数据库一遍
SHUTDOWN IMMEDIATE; STARTUP; |
至此,EXP问题得到了办理.
注意:改正字符集只是改正了数据字典,并没有对数据举行字符集转换!
以上是“<b>EXP碰到ORA-06552错误的办理-性能调优</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |