RACLE 錯誤 12899 處理, oracle 11g 更改字元集

來源:互聯網
上載者:User

標籤:session   set   epo   bsp   ongl   重要   提示   title   idt   

 

工作需要,安裝裝了oracle 11g,在匯入其他機器上的備份資料的時間,發生一個錯誤:

IMP-00019: 由於 ORACLE 錯誤 12899 而拒絕行
IMP-00003: 遇到 ORACLE 錯誤 12899
ORA-12899: 列 "ZHENG"."D_DIC"."DICEXPLAIN" 的值太大 (實際值: 140, 最大值: 100)

這個資料表結構是直接注入的,根本不會這樣子的啊。後來在網上查了才知道原來是字元集的問題:

在記錄檔裡,開始匯入時候有這樣一個提示:"

已經完成 ZHS16GBK 字元集和 AL16UTF16 NCHAR 字元集中的匯入
匯入伺服器使用 AL32UTF8 字元集 (可能的字元集轉換)

"原來在我的Windows server 2003系統上安裝oracle,預設的字元集跟作業系統一致,是AL32UTF8。

AL32UTF8裡,一個漢字是佔用3個字元位,而一般我們用Windows XP中預設的是ZHS16GBK ,一個漢字用2個字元位。這樣,直接匯入資料就直接溢出了。

查看字元集的方法可以用PL/SQL DEVELOP ---->Reports---->DBA---->NLS Database Parameters,結果如:

 

 

 

在網上找到一個修改字元集的方法:

SQL> conn sys/sys as sysdba;SQL> shutdown immediate;SQL> STARTUP MOUNT;SQL> ALTER SESSION SET SQL_TRACE=TRUE;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;SQL> Shutdown immediate;SQL> startup;oracle資料庫的字元集更改 

 
A、oracle server端字元集查詢
select userenv(‘language’) from dual
其中NLS_CHARACTERSET 為server端字元集
NLS_LANGUAGE 為 server端字元顯示形式


B、查詢oracle client端的字元集
$echo $NLS_LANG
如果發現你select 出來的資料是亂碼,請把client端的字元集配置成與linux作業系統相同的字元集。如果還是有亂碼,則有可能是資料庫中的資料存在問題,或者是oracle服務端的配置存在問題。

 

C、server端字元集修改
*****************************************************************
* 更改字元集步驟方法(WE8ISO8859P1 --> ZHS16GBK)            *
*****************************************************************
SQL>
將資料庫啟動到RESTRICTED模式下做字元集更改:
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
System altered.
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
System altered.
SQL> alter database open;
Database altered.
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;
ALTER DATABASE CHARACTER SET ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我們的字元集:新字元集必須為舊字元集的超集,這時我們可以跳過超集的檢查做更改:
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
Database altered.
SQL> select * from v$nls_parameters;

19 rows selected.
重啟檢查是否更改完成:
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select * from v$nls_parameters;

19 rows selected.
我們看到這個過程和之前ALTER DATABASE CHARACTER SET操作的內部過程是完全相同的,也就是說INTERNAL_USE提供的協助就是使
Oracle資料庫繞過了子集與超集的校正.
這一方法在某些方面是有用處的,比如測試;應用於產品環境大家應該格外小心,除了你以外,沒有人會為此帶來的後果負責:
結語(我們不妨再說一次):
對於DBA來說,有一個很重要的原則就是:不要把你的資料庫置於危險的境地!
這就要求我們,在進行任何可能對資料庫結構發生改變的操作之前,先做有效備份,很多DBA沒有備份的操作中得到了慘痛的教訓
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

D、client端字元集修改
在 /home/oracle與 /root使用者目錄下的.bash_profile中
添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語句
關閉當前ssh視窗。
注意 NLS_LANG變數一定要配置正確否則會引起sqlplus 失效

 

參考

Oracle ORA-12899錯誤的解決方案

oracle 11g 更改字元集,9i匯入11g 出現 ORACLE 錯誤 12899 處理

RACLE 錯誤 12899 處理, oracle 11g 更改字元集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.