日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

ORACLE 修改字符集

 昵稱5963617 2011-02-25

EXP遇到ORA-06552錯誤的解決( PLS-553: character set name is not recognized)2009-05-08 16:51有一個建好的數(shù)據(jù),Oracle 9.2.0.4 for linux,字符集是缺省的WE8ISO8859P1,沒有改成ZHS16GBK. 庫中暫時沒有任何數(shù)據(jù)。

由于字符集不是超集/子集關(guān)系,無法通過ALTER DATABASE CHARACTER SET修改字符集。

當(dāng)時時間緊張,就沒有重建數(shù)據(jù)庫,而是直接修改prop$表,將NLS_CHAR字符集改為ZHS16GBK。
update props$ set value$='ZHS16GBK' where name='NLS_CHARACTERSET';
重啟后建表、insert數(shù)據(jù),一切正常。。。直到今天要exp出數(shù)據(jù)。

執(zhí)行 exp userid=system owner=username ... 報錯!
即將導(dǎo)出指定的用戶…
. 正在導(dǎo)出 pre-schema 過程對象和操作
. 正在導(dǎo)出用戶 USERNAME 的外部函數(shù)庫名稱
. 導(dǎo)出 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: 導(dǎo)出終止失敗

隱隱感覺與當(dāng)時的字符集設(shè)置有關(guān)。http://www./special/NLS_CHARACTER_SET_03.htm: “正式修改字符集時,Oracle至少需要更改12張數(shù)據(jù)字典表,而這種直接更新props$表的方式只完成了其中十二分之一的工作,潛在的完整性隱患是可想而知的。”


但是如何解決呢?后來搜索到未公開的INTERNAL_USE用法,強(qiáng)制完成字符集一致化,解決了問題。


首先,確認(rèn)字符集是否修改的不徹底。
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);

如果上面的查詢的確顯示有多個字符集的設(shè)定,則進(jìn)行如下處理:
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是沒有寫在文檔中的參數(shù),用以強(qiáng)制完成字符集一致化
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET;

SHUTDOWN IMMEDIATE;
STARTUP;
-- 再次啟動數(shù)據(jù)庫一遍
SHUTDOWN IMMEDIATE;
STARTUP;

至此,EXP問題得到了解決。

注意:修改字符集只是修改了數(shù)據(jù)字典,并沒有對數(shù)據(jù)進(jìn)行字符集轉(zhuǎn)換!
 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多