Oralce資料庫的錯誤資訊經常會出現,我們看見的都是錯誤的代碼,至於錯誤原因究竟是什麼還一時半會難以解答,所以就把一些常見的錯誤整理了一下,來看看也許對你有協助的。
Oracle資料庫是網路資料庫,我們在學習的時候要有一種思想,就是它是運行在伺服器上面的資料庫軟體,它是基於網路的,它不像access,只是一個資料庫檔案。有這樣一個認識,學起來會容易理解很多。在網路的條件下,要訪問oracle資料庫,就必須要在伺服器端和用戶端進行相關的配置,這樣用戶端就能通過網路存取伺服器端的資料資訊。當然,伺服器端和用戶端只是邏輯上的劃分,我們在學習過程中,這兩個端都是裝在我們自己這一台電腦上的,網路的嘛,也就是os的網路虛擬迴圈來類比的。但是,對網路的配置還是要的,在邏輯上要滿足oracle的要求!下面就來具體的介紹這些配置,並且把一些錯誤和解決方案也拿出來,做個小結。
由於大部分同學用9i資料庫,我也裝了9i,所以下面的有關路徑是基於9i的,作業系統是windows xp sp2,先從伺服器端說起。
1、Oracle伺服器端網路設定:
作為伺服器端,它必須啟動資料庫的常式,以使別人能夠來串連它。oracle在使用以前,它本身的監聽程式必須開啟,監聽程式是伺服器中接收和響應客戶機對資料庫的串連請求的進程,就像mysql資料庫那樣,mysql的服務必須開啟,這樣才能做別的事情。在監聽程式開啟以後,然後掛載資料庫,然後開啟資料庫,開啟常式,這樣別人就能夠串連了。如果伺服器端監聽進程沒有啟動,則出現以下錯誤資訊:
ERROR:ORA-12651:TNS:沒有監聽器
該資訊說明所要已連線的服務器沒有啟動監聽進程Listener,該進程為Oracle伺服器上作業系統進程,監聽進程沒有啟動時,伺服器可以正常進行,但是用戶端不能與伺服器產生串連。這時可以在伺服器使用作業系統命令lsnrctl正常起啟動監聽進程,具體方法如下:
C:>lsnrctl start
停止監聽方法:
C:>lsnrctl stop
當然你也可以去服務裡面去,點擊開啟listener服務。
監聽程式的啟動,它的作用就是監聽用戶端的串連,因此在伺服器端需要配置監聽程式進程設定檔,它的名字是listener.ora,它在“『oracle安裝目錄主目錄』networkadmin”目錄下。該檔案的配置一般情況下在資料庫的建立過程中都已經自動寫好了,也就是說一般情況下它都是對的,只是在我們修改的主機名稱後,則需要修改監聽進程中的HOST,否則監聽程式會出現以下錯誤(在sql plus中啟動服務的話):
Tns-12545:因目標主機或者對象不存在,串連失敗
Tns-12560:tns:協議適配器錯誤
Tns-00515: 因目標主機或者對象不存在,串連失敗
Error:1001:unknow error
如果在作業系統的服務列表中啟動listener.ora服務,也會出現同樣的錯誤資訊,(對話方塊)進行意外中止。這時,可以修改listener.ora中的下一列資訊中HOST處的主機名稱:(ADDRESS=(PROTOCOL=TCP)(HOST=water-dragon)(PORT=1521))該名稱必須與實際符合,重新啟動監聽程式即可。附:在listener.ora檔案中,HOST處允許使用IP地址,這樣修改機器名後就不會引起監聽程式啟動失敗。
此外在伺服器與listener.ora檔案統一目錄中還有一個檔案即:tnsnames.ora檔案,它也是在“『oracle安裝目錄主目錄』networkadmin”目錄下,它的作用是什麼呢?請看下面!
2、Oracle用戶端網路設定: tnsnames.ora的作用就是描述了,用戶端和伺服器的串連的資訊,這裡包括串連的協議、已連線的服務名等。oracle伺服器通過它裡面的資訊,來判斷一個串連是否合法等,這裡面有一個很重要的地方就是和listener.ora很相似的地方,“ADDRESS_LIST=(ADDRESS = (PROTOCOL = TCP)(HOST = water-dragon)(PORT = 1521))”,這裡所描述的host表示oracle資料庫所在的主機名稱,也就是說,在伺服器中,tnsnames.ora預設是使用伺服器名進行配置的,所以如果修改了機器名,則該檔案同時需要修改,否則出現如下錯誤:
Error:
ORA:-12545:因目標主機和對象不存在,串連失敗
錯誤碼ORA-12545表示網路連接串(即tnsnames.ora檔案中的HOST處)中使用的機器名和IP地址不存在,重新修改編輯此檔案把資料庫所在的主機名稱(ip)改對,再重新串連即可。如果tnsnames.ora檔案配置不正確,則錯誤資訊會記錄在串連日誌資訊檔中,其錯誤資訊內容為:
The error strutct:
Nr err code:0
Ns main err code:12560
TNS -12560:TNS: 協議適配器出現錯誤
ns secondary err code:0
nt main err code:530
tns-00530:協議適配器錯誤
nt secondary err code:2
nt OS err code:0
3、圖形化配置oracle網路連接: 前面介紹的方法,是分別設定管理員端和用戶端的文本配置方法,當然,現在oracle公司開發很多有用的圖形化介面工具,我們可以利用這些工具來輕鬆的完成配置。
用Oracle9i Net Service的嚮導工具(Oracle 9i Net Configuration Assistant):可以用它來建立、修改、刪除或重新命名監聽程式,在用戶端,使用配置有相同協議地址的串連描述符的客戶機可以向監聽程式發送串連請求。當然也可以用它來佈建服務名(即tnsname.ora中的內容)。
Oracle9i net Manager:可以定義簡單名稱來表示服務的位置,例如一個資料庫,這些簡單名稱映射為串連描述符。他們包含服務的網路標識和位置。此時可能會有錯誤,錯誤資訊ORA-12560表示,在作業系統中找不到所定義的執行個體,在Oracle9i中,如果出現了此類錯誤,一般來說出錯原因有兩個,一是執行個體名被錯誤的修改,二是Oracle的服務沒有正常啟動。
4、Oracle常見錯誤碼的分析與解決
4.1、ORA-00600:internal error code,arguments:[num],[?],[?],[?],[?] 產生原因:
這種錯誤通常為ORACLE的內部錯誤,只對OSS和ORACLE開發有用。ORA-600的錯誤經常伴隨追蹤檔案的狀態轉儲(系統狀態和進程狀態),系統狀態儲存將包括ORACLE RDBMS持有的當前對象的資訊,進程狀態轉儲則將顯示特殊進程持有的對象,當進程符合了某錯誤條件時,經常是由於一些資訊取自它持有的一個塊,如果我們知道這些錯誤進程持有的塊,就容易跟蹤問題的來源。
解決方案:
一般來說出現這個錯誤我們本身是無法解決的,只有從提高系統本身各方面來解決這個內部問題,如增加硬體裝置,調整系統效能,使用OPS(當然OPS從某種意義上說並不是一種好的解決方式)等。ORA-600錯誤的第一個變數用於標記代碼中錯誤的位置(代碼中的每個部分的第一變數都不一樣),從第二個到第五個變數顯示附加資訊,告訴OSS代碼在哪裡出現了錯誤。
一個報錯例子如下:
ORA-00600: internal error code, arguments: [1237], [], [], [], [], [], [], []
相應的英文如下:
Cause:This is a catchall internal error message for Oracle program exceptions.It indicates that a process has met a low-level,unexpected condition.Various causes of this message include:
Time-outs(逾時)
File corruption(檔案太老)
Failed data checks in memory(記憶體檢索失敗)
Hardware,memory,or I/O errors(硬體、記憶體或者磁碟錯誤)
Incorrectly restored files(錯誤的重建檔案)
4.2、ORA-03113:end-of-file on communication channel
產生原因:
通訊不正常結束,從而導致通訊通道終止
解決方案:
1>.檢查是否有服進程不正常死機,可從alert.log得知
2>.檢查sql*Net Driver是否串連到ORACLE可執行程式
3>.檢查伺服器網路是否正常,如網路不通或不穩定等
4>.檢查同一個網上是否有兩個同樣名字的節點
5>.檢查同一個網上是否有重複的IP地址
相應的英文如下:
Cause:An unexpected end-of-file was processed on the communication channel.The problem could not be handled by the Net8,two task,software.This message could occur if the shadow two-task process associated with a Net8 connect has terminated abnormally,or if there is a physical failure of the interprocess communication vehicle,that is,the network or server machine went down.
Action:If this message occurs during a commection attempt,check the setup files for the appropriate Net8 driver and confirm Net8 software is correctly installed on the server.If the message occurs after a connection is well established,and the error is not due to a physical failure,check if a trace file was generated on the server at failure time.Existence of a trace file may suggest an Oracle internal error that requires the assistance of customer support.
4.3、ORA-00942:table or view does not exist
產生原因:
這是由於裝載的表或視圖不存在,多半是CATEXP.SQL還沒有運行,無法執行Export視圖,如果CATEXP.SQL已經運行,則可能是版本錯誤。
解決方案:
因為Import和Export共用的一些視圖是通過運行CATEXP.SQL來裝載的(它們具有相同的視圖),並不產生單獨的CATEXP.SQL,因而造成視圖與Export代碼不同步,較難保持彼此之間的相容,使用者就必須建立自己的Export應用,從而避免ORA-00942的錯誤。
相應的英文如下:
Cause:The table or view entered does not exist,a synonym that is jnot allowed here was used,or a view was referenced where a table is required.Existing user tables and views can be listed by querying the data dictionary.Certain privileges may required to access the table.If an application returned this message,the table the application tried to access does not exist in the database,or the application does not have access to it.
Action:Check each of the following:
The spelling of the table or view name.
That a view is not specified where a table is required
That an existing table or view name exists.
Contact the database administrator if the table needs to be created or if user or application priviledes are required to access the table.
Also, if attempting to access a table or view in another schema,make certain thecorrect schema is referenced and that access to the object is granted.
4.4、ORA-12560: TNS:協議適配器錯誤
1>.檢查Terminal Service, 遠端桌面是不是起因
2>.環境變數set oracle_sid=需要的服務名
3>.listener.ora, tnsnames.ora等內機器名或者IP地址是否正確
4>.netstat –a檢查連接埠是否被佔用
5>.檢查註冊表HKEY_LOCAL_MACHINESoftwareOracleHome0新增字串USE_SHARED_SOCKET=TRUE, 重新啟動服務ERROR:
4.5、ORA-01031: insufficient privileges
產生原因:許可權不足
解決方案:修改相應許可權即可