一、問題描述
1、采用gdb模板文件,在ArcSDE(數據服務器)中批量創建數據庫表(數據遷移)時,用到接口ESRI.ArcGIS.Geodatabase.IGeoDBDataTransfer的方法Transfer時,報錯,錯誤為:Exception from HRESULT: 0x80041538;
2、在自己電腦上試驗沒問題,數據服務器上會有該問題;
3、由於GIS相關問題,相關幫助手冊及網上搜了一會,發現幾乎沒這個問題的相關資料。
二、解決方案
1、只能從本機環境和數據服務器環境對比上著手,本機環境:Win7 旗艦中文版,Oracle 11g中文版;數據服務器環境:WinServer 2008 R2標准版(別人裝的,貌似是英文版的,後來裝了中文補丁包,未修改其他設置,輸入中文漢字總感覺顯示怪怪的),Oracle 11g英文版;
2、懷疑是編碼的問題,便拿ArcCatalog在數據服務器上創建名稱為中文的表時,直接報錯ORA-00911Invalid Character。於是,便可以斷定是字符編碼的問題。從兩方面著手:
A、操作系統問題
windows的問題,在區域和語言設置,把非unicode編碼設置為簡體中文(設置完成後,重啟電腦即可,再輸入中文漢字就不覺得怪了)。
B、Oracle數據庫問題
(1)首先查看Oracle的編碼,兩種方式可以查看(注冊表或者sqlplus查詢),這兩種方式均是借鑒轉載別人寫的內容
注冊表查看:
32位在:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\ORACLE\HOMExx\NLS_LANG
(這裡是32位的應用程序在64位windows系統中,注冊表位置在"WOW6432NODE"下。)
64位在:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG
(這裡是64位的應用程序在64位windows系統中,注冊表位置直接在"SOFTWARE"下。)
Sqlplus查詢:
數據庫服務器字符集select * from nls_database_parameters,其來源於props$,是表示數據庫的字符集。
客戶端字符集環境select * from nls_instance_parameters,其來源於v$parameter,
會話字符集環境select * from nls_session_parameters,其來源於v$nls_parameters,表示會話自己的設置,可能是會話的環境變量或者是alter session完成,如果會話沒有特殊的設置,將與nls_instance_parameters一致。
以上兩種方式,可得知數據服務器上的Oracle編碼為:WE8MSWIN1252(不支持中文)
(2)既然知道了編碼WE8MSWIN1252的問題,下面就好解決了,可參考http://blog.itpub.net/22871478/viewspace-1116638/,為了大家看的方法,我把原文轉載過來了,如下:
修改字符集為ZHS16GBK SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started. Total System Global Area 523108352 bytes Fixed Size 1337632 bytes Variable Size 356517600 bytes Database Buffers 159383552 bytes Redo Buffers 5869568 bytes Database mounted. SQL> alter session set sql_trace=true; Session altered. 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. 紅色部分的錯誤不影響 到此修改成功,重啟服務,支持中文。 3、問題得以解決。