2017-02-14 106 views
2

我想整合一些数据库,并且我有一些CHARACTER集合的问题。Oracle:从WE8ISO8859P1转换到AL32UTF8

我的数据库看起来是这样的:

源数据库

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
NLS_CHARACTERSET WE8ISO8859P1 
NLS_NCHAR_CHARACTERSET AL16UTF16 
NLS_LENGTH_SEMANTICS BYTE 

目标数据库

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
NLS_CHARACTERSET AL32UTF8 
NLS_NCHAR_CHARACTERSET AL16UTF16 
NLS_LENGTH_SEMANTICS BYTE 

我做了一个出口的模式,但是当我在进口新的数据库我有很多错误,如:

ORA-02374: conversion error loading table owner.table_name 
ORA-12899: value too large for column col_name (actual: 403, maximum: 400) 

我已经运行了csscan实用程序。结果如下:

TABLE Convertible Truncation  Lossy 
------ ------------- ------------- ------------ 
    1   0    18   24 
    2  2,248   120  19,854 
    3  2,155   120  19,551 
    4  5,431   294  41,531 
    5  5,925   114  18,352 
    6   129    4  5,095 
    7   109    4  5,017 
    8  2,149   151  5,219 
------ ------------- ------------- ------------- 

因此,有什么办法可以在导入之前找到目标中的VARCHAR2值?我可以改变表格的结构。在我们的例子中,我可以修改我的表格并将列的大小从400更改为403.

如果您需要更多信息或其他任何内容,请发表评论。

在此先感谢!

+0

仍然没有解决我的问题。有任何想法吗?提前致谢! – adimoise91

回答

0

csscan工具会告诉你转换后Truction记录有多大,你可以用它来改变字段的大小。在下面的例子中,你需要从VARCHAR(40)更改SAMPLE_COLUMN你的尺寸为VARCHAR(43),以支付正在转换的一切:

CSSCAN .ERR输出样本:

User : SAMPLE_USER 
Table : SAMPLE_TABLE 
Column: SAMPLE_COLUMN 
Type : VARCHAR2(40) 
Number of Exceptions   : 5 
Max Post Conversion Data Size: 43 

希望这帮助。