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