|
上回说到修改数据库字符集,修改过之后,倒入数据中的中文能够正常显示了,自以为大功告成,谁知,在做数据导出时出错了 $S"zxEJJ Y
EXP-00008: 遇到 ORACLE 错误 6552 sV{b9=Wvk
ORA-06552: PL/SQL: Compilation unit analysis terminated L L$ElM$7
ORA-06553: PLS-553: character set name is not recognized @kJun\5:
EXP-00000: 导出终止失败 _qdNu@e>
g8ETbfW91
查了下,原来是上次修改数据库字符集的后遗症,在网上查找了处理方法,处方如下: H~`o~nQrX
首先,确认字符集是否修改的不彻底。 mZqpypV[
Po;#w
SELECT DISTINCT (NLS_CHARSET_NAME(CHARSETID)) CHARACTERSET, uM1C|h)`Bc
DECODE(TYPE#,
svHuFXfb
1, E]DgyeEa
B
DECODE(CHARSETFORM, 3'*}Kdh7-
1,
pX;q"`
'VARCHAR2', 2C3?Uc0
2, ,&kU\1fw
'NVARCHAR2', !|
Y*a(9
'UNKOWN'), |d[3)mHQr
9, kbjKT$>
DECODE(CHARSETFORM, fIkZVd;
1, [:-pZ 16uu
'VARCHAR', jC1#&){x
2, xNA"?dw=O]
'NCHAR VARYING', *
*\:{d
'UNKOWN'), E
kZ`&af>
96, Q<[HwY6o9
DECODE(CHARSETFORM, 1, 'CHAR', 2, 'NCHAR', 'UNKOWN'), 6:ye73=h8
112, Pi h\~}!T.
DECODE(CHARSETFORM, 1, 'CLOB', 2, 'NCLOB', 'UNKOWN')) TYPES_USED_IN CT:J~<%O}
FROM SYS.COL$ In)U@
Ta
WHERE CHARSETFORM IN (1, 2) :1cH<5iC
AND TYPE# IN (1, 9, 96, 112); y|9O]>
D]T]u.]
CHARACTERSET TYPES_USED_IN OKa-:DKy
-------------------- ------------- 3+
d|8:hF
AL16UTF16 NCHAR ^dh!?=%L
AL16UTF16 NCLOB 9:4X]No<F
AL16UTF16 NVARCHAR2 @"Hw
{
ZHS16GBK CHAR [CV5*PP,wi
ZHS16GBK VARCHAR2 6?kF"/~
WE8ISO8859P1 CHAR ILU6M@%L
WE8ISO8859P1 CLOB nPuCi}AN
WE8ISO8859P1 VARCHAR2 UK*cAf=}
W[,3<|`T
8 rows selected. PyH "*Kx"
确实在数据库的列属性中仍然存在着多个字符集的设定,这是导致exp失败的原因。下面解决这个问题。 eY|#V}8w2
7g(ZXwFI-5
SHUTDOWN IMMEDIATE; -EE!TLS!
STARTUP MOUNT; *&4NJ
g9(d
ALTER SYSTEM ENABLE RESTRICTED SESSION; S
BwZM,D
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; [G
KdJm
ALTER SYSTEM SET AQ_TM_PROCESSES=0; qQnzA<
ALTER DATABASE OPEN; tz;{'M7U;
I]_ Tg7c:
HH:3'Ps;5
COL VALUE NEW_VALUE CHARSET MSeYP6\G):
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'; }}S&Sbo
COL VALUE NEW_VALUE NCHARSET +/uX62M
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NCHAR_CHARACTERSET'; <3R$<b._-
Aq>6o!QC/
--INTERNAL_USE是没有写在文档中的参数,用以强制完成字符集一致化 Z{}`w
ALTER DATABASE CHARACTER SET INTERNAL_USE &CHARSET; J\ bSHo ~
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE &NCHARSET; n6kFSj~T
7kyc0/u8
q`ZS2)s~G
SHUTDOWN IMMEDIATE; IJ]:\A1
STARTUP; 'ia
RLA
,
-- 再次启动数据库一遍 ?rY )]
SHUTDOWN IMMEDIATE; PN:hF1t v
STARTUP; >g,xnHOjS
按照上面的步骤,一步一步来,一步不要少,完成以后,重新检索col$表。 P %hfaA)
2>RPH_P%NO
CHARACTERSET TYPES_USED_IN BTtHLSL
-------------------- ------------- ]|Vo;c
AL16UTF16 NCHAR #~!Xys3*
AL16UTF16 NCLOB ZSBk2Q=Ns
AL16UTF16 NVARCHAR2 ^+{:3
ZHS16GBK CHAR TQ
npFM
ZHS16GBK CLOB Mi\T N9
ZHS16GBK VARCHAR2 }H?+43
干净了,再次运行exp,大功告成。 gQO7vK{q
感谢网上提供处理方法的兄弟啊:) sTz]yy#g
|
一共有 4 条评论
发表评论