2012年7月12日 星期四

Oracle 的character set

請一位到職不到一年的同事安裝 OracleDB, 我後悔了, 半年後還在收拾....
因為字元集的錯誤, 匯入了原本 dmp 檔, 不僅匯入過程錯誤, 也造成了 database 內出現了亂碼的 table , 連要刪除tablespace 都刪不掉(constraint索引, 限制條件的相依 ), 更不用說刪除table...最後忍痛把整個database刪除, 重新用DBCA建database, 過程的記錄如下, 如果有相同需求的人, 歡迎一起討論.

查看目前的字集設定
方法1)
SQL>SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';


方法2)
SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ;


有很多方法可以看編碼, google 一下就有了, 就不多說了.




我的想法是先把編碼改好, 再匯入dmp檔, 看有沒有得救.


所以主要是NLS_CHARACTERSET的值, 我要改成ZHT16MSWIN950, 語法如下:


#sqlplus / as sysdba
進入splplus 後

shutdown immediate;
startup mount;


alter database open;
alter database character set internal_use ZHT16MSWIN950;


shutdown immediate;
startup;

done;完成了.
再用上面的語法檢查一次.

PS: 其實在client有一個方法, 可以不用動到Server端, 但是你必須要每個client都是設定環境變數, 不是很理想.

但是如上面提到, 我的OracleDB還是一樣, 無法刪除亂碼的table, 所以後來還是整個database刪除, 再重建, OracleDB重建資料庫很麻煩, 我最後還是用UI界面處理, 下一篇再Post上來了.

沒有留言: