Oracle ORA 12899錯誤的解決方法

2022-09-23 09:47:17 字數 1172 閱讀 3130

資料匯入時報ora-12899錯誤,即插入的資料長度超出欄位的設定長度,實際長度並不長,這是由於oracle字符集不同,漢字佔的長度不同造成的。中文在zhs16gbk中佔2個位元組,在utf-8中卻佔3個位元組,所以漢字匯入utf-8字符集的資料庫就很容易出現欄位長度不夠,解決辦法,一個是增加欄位長度,還有就是修改字符集。

如果系統中已經存在很多資料,建議修改欄位長度,因為修改字符集後原來資料庫表中的漢字全部變成亂碼。如果一定要修改字符集,必須先匯出資料,待到字符集修改後再重新匯入這些資料。

檢視字符集的方法可以用pl/sql develop ---->reports---->dba---->nls database parameters,結果如下圖:

如上圖所示,字符集是utf-8,修改字符集的方法如下:

修改資料庫字符集為:zhs16gbk

檢視伺服器端字符集sql > select * from v$nls_parameters

telnet到伺服器,執行:$sqlplus /nolog

sql>conn / as sysdba

若此時資料庫伺服器已啟動,則先執行 shutdown immediate 命令關閉資料庫伺服器,

然後執行以下命令:

sql>shutdown immediate

sql>startup mount

sql>alter system enable restricted session;

sql>alter system set job_queue_processes=0;

sql>alter system set aq_tm_processes=0;

sql>alter database open;

sql>alter database character set zhs16gbk;

error at line 1:ora-12721: operation cannot execute when other sessions are active

若出現上面的錯誤,使用下面的辦法進行修改,使用internal_use可以跳過超集的檢查:

sql>alter database character set internal_use zhs16gbk;

sql>shutdown immediate

sql>startup

至此,字符集修改完畢,再查字符集,結果如下: