我经常会获得一个使用oracle v.11g创建的dmp文件(使用exp实用程序)。
我曾经将此文件导入西欧版的Oracle 10g XE。 导入将在没有警告的情况下成功终止,但是由于我在64位Windows操作系统上使用32位Oracle数据库,因此存在大小不断增加的错误日志(alert_xe.log)。
我现在已经安装了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一起使用?
答案 0 :(得分:0)
不,不幸的是你无法做到。
正如Oracle官方文档中所述:
9 Oracle Database XE Character and Language Configurations
Oracle Database XE is available only in Universal character set and language configurations:
The database is created using Unicode(AL32UTF8) character set, which is suitable for global data in any language.
http://docs.oracle.com/cd/E17781_01/install.112/e18803/toc.htm#XEINW138
唯一的解决方法是预先分配高级表格。
答案 1 :(得分:0)
我有同样的问题。 当我运行此命令时
imp <username>/<password>@<hostname> file=<filename>.dmp log=<filename>.log
显示
import done in AL32UTF8 character set and AL16UTF16 NCHAR character set
export client uses AR8MSWIN1256 character set (possible charset conversion)
IMP-00031: Must specify FULL=Y or provide FROMUSER/TOUSER or TABLES arguments
IMP-00000: Import terminated unsuccessfully
这意味着我的oracle服务器是 AL32UTF8 字符集,导出转储文件客户端使用 AR8MSWIN1256 字符集。
所以我只是使用以下命令将oracle字符集更改为 AR8MSWIN1256 。
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;
ALTER DATABASE CHARACTER SET INTERNAL_USE AR8ISO8859P6;
SHUTDOWN IMMEDIATE;
STARTUP;
然后再次运行
imp <username>/<password>@<hostname> file=<filename>.dmp log=<filename>.log FULL=Y
我希望这个anwser会帮助某人