【发布时间】:2015-08-22 19:26:42
【问题描述】:
我经常收到一个使用 oracle v.11g(使用 exp 实用程序)创建的 dmp 文件。
我曾经将此文件导入到西欧版的 Oracle 10g XE。 导入将成功终止而没有警告,但有一个错误日志 (alert_xe.log) 会不断增加大小,因为我在 64 位 Windows 操作系统上使用 32 位 Oracle 数据库。
我现在已经安装了 11g XE,我正在尝试导入相同的 dmp 文件,但我在导入日志文件中看到以下内容:
import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set
import server uses AL32UTF8 character set (possible charset conversion)
export client uses WE8ISO8859P1 character set (possible charset conversion)
由于我有很多以下错误,因此导入终止并发出警告:
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column XXX (actual: 256, maximum: 255)
我了解问题的原因是源数据库使用字节语义,而我的新 11g XE 数据库使用多字节字符集。
我无法控制源数据库,因此我无法更改那里的任何内容。
此外,我无法使用字符长度语义而不是字节语义(如此处所示,例如Character set in Oracle 11g r2 XE)预先创建具有列定义的表,因为有时源数据库架构会发生更改(可能会添加列)并且我没有收到通知这样会破坏导入。
这个问题有解决办法吗? 有什么方法可以将 WE8MSWIN1252 与 Oracle 11g XE 一起使用?
【问题讨论】:
-
我设法按照这篇文章中的步骤更改了字符集:stackoverflow.com/questions/23779159/…。有人在执行此操作时遇到问题吗? (我每次都导入一个空数据库,所以我没有现有的数据库可以搞砸)
-
尝试设置 NLS_LANG 环境变量以匹配源数据库。
-
@TenG,设置 NLS_LANG 没用,因为转储文件包含 WE8ISO8859P1 编码 DDL 并且还将 NLS_LENGTH_SEMANTICS 从 BYTE 设置为 CHAR 也没用。
标签: oracle oracle11g oracle-apex oracle-xe