我正在尝试将 Oracle 11 导出导入 Oracle 11 XE。
我收到以下消息:
在 XE fehlerhaft 中导入 以 WE8MSWIN1252 字符集和 AL16UTF16 NCHAR 字符集完成
导入 导入服务器使用 AL32UTF8 字符集(可能的字符集转换)
有什么想法,我如何将此转储导入 Oracle 11 XE?
编辑:
给定一张桌子
CREATE TABLE BDATA.Artikel(
Key VARCHAR2(3) NOT NULL,
Name VARCHAR2(60) NOT NULL,
Abkuerzung VARCHAR2(5) NOT NULL
);
我收到这样的错误
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "BDATA"."ARTIKEL"."ABKUERZUNG" (actual: 6, maximum: 5)
Column 1 ABL
Column 2 Aufbewahrungslösung
Column 3 AfbLö
导入中缺少某些行。
如果这是您用于创建表的实际 DDL,则可以使用NLS_LENGTH_SEMANTICS参数。如果将其设置为 CHAR 而不是 BYTE 的默认值,则将为 VARCHAR2(5) 分配足够的空间来在数据库字符集中存储 5 个字符(可能最多 20 个字节)而不是 5 个字节(可能只允许 1 个字符)。
不幸的是,
NLS_LENGTH_SEMANTICS
如果您依赖导入过程来创建表,那么更改可能不会有太大帮助——转储文件将固有地添加 CHAR 或 BYTE 关键字,因此它实际上会发出语句您无法选择 XE 上的字符集,因此您无法更改它以适合您尝试导入的数据库。在导出之前迁移源数据库是否可行?
导入应该可以工作,但字符集转换可能意味着某些具有非 ascii 字符的文本列在导入后看起来会不一样。如果行在新字符集中太长,则可能会被拒绝。
在您的情况下,您正在转换为 UTF8,这意味着在转换为 2(或理论上更多)期间单字节字符可能会增长。您可能需要在导出之前增加列大小或调整目标架构并在单独的步骤中导入数据。有关其他可能的数据截断问题,请参见此处
最简单的方法:(关闭必要):
首先,以 sysdba 身份连接:
接下来,执行以下脚本:
它在 Oracle 12c 标准二版中对我有用
取自: http: //www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html
这对我有用。而不是这个:
在 bash 中尝试这样的事情:
这会将每行更改
col1 VARCHAR2(n)
为col1 VARCHAR2(n CHAR)
以 开头的行CREATE TABLE
。您也可以data.dmp
在运行 imp 之前进行更改,例如,如果您无法<(...)
在 shell 中进行更改:...但是在 bash 中没有必要,并且在转换或进行备份时可能会出现问题,如
-i.bk
.