specified length too long for its datatype錯誤解決

1、導入過程報:ORA-00910: specified length too long for its datatype錯誤,如下所示:
[email protected]:~> impdp kevin/kevin  tables=kevin_emp  directory=data_pump_dir  dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4

Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-39083: Object type TABLE failed to create with error:
ORA-00910: specified length too long for its datatype
Failing sql is:
CREATE TABLE "kevin"."kevin_emp" ("SISDN" VARCHAR2(13 BYTE), "AU" NVARCHAR2(4000), "DTIME" VARCHAR2(8 BYTE)) 

2、導致以上錯誤,是因爲源數據庫的國家字符集爲UTF8,目標數據庫的國家字符集爲AL16UTF16,
查看國家字符集可以通過如下SQL查詢:
select value from nls_database_parameters t where t.PARAMETER='NLS_NCHAR_CHARACTERSET'
國家字符集:
    (1)用以存儲NCHAR, NVARCHAR2, NCLOB等類型數據
    (2)國家字符集實質上是爲oracle選擇的附加字符集,主要作用是爲了增強oracle的字符處理能力,因爲NCHAR數據類型可以提供對亞洲使用定長多字節編碼的支持,
而數據庫字符集則不能。國家字符集在oracle9i中進行了重新定義,只能在unicode編碼中的AL16UTF16和UTF8中選擇,默認值是AL16UTF16

3、解決辦法:
      1、將NVARCHAR2(4000)改爲NVARCHAR2(2000),先將表結構創建,NVARCHAR2(2000)已經足夠了
SQL> CREATE TABLE "kevin"."kevin_emp" ("MSISDN" VARCHAR2(13 BYTE), "UA" NVARCHAR2(2000), "DTIME" VARCHAR2(8 BYTE));

      2、在之前的expdp語句中,添加content=data_only TABLE_EXISTS_ACTION=append,順利將數據導入,如下所示:
[email protected]:~> impdp kevin/kevin  tables=kevin_emp content=data_only TABLE_EXISTS_ACTION=append directory=data_pump_dir  dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4
Starting "kevin"."SYS_IMPORT_TABLE_01":  kevin/******** tables=kevin_emp content=data_only TABLE_EXISTS_ACTION=append directory=data_pump_dir dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "kevin"."kevin_emp"           119.7 MB 5300576 rows
Job "kevin"."SYS_IMPORT_TABLE_01" successfully completed at 18:10:18

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章