前兩天進行客戶服務時,使用asp程式訪問oracle資料庫,出現了多次的意外問題,將問題和解決方案總結如下:
1. 串連資料庫的時候使用的服務名稱有可能存在與執行個體資料庫的SID不同的情況。客戶的資料庫ID是asdf,而串連使用的服務名稱是asdf.cn。在以後測試連接的時候,要注意這樣的問題,並不是所有的使用者的資料庫名稱和服務名稱都是一致的。
2. 在oracle伺服器的機器上同時有兩個網卡時,使用應用程式串連資料庫會失敗。因為oracle是用電腦名稱字來啟動服務的,而兩個IP同時存在,就會串連失敗。目前的處理辦法是禁用一個網卡。網路上提供另一種解決方案,就是修改ora設定檔,但是我在一台機器上進行嘗試時,如果把機器名換成IP,會導致資料庫服務啟動失敗。
3. 在asp中使用OleDB進行串連oracle時,有可能出現provider不存在的錯誤,這種情況出現的原因是執行asp指令碼的windows使用者對oracle的oledb組件沒有使用許可權。解決的辦法為,在oracle安裝的位置,即ORACLE_HOME目錄上,檢查屬性中的安全,將其中“Authenticated Users”使用者的“讀取和允許”許可權的“勾”去掉-》應用-》選擇-》應用,這樣重新設定了對此目錄的使用者權限,就可以解決provider不存在的錯誤。其實更準確的做法是為oralce oledb組件設定許可權,現在還不是十分清楚應該設定哪些。
4. 在使用oracle的oledb中,如果進行blob類型資料的操作,可能會因為組件版本的問題而失敗。最後使用的是oracle9201中帶的oledb和mdac2.7,運行成功。
5. 將表從tablespace A轉移到tablespace B,可以使用alter tablename move tablespace tablespacename 這樣的SQL語句。但是表上的索引需要重建立立,因為原來的索引還使用原有的資料表空間,而且表移動後不能刪除。可能需要在在移動表之前先刪除索引。
6. oracle的使用權限設定是部署中需要注意的問題,因為程式可能因為許可權問題而運行失敗。一般應建立connect許可權和resource許可權,同時還要配置使用者在資料表空間上的配額。值得注意的是,使用權限設定中通過角色賦予的許可權在預存程序中無效。