将Oracle 11g(WE8ISO8859P1)中创建的dmp文件导入Oracle 11g XE数据库(AL32UTF8)

时间:2015-06-08 10:54:11

标签: oracle oracle11g oracle-apex oracle-xe

我经常会获得一个使用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一起使用?

2 个答案:

答案 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会帮助某人