EXP-00056: 遇到 ORACLE 错误 932 ORA-00932: 数据类型不一致: 应为 BLOB, 但却获得 CHAR 导出失败

EXP-00056: 遇到 ORACLE 错误 932 ORA-00932: 数据类型不一致: 应为 BLOB, 但却获得 CHAR 导出失败,第1张

是个bug,metalink解释如下

Full Export From 10.2.0.1 Aborts With EXP-56 ORA-932 (Inconsistent Datatypes) EXP-0 [ID 339938.1] Modified 30-MAR-2009 Type PROBLEM Status PUBLISHED In this Document

Symptoms

Cause

Solution

References

Applies to:Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.3

Oracle Server - Personal Edition - Version: 10.1.0.2 to 10.2.0.3

Oracle Server - Standard Edition - Version: 10.1.0.2 to 10.2.0.3

This problem can occur on any platform.

SymptomsA full database export from a Oracle10g database aborts with:...

. exporting cluster definitions

EXP-00056: ORACLE error 932 encountered

ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHAR

EXP-00056: ORACLE error 932 encountered

ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHAR

EXP-00000: Export terminated unsuccessfully

EXP-00000: Export terminated unsuccessfully

If export was started with SYS schema, a table level export may also fail with:...

Current user changed to TEST

. . exporting table DOC_ARCHIVE 16 rows exported

Current user changed to SYS

EXP-00011: SYS.does not exist

Export terminated successfully with warnings.CauseOne possible cause (note there might be others):Script $ORACLE_HOME/rdbms/admin/catmeta.sql has been run recently.There are several invalid SYS.KU$_% views in the dictionary:-- invalid objects:

SET lines 120 pages 2000

COL status FOR a9

COL object_type FOR a20

COL owner.object FOR a50

SELECT status, object_id, object_type, owner||'.'||object_name "OWNER.OBJECT"

FROM dba_objects

WHERE status != 'VALID' AND object_name NOT LIKE 'BIN$%'

ORDER BY 4,2

STATUS OBJECT_ID OBJECT_TYPE OWNER.OBJECT

--------- ---------- --------------- --------------------------------

INVALID 7105 PACKAGE BODYSYS.DBMS_METADATA

INVALID 6683 VIEWSYS.KU$_10_1_COMMENT_VIEW

INVALID 6788 VIEWSYS.KU$_10_1_IND_STATS_VIEW

INVALID 6778 VIEWSYS.KU$_10_1_PIND_STATS_VIEW

INVALID 6752 VIEWSYS.KU$_10_1_PTAB_STATS_VIEW

INVALID 6770 VIEWSYS.KU$_10_1_SPIND_STATS_VIEW

INVALID 6748 VIEWSYS.KU$_10_1_TAB_ONLY_STATS_VIEW

... (etc)

A query in SQL*Plus on sys.ku$_xmlschema_view also fails with ORA-932:SET lines 200 pages 2000

COL url FOR a60 WRA

SELECT url, local, stripped_val

FROM sys.ku$_xmlschema_view

ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHARSolutionFor reasons having to do with compatibility, the XDB objects cannot be created by the catproc.sql script. The script catproc.sql therefore calls the catmeta.sql script, which contains fake object views for XDB objects.

The real object views are defined in the catmetx.sql script (this script is invoked by catxdbv.sql which is invoked by catqm.sql).Solution #1

Run following scripts while connected as SYS user:>sqlplus /nolog

SQL>connect / as sysdba

SQL>@?/rdbms/admin/catmetx.sql

SQL>@?/rdbms/admin/utlrp.sql

SQL>exit

Afterwards, re-run the export.or:Solution #2

Run the export with the Export DataPump client. E.g.:>expdp system/manager directory=my_dir \

dumpfile=expdp_full.dmp logfile=expdp_full.log full=y

1. ASCII

用途:用来映射简单的单字节字符,比如大小写英文字母、阿拉伯数字、常用的标点符、运算符、控制字符等。

编码范围:U+0000 - U+007F

注意:对于用这类字符的场景够用了,但是却无法表达比如汉字,日文等编码。

2. UNICODE

用途:用来映射包含 ASCII 以内的其他的所有字符。

编码范围:U+0000 - U+10FFFF

注意:ASCII 是 UNICODE 的子集,ASCII 编码的字符可以无损转换为 UNICODE 编码的字符。

MySQL 常用字符集

1. Latin1

Latin1 是 cp1252 或者 ISO-8859-1 的别名。ISO-8859-1 编码是单字节编码,向下兼容 ASCII。

编码范围:U+0000 - U+00FF

ISO-8859-1 收录的字符除 ASCII 收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。

单字节内的空间都被 ISO-8859-1 编码占用,所以能够用 ISO-8859-1 编码存储、传输其他任何编码的字节流。

比如把一个 Utf8mb4 的编码或者 GBK 的编码存入 Latin1,不会有任何问题。因为 Latin1 保留了原始的字节流,这也就是 MySQL 长期以来把 Latin1 做默认字符集的原因。

但是由于 Latin1 对任何字符都存放字节流,造成了字符个数的浪费。

比如:

CHAR(10) CHARACTER SET LATIN1CHAR(10) CHARACTER SET UTF8

该字段中存储字符个数 UTF8 是 Latin1 的三倍!!!

2. GB18030

GB18030 是中国官方标准字符集,向前兼容 GBK、GB2312,是这两个的超集。用 1、2、4 个字节分别表示一个符号。比如对一般中文字符,默认是用两个字节编码存储。Windows 系统,默认用的就是 GB18030。

若只是存储中文字符,那 GB18030 最佳。

原因有两点:

1)占用空间小,比如比 UTF8 小。

2)存储的汉字根据拼音来排序,检索快。

3. UTF8

UTF8 是 Unicode 的编码实现,可以存储 UNICODE 编码对应的任何字符, 这也是使用最多的一种编码。最大的特点就是变长的编码方式,用 1 到 4 个字节表示一个符号,可以根据不同的符号编码字节长度。

字母或数字用 1 字节,汉字用 3 字节,emoji 表情符号用 4 字节。UTF8 字符集目前是使用最广泛的。

注意!MySQL 里常说的 UTF8 是 UTF8MB3 的别名,UTF8MB3 是 UTF8MB4 的子集,UTF8MB4 才是真正的 4 字节 UTF8 字符集!

UTF8MB3 表示最大支持 3 个字节存储字符,UTF8MB4 表示最大 4 个字节存储字符。根据实际需要和未来展望,MySQL 8.0 已经默认用 UTF8MB4 基础字符集。

改变数据库的排序规则(做ALTER之前,要中断所有用户对此数据库的访问)

语法:

use

master

go

ALTER

DATABASE

数据库名

COLLATE

排序规则名

例子:

use

master

go

ALTER

DATABASE

luwanzhufa

COLLATE

Chinese_PRC_CS_AS

Chinese_PRC_CS_AS这个是简体中文。而且区分大小写的排序规则。

192

Japanese_BIN

二进制顺序、用于

932(日文)字符集。

193

Japanese_CI_AS

字典顺序、不区分大小写、用于

932(日文)字符集。

200

Japanese_CS_AS

字典顺序、区分大小写、用于

932(日文)字符集。

198

Chinese_PRC_BIN

二进制顺序、用于

936(简体中文)字符集。

199

Chinese_PRC_CI_AS

字典顺序、不区分大小写、用于

936(简体中文)字符集。

203

Chinese_PRC_CS_AS

字典顺序、区分大小写、用于

936(简体中文)字符集。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6809486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存