您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么進行Oracle異常處理,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1、異常的優點
如果沒有異常,在程序中,應當檢查每個命令的成功還是失敗,如
BEGIN
SELECT ...
-- check for ’no data found’ error
SELECT ...
-- check for ’no data found’ error
SELECT ...
-- check for ’no data found’ error
這種實現的方法缺點在于錯誤處理沒有與正常處理分開,可讀性差,使用異常,可以方便處理錯誤,而且異常處理程序與正常的事務邏輯分開,提高了可讀性,如
BEGIN
SELECT ...
SELECT ...
SELECT ...
...
EXCEPTION
WHEN NO_DATA_FOUND THEN -- catches all ’no data found’ errors
2、異常的分類
有兩種類型的異常,一種為內部異常,一種為用戶自定義異常,內部異常是執行期間返回到PL/SQL塊的ORACLE錯誤或由PL/SQL代碼的某操作引起的錯誤,如除數為零或內存溢出的情況。用戶自定義異常由開發者顯示定義,在PL/SQL塊中傳遞信息以控制對于應用的錯誤處理。
每當PL/SQL違背了ORACLE原則或超越了系統依賴的原則就會隱式的產生內部異常。因為每個ORACLE錯誤都有一個號碼并且在PL/SQL中異常通過名字處理,ORACLE提供了預定義的內部異常。如SELECT INTO 語句不返回行時產生的ORACLE異常NO_DATA_FOUND。對于預定義異常,現將最常用的異常列舉如下:
exception oracle error sqlcode value condition
no_data_found ora-01403 +100 select into 語句沒有符合條件的記錄返回
too_many_rows ora-01422 -1422 select into 語句符合條件的記錄有多條返回
dup_val_on_index ora-00001 -1 對于數據庫表中的某一列,該列已經被限制為唯一索引,程序試圖存儲兩個重復的值
value_error ora-06502 -6502 在轉換字符類型,截取或長度受限時,會發生該異常,如一個字符分配給一個變量,而該變量聲明的長度比該字符短,就會引發該異常
storage_error ora-06500 -6500 內存溢出
zero_divide ora-01476 -1476 除數為零
case_not_found ora-06592 -6530 對于選擇case語句,沒有與之相匹配的條件,同時,也沒有else語句捕獲其他的條件
cursor_already_open ora-06511 -6511 程序試圖打開一個已經打開的游標
timeout_on_resource ora-00051 -51 系統在等待某一資源,時間超時
如果要處理未命名的內部異常,必須使用OTHERS異常處理器或PRAGMA EXCEPTION_INIT 。PRAGMA由編譯器控制,或者是對于編譯器的注釋。PRAGMA在編譯時處理,而不是在運行時處理。EXCEPTION_INIT告訴編譯器將異常名與ORACLE錯誤碼結合起來,這樣可以通過名字引用任意的內部異常,并且可以通過名字為異常編寫一適當的異常處理器。
在子程序中使用EXCEPTION_INIT的語法如下:
PRAGMA EXCEPTION_INIT(exception_name, -Oracle_error_number);
在該語法中,異常名是聲明的異常,下例是其用法:
DECLARE
deadlock_detected EXCEPTION;
PRAGMA EXCEPTION_INIT(deadlock_detected, -60);
BEGIN
... -- Some operation that causes an ORA-00060 error
EXCEPTION
WHEN deadlock_detected THEN
-- handle the error
END;
對于用戶自定義異常,只能在PL/SQL塊中的聲明部分聲明異常,異常的名字由EXCEPTION關鍵字引入:
reserved_loaned Exception
產生異常后,控制傳給了子程序的異常部分,將異常轉向各自異常控制塊,必須在代碼中使用如下的結構處理錯誤:
Exception
When exception1 then
Sequence of statements;
When exception2 then
Sequence of statements;
When others then
3、異常的拋出
由三種方式拋出異常
1. 通過PL/SQL運行時引擎
2. 使用RAISE語句
3. 調用RAISE_APPLICATION_ERROR存儲過程
當數據庫或PL/SQL在運行時發生錯誤時,一個異常被PL/SQL運行時引擎自動拋出。異常也可以通過RAISE語句拋出
RAISE exception_name;
顯式拋出異常是程序員處理聲明的異常的習慣用法,但RAISE不限于聲明了的異常,它可以拋出任何任何異常。例如,你希望用TIMEOUT_ON_RESOURCE錯誤檢測新的運行時異常處理器,你只需簡單的在程序中使用下面的語句:
RAISE TIMEOUT_ON_RESOUCE;
比如下面一個訂單輸入的例子,若當訂單小于庫存數量,則拋出異常,并且捕獲該異常,處理異常
DECLARE
inventory_too_low EXCEPTION;
---其他聲明語句
BEGIN
IF order_rec.qty>inventory_rec.qty THEN
RAISE inventory_too_low;
END IF
EXCEPTION
WHEN inventory_too_low THEN
order_rec.staus:='backordered';
END;
RAISE_APPLICATION_ERROR內建函數用于拋出一個異常并給異常賦予一個錯誤號以及錯誤信息。自定義異常的缺省錯誤號是+1,缺省信息是User_Defined_Exception。RAISE_APPLICATION_ERROR函數能夠在pl/sql程序塊的執行部分和異常部分調用,顯式拋出帶特殊錯誤號的命名異常。 Raise_application_error(error_number,message[,true,false]))
錯誤號的范圍是-20,000到-20,999。錯誤信息是文本字符串,最多為2048字節。TRUE和FALSE表示是添加(TRUE)進錯誤堆(ERROR STACK)還是覆蓋(overwrite)錯誤堆(FALSE)。缺省情況下是FALSE。
如下代碼所示:
IF product_not_found THEN
RAISE_APPLICATION_ERROR(-20123,'Invald product code' TRUE);
END IF;
4、異常的處理
PL/SQL程序塊的異常部分包含了程序處理錯誤的代碼,當異常被拋出時,一個異常陷阱就自動發生,程序控制離開執行部分轉入異常部分,一旦程序進入異常部分就不能再回到同一塊的執行部分。下面是異常部分的一般語法:
EXCEPTION
WHEN exception_name THEN
Code for handing exception_name
[WHEN another_exception THEN
Code for handing another_exception]
[WHEN others THEN
code for handing any other exception.]
用戶必須在獨立的WHEN子串中為每個異常設計異常處理代碼,WHEN OTHERS子串必須放置在最后面作為缺省處理器處理沒有顯式處理的異常。當異常發生時,控制轉到異常部分,ORACLE查找當前異常相應的 WHEN..THEN語句,捕捉異常,THEN之后的代碼被執行,如果錯誤陷阱代碼只是退出相應的嵌套塊,那么程序將繼續執行內部塊END后面的語句。如果沒有找到相應的異常陷阱,那么將執行WHEN OTHERS。在異常部分WHEN 子串沒有數量限制。
EXCEPTION
WHEN inventory_too_low THEN
order_rec.staus:='backordered';
replenish_inventory(inventory_nbr=>
inventory_rec.sku,min_amount=>order_rec.qty-inventory_rec.qty);
WHEN discontinued_item THEN
--code for discontinued_item processing
WHEN zero_divide THEN
--code for zero_divide
WHEN OTHERS THEN
--code for any other exception
END;
當異常拋出后,控制無條件轉到異常部分,這就意味著控制不能回到異常發生的位置,當異常被處理和解決后,控制返回到上一層執行部分的下一條語句。
BEGIN
DECLARE
bad_credit exception;
BEGIN
RAISE bad_credit;
--發生異常,控制轉向;
EXCEPTION
WHEN bad_credit THEN
dbms_output.put_line('bad_credit');
END;
--bad_credit異常處理后,控制轉到這里
EXCEPTION
WHEN OTHERS THEN
--控制不會從bad_credit異常轉到這里
--因為bad_credit已被處理
END;
當異常發生時,在塊的內部沒有該異常處理器時,控制將轉到或傳播到上一層塊的異常處理部分。
BEGIN
DECLARE ---內部塊開始
bad_credit exception;
BEGIN
RAISE bad_credit;
--發生異常,控制轉向;
EXCEPTION
WHEN ZERO_DIVIDE THEN --不能處理bad_credite異常
dbms_output.put_line('divide by zero error');
END --結束內部塊
--控制不能到達這里,因為異常沒有解決;
--異常部分
EXCEPTION
WHEN OTHERS THEN
--由于bad_credit沒有解決,控制將轉到這里
END;
5、異常的傳播
沒有處理的異常將沿檢測異常調用程序傳播到外面,當異常被處理并解決或到達程序最外層傳播停止。在聲明部分拋出的異常將控制轉到上一層的異常部分。
BEGIN
executable statements
BEGIN
today DATE:='SYADATE'; --ERRROR
BEGIN --內部塊開始
dbms_output.put_line('this line will not execute');
EXCEPTION
WHEN OTHERS THEN
--異常不會在這里處理
END;--內部塊結束
EXCEPTION
WHEN OTHERS THEN
處理異常
END
-------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------
處理 oracle 系統自動生成系統異常外,可以使用 raise 來手動生成錯誤。
l Raise exception;
l Raise package.exception;
l Raise;
以上是 raise 的三種使用方法。第一種用于生成當前程序中定義的異常或在 standard 中的系統異常。
Declare
Invalid_id exception;
Id_values varchar(2);
Begin
Id_value:=id_for(‘smith’);
If substr(id_value,1,1)!=’x’
Then
Raise invalid_id;
End if;
Exception
When invalid_id
Then
Dbms_output.put_line(‘this is an invalid id!’);
End;
這是一個生成自定義異常的例子,當然也可以生成系統異常:
declare
employee_id_in number;
Begin
Select employee_id into employee_id_in from employ_list where employee_name=&n;
If employee_id_in=0
Then
Raise zero_devided;
End if;
Exception
When zero_devided
Then
Dbms_output.put_line(‘wrong!’);
End;
有一些異常是定義在非標準包中的,如 UTL_FILE , DBMS_SQL 以及程序員創建的包中異常。可以使用 raise 的第二種用法來生成異常。
If day_overdue(isbn_in, browser_in) > 365
Then
Raise overdue_pkg.book_is_lost
End if;
在最后一種 raise 的形式中,不帶任何參數。這種情況只出現在希望將當前的異常傳到外部程序時。
Exception
When no_data_found
Then
Raise;
End;
Pl.sql 使用 raise_application_error 過程來生成一個有具體描述的異常。當使用這個過程時,當前程序被中止,輸入輸出參數被置為原先的值,但任何 DML 對數據庫所做的改動將被保留,可以在之后用 rollback 命令回滾。下面是該過程的原型:
Procedure raise_application_error(
Num binary_integer;
Msg varchar2;
Keeperrorstack Boolean default false
)
其中 num 是在 -20999 到 -20000 之間的任何數字(但事實上, DBMS_OUPUT 和 DBMS_DESCRIBLE 包使用了 -20005 到 -20000 的數字); msg 是小于 2K 個字符的描述語,任何大于 2K 的字符都將被自動丟棄; keeperrorstack 默認為 false ,是指清空異常棧,再將當前異常入棧,如果指定 true 的話就直接將當前異常壓入棧中。
CREATE OR REPLACE PROCEDURE raise_by_language (code_in IN PLS_INTEGER)
IS
l_message error_table.error_string%TYPE;
BEGIN
SELECT error_string
INTO l_message
FROM error_table, v$nls_parameters v
WHERE error_number = code_in
AND string_language = v.VALUE
AND v.parameter = 'NLS_LANGUAGE';
RAISE_APPLICATION_ERROR (code_in, l_message);
END;
ORACL內部異常:
ORA-00001: 違反唯一約束條件 (.)
ORA-00017: 請求會話以設置跟蹤事件
ORA-00018: 超出最大會話數
ORA-00019: 超出最大會話許可數
ORA-00020: 超出最大進程數 ()
ORA-00021: 會話附屬于其它某些進程;無法轉換會話
ORA-00022: 無效的會話 ID;訪問被拒絕
ORA-00023: 會話引用進程私用內存;無法分離會話
ORA-00024: 單一進程模式下不允許從多個進程注冊
ORA-00025: 無法分配
ORA-00026: 丟失或無效的會話 ID
ORA-00027: 無法刪去當前會話
ORA-00028: 您的會話己被刪去
ORA-00029: 會話不是用戶會話
ORA-00030: 用戶會話 ID 不存在。
ORA-00031: 標記要刪去的會話
ORA-00032: 無效的會話移植口令
ORA-00033: 當前的會話具有空的移植口令
ORA-00034: 無法在當前 PL/SQL 會話中
ORA-00035: LICENSE_MAX_USERS 不能小于當前用戶數
ORA-00036: 超過遞歸 SQL () 級的最大值
ORA-00037: 無法轉換到屬于不同服務器組的會話
ORA-00038: 無法創建會話: 服務器組屬于其它用戶
ORA-00050: 獲取入隊時操作系統出錯
ORA-00051: 等待資源超時
ORA-00052: 超出最大入隊資源數 ()
ORA-00053: 超出最大入隊數
ORA-00054: 資源正忙,要求指定 NOWAIT
ORA-00055: 超出 DML 鎖的最大數
ORA-00056: 對象 '.' 上的 DDL 鎖以不兼容模式掛起
ORA-00057: 超出臨時表鎖的最大數
ORA-00058: DB_BLOCK_SIZE 必須為才可安裝此數據庫 (非 )
ORA-00059: 超出 DB_FILES 的最大值
ORA-00060: 等待資源時檢測到死鎖
ORA-00061: 另一個例程設置了不同的 DML_LOCKS
ORA-00062: 無法獲得 DML 全表鎖定;DML_LOCKS 為 0
ORA-00063: 超出 LOG_FILES 的最大數
ORA-00064: 對象過大以至無法分配在此 O/S (,)
ORA-00065: FIXED_DATE 的初始化失敗
ORA-00066: LOG_FILES 為 但需要成為 才可兼容
ORA-00067: 值 對參數 無效;至少必須為
ORA-00068: 值 對參數 無效,必須在 和 之間
ORA-00069: 無法獲得鎖定 -- 禁用了表鎖定
ORA-00070: 命令無效
ORA-00071: 進程號必須介于 1 和 之間
ORA-00072: 進程""不活動
ORA-00073: 命令 介于 和 個參數之間時使用
ORA-00074: 未指定進程
ORA-00075: 在此例程未找到進程 ""
ORA-00076: 未找到轉儲
ORA-00077: 轉儲 無效
ORA-00078: 無法按名稱轉儲變量
ORA-00079: 未找到變量
ORA-00080: 層次 指定的全局區域無效
ORA-00081: 地址范圍 [,) 不可讀
ORA-00082: 的內存大小不在有效集合 [1], [2], [4] 之內
ORA-00083: 警告: 可能損壞映射的 SGA
ORA-00084: 全局區域必須為 PGA, SGA 或 UGA
ORA-00085: 當前調用不存在
ORA-00086: 用戶調用不存在
ORA-00087: 命令無法在遠程例程上執行
ORA-00088: 共享服務器無法執行命令
ORA-00089: ORADEBUG 命令中無效的例程號
ORA-00090: 未能將內存分配給群集數據庫 ORADEBUG 命令
ORA-00091: LARGE_POOL_SIZE 至少必須為
ORA-00092: LARGE_POOL_SIZE 必須大于 LARGE_POOL_MIN_ALLOC
ORA-00093: 必須介于 和 之間
ORA-00094: 要求整數值
ORA-00096: 值 對參數 無效,它必須來自 之間
ORA-00097: 使用 Oracle SQL 特性不在 SQL92 級中
ORA-00099: 等待資源時發生超時,可能是 PDML 死鎖所致
ORA-00100: 未找到數據
ORA-00101: 系統參數 DISPATCHERS 的說明無效
ORA-00102: 調度程序無法使用網絡協議
ORA-00103: 無效的網絡協議;供調度程序備用
ORA-00104: 檢測到死鎖;全部公用服務器已鎖定等待資源
ORA-00105: 未配置網絡協議 的調度機制
ORA-00106: 無法在連接到調度程序時啟動/關閉數據庫
ORA-00107: 無法連接到 ORACLE 監聽器進程
ORA-00108: 無法設置調度程序以同步進行連接
ORA-00111: 由于服務器數目限制在 , 所以沒有啟動所有服務器
ORA-00112: 僅能創建多達 (最多指定) 個調度程序
ORA-00113: 協議名 過長
ORA-00114: 缺少系統參數 SERVICE_NAMES 的值
ORA-00115: 連接被拒絕;調度程序連接表已滿
ORA-00116: SERVICE_NAMES 名過長
ORA-00117: 系統參數 SERVICE_NAMES 的值超出范圍
ORA-00118: 系統參數 DISPATCHERS 的值超出范圍
ORA-00119: 系統參數 的說明無效
ORA-00120: 未啟用或安裝調度機制
ORA-00121: 在缺少 DISPATCHERS 的情況下指定了 SHARED_SERVERS
ORA-00122: 無法初始化網絡配置
ORA-00123: 空閑公用服務器終止
ORA-00124: 在缺少 MAX_SHARED_SERVERS 的情況下指定了 DISPATCHERS
ORA-00125: 連接被拒絕;無效的演示文稿
ORA-00126: 連接被拒絕;無效的重復
ORA-00127: 調度進程 不存在
ORA-00128: 此命令需要調度進程名
ORA-00129: 監聽程序地址驗證失敗 ''
ORA-00130: 監聽程序地址 '' 無效
ORA-00131: 網絡協議不支持注冊 ''
ORA-00132: 語法錯誤或無法解析的網絡名稱 ''
ORA-00150: 重復的事務處理 ID
ORA-00151: 無效的事務處理 ID
ORA-00152: 當前會話與請求的會話不匹配
ORA-00153: XA 庫中的內部錯誤
ORA-00154: 事務處理監視器中的協議錯誤
ORA-00155: 無法在全局事務處理之外執行工作
ORA-00160: 全局事務處理長度 超出了最大值 ()
ORA-00161: 事務處理的分支長度 非法 (允許的最大長度為 )
ORA-00162: 外部 dbid 的長度 超出了最大值 ()
ORA-00163: 內部數據庫名長度 超出了最大值 ()
ORA-00164: 在分布式事務處理中不允許獨立的事務處理
ORA-00165: 不允許對遠程操作進行可移植分布式自治轉換
ORA-00200: 無法創建控制文件
ORA-00201: 控制文件版本 與 ORACLE 版本 不兼容
ORA-00202: 控制文件: ''
ORA-00203: 使用錯誤的控制文件
ORA-00204: 讀控制文件時出錯 (塊 ,# 塊 )
ORA-00205: 標識控制文件出錯,有關詳情,請檢查警告日志
ORA-00206: 寫控制文件時出錯 (塊 ,# 塊 )
ORA-00207: 控制文件不能用于同一數據庫
ORA-00208: 控制文件的名稱數超出限制
ORA-00209: 控制文件塊大小不匹配,有關詳情,請檢查警告日志
ORA-00210: 無法打開指定的控制文件
ORA-00211: 控制文件與先前的控制文件不匹配
ORA-00212: 塊大小 低于要求的最小大小 ( 字節)
ORA-00213: 不能重新使用控制文件;原文件大小為 ,還需
ORA-00214: 控制文件 '' 版本 與文件 '' 版本 不一致
ORA-00215: 必須至少存在一個控制文件
ORA-00216: 無法重新調整從 8.0.2 移植的控制文件大小
ORA-00217: 從 9.0.1 進行移植無法重新調整控制文件的大小
ORA-00218: 控制文件的塊大小 與 DB_BLOCK_SIZE () 不匹配
ORA-00219: 要求的控制文件大小 超出了允許的最大值
ORA-00220: 第一個例程未安裝控制文件,有關詳情,請檢查警告日志
ORA-00221: 寫入控制文件出錯
ORA-00222: 操作將重新使用當前已安裝控制文件的名稱
ORA-00223: 轉換文件無效或版本不正確
ORA-00224: 控制文件重設大小嘗試使用非法記錄類型 ()
ORA-00225: 控制文件的預期大小 與實際大小 不同
ORA-00226: 備用控制文件打開時不允許進行操作
ORA-00227: 控制文件中檢測到損壞的塊: (塊 ,# 塊 )
ORA-00228: 備用控制文件名長度超出了最大長度
ORA-00229: 操作不允許: 已掛起快照控制文件入隊
ORA-00230: 操作不允許: 無法使用快照控制文件入隊
ORA-00231: 快照控制文件未命名
ORA-00232: 快照控制文件不存在, 已損壞或無法讀取
ORA-00233: 控制文件副本已損壞或無法讀取
ORA-00234: 標識或打開快照或復制控制文件時出錯
ORA-00235: 控制文件固定表因并發更新而不一致
ORA-00236: 快照操作不允許: 掛上的控制文件為備份文件
ORA-00237: 快照操作不允許: 控制文件新近創建
ORA-00238: 操作將重用屬于數據庫一部分的文件名
ORA-00250: 未啟動存檔器
ORA-00251: LOG_ARCHIVE_DUPLEX_DEST 不能是與字符串 相同的目的地
ORA-00252: 日志 在線程 上為空,無法存檔
ORA-00253: 字符限制在 以內,歸檔目的字符串 超出此限制
ORA-00254: 存檔控制字符串 '' 時出錯
ORA-00255: 存檔日志 (線程 , 序列 # ) 時出錯
ORA-00256: 無法翻譯歸檔目的字符串
ORA-00257: 存檔器錯誤。在釋放之前僅限于內部連接
ORA-00258: NOARCHIVELOG 模式下的人工存檔必須標識日志
ORA-00259: 日志 (打開線程 ) 為當前日志,無法存檔
ORA-00260: 無法找到聯機日志序列 (線程 )
ORA-00261: 正在存檔或修改日志 (線程 )
ORA-00262: 當前日志 (關閉線程 ) 無法切換
ORA-00263: 線程 沒有需要存檔的記錄
ORA-00264: 不要求恢復
ORA-00265: 要求例程恢復,無法設置 ARCHIVELOG 模式
ORA-00266: 需要存檔日志文件名
ORA-00267: 無需存檔日志文件名
ORA-00268: 指定的日志文件不存在 ''
ORA-00269: 指定的日志文件為線程 的一部分 (非 )
ORA-00270: 創建存檔日志 時出錯
ORA-00271: 沒有需要存檔的日志
ORA-00272: 寫存檔日志 時出錯
ORA-00273: 未記錄的直接加載數據的介質恢復
ORA-00274: 非法恢復選項
ORA-00275: 已經開始介質恢復
ORA-00276: CHANGE 關鍵字已指定但未給出更改編號
ORA-00277: UNTIL 恢復標志 的非法選項
ORA-00278: 此恢復不再需要日志文件 ''
ORA-00279: 更改 (在 生成) 對于線程 是必需的
ORA-00280: 更改 對于線程 是按序列 # 進行的
ORA-00281: 不能使用調度進程執行介質恢復
ORA-00282: UPI 調用不被支持,請使用 ALTER DATABASE RECOVER
ORA-00283: 恢復會話因錯誤而取消
ORA-00284: 恢復會話仍在進行
ORA-00285: TIME 未作為字符串常數給出
ORA-00286: 無可用成員,或成員無有效數據
ORA-00287: 未找到指定的更改編號 (在線程 中)
ORA-00288: 要繼續恢復,請鍵入 ALTER DATABASE RECOVER CONTINUE
ORA-00289: 建議:
ORA-00290: 操作系統出現存檔錯誤。請參閱下面的錯誤
ORA-00291: PARALLEL 選項要求數字值
ORA-00292: 未安裝并行恢復功能
ORA-00293: 控制文件與重做日志不同步
ORA-00294: 無效的存檔日志格式標識 ''
ORA-00295: 數據文件號 無效,必須介于 1 與 之間
ORA-00296: 已超出 RECOVER DATAFILE LIST 的最大文件數 ()
ORA-00297: 必須在 RECOVER DATAFILE START 之前指定 RECOVER DATAFILE LIST
ORA-00298: 丟失或無效的 TIMEOUT 間隔
ORA-00299: 必須在數據文件 上使用文件級介質恢復
ORA-00300: 指定的重做日志塊大小 非法 - 超出限制
ORA-00301: 添加日志文件 '' 時出錯 - 無法創建文件
ORA-00302: 日志超出限制
ORA-00303: 無法處理多次中斷的重做
ORA-00304: 請求的 INSTANCE_NUMBER 在使用中
ORA-00305: 日志 (線程 ) 不一致;屬于另一個數據庫
ORA-00306: 此數據庫中的例程限制
ORA-00307: 請求的 INSTANCE_NUMBER 超出限制,最大為
ORA-00308: 無法打開存檔日志 ''
ORA-00309: 日志屬于錯誤的數據庫
ORA-00310: 存檔日志包含序列 ;要求序列
ORA-00311: 無法從存檔日志讀取標題
ORA-00312: 聯機日志 線程 : ''
ORA-00313: 無法打開日志組 (線程 ) 的成員
ORA-00314: 日志 (線程 ),預計序號 與 不匹配
ORA-00315: 日志 (線程 ),標題中的線程 # 錯誤
ORA-00316: 日志 (線程 ),標題中的類型 不是日志文件
ORA-00317: 標題中的文件類型 不是日志文件
ORA-00318: 日志 (線程 ),預計文件大小 與 不匹配
ORA-00319: 日志 (線程 ) 具有錯誤的日志重置狀態
ORA-00320: 無法從日志 (線程 ) 讀取文件標題
ORA-00321: 日志 (線程 ),無法更新日志文件標題
ORA-00322: 日志 (線程 ) 不是當前副本
ORA-00323: 線程 的當前日志不可用而所有其它日志均需要存檔
ORA-00324: 日志文件 '' 的翻譯名 '' 太長, 字符超出 限制
ORA-00325: 已歸檔線程 的日志,標題中的線程 # 錯誤
ORA-00326: 日志在更改 開始,需要更早的更改
ORA-00327: 日志 (線程 ),實際大小 小于需要的
ORA-00328: 歸檔日志在更改 結束,需要稍后的更改
ORA-00329: 歸檔日志在更改 開始,需要更改
ORA-00330: 歸檔日志在更改 結束,需要更改
ORA-00331: 日志版本 與 ORACLE 版本 不兼容
ORA-00332: 歸檔日志過小 - 可能未完全歸檔
ORA-00333: 重做日志讀取塊 計數 出錯
ORA-00334: 歸檔日志: ''
ORA-00335: 聯機日志 : 沒有此編號的日志,日志不存在
ORA-00336: 大小為 的日志文件塊數小于最小 塊數
ORA-00337: 日志文件 '' 不存在且未指定大小
ORA-00338: 日志 (線程 ) 比控制文件更新
ORA-00339: 歸檔日志未包含任何重做
ORA-00340: 處理聯機日志 (線程 ) 時出現 I/O 錯誤
ORA-00341: 日志 (線程 ),標題中的日志 # 錯誤
ORA-00342: 歸檔日志在上一個 RESETLOGS 之前創建程序包
ORA-00343: 錯誤過多,已關閉日志成員
ORA-00344: 無法重新創建聯機日志 ''
ORA-00345: 重做日志寫入塊 計數 出錯
ORA-00346: 日志成員標記為 STALE
ORA-00347: 日志 (線程 ),預計塊大小 與 不匹配
ORA-00348: 單一進程重做失敗;必須中止例程
ORA-00349: 無法獲得 '' 的塊大小
ORA-00350: 日志 (線程 ) 中需要歸檔
ORA-00351: recover-to 時間無效
ORA-00352: 線程 的所有日志均需要歸檔 - 無法啟用
ORA-00353: 日志損壞接近塊 更改 時間
ORA-00354: 損壞重做日志塊標題
ORA-00355: 更改編號無次序
ORA-00356: 更改說明中的長度不一致
ORA-00357: 日志文件指定了過多成員,最大為
ORA-00358: 指定了過多文件成員,最大為
ORA-00359: 日志文件組 不存在
ORA-00360: 非日志文件成員:
ORA-00361: 無法刪除最后一個日志成員 (組 )
ORA-00362: 組成組 中的有效日志文件要求輸入成員
ORA-00363: 日志不是歸檔版本
ORA-00364: 無法將標題寫入新日志成員
ORA-00365: 指定日志不是正確的下一個日志
ORA-00366: 日志 (線程 ),文件標題中的校驗和錯誤
ORA-00367: 日志文件標題中的校驗和錯誤
ORA-00368: 重做日志塊中的校驗和錯誤
ORA-00369: 線程 的當前日志不可用且其它日志已被清除
ORA-00370: Rcbchange 操作過程中可能出現死鎖
ORA-00371: 共享池內存不足
ORA-00372: 此時無法修改文件
ORA-00373: 聯機日志版本 與 ORACLE 版本 不兼容
ORA-00374: 參數 db_block_size = 無效; 它必須是 的倍數, 范圍為 [..]
ORA-00375: 無法獲得默認 db_block_size
ORA-00376: 此時無法讀取文件
ORA-00377: 文件 的頻繁備份導致寫操作延遲
ORA-00378: 無法按指定創建緩沖池
ORA-00379: 緩沖池 中無法提供 K 塊大小的空閑緩沖區
ORA-00380: 無法指定 db_k_cache_size, 因為 K 是標準塊大小
ORA-00381: 無法將新參數和舊參數同時用于緩沖區高速緩存的大小說明
ORA-00382: 不是有效的塊大小, 有效范圍為 [..]
ORA-00383: DEFAULT 高速緩存的塊大小 不能減少至零
ORA-00384: 沒有足夠的內存來增加高速緩存的大小
ORA-00385: cannot enable Very Large Memory with new buffer cache parameters
ORA-00390: 日志 (線程 ) 正被清除,無法成為當前日志
ORA-00391: 所有線程必須同時轉換為新的日志格式
ORA-00392: 日志 (線程 ) 正被清除,不允許操作
ORA-00393: 脫機數據文件的恢復需要日志 (線程 )
ORA-00394: 在嘗試存檔時重新使用聯機日志
ORA-00395: '克隆' 數據庫的聯機日志必須重命名
ORA-00396: 錯誤 需要退回到單次遍歷恢復
ORA-00397: 對于文件 (塊 ), 檢測到寫入丟失情況
ORA-00398: 由于重新配置而中止了線程恢復
ORA-00399: 重做日志中的更改說明已損壞
ORA-00400: 無效的版本值 (對于參數 )
ORA-00401: 此版本不支持參數 的值
ORA-00402: 版本 的數據庫更改無法用于版本
ORA-00403: () 不同于其它例程 ()
ORA-00404: 未找到轉換文件: ''
ORA-00405: 兼容類型""
ORA-00406: COMPATIBLE 參數需要為 或更大
ORA-00407: 不允許從版本 . 到 . 滾動升級
ORA-00408: 參數 設置為 TRUE
ORA-00409: COMPATIBLE 必須是 或更高值才能使用 AUTO SEGMENT SPACE MANAGEMENT
ORA-00436: 沒有 ORACLE 軟件使用權,請與 Oracle 公司聯系獲得幫助
ORA-00437: 沒有 ORACLE 軟件功能使用權,請與 Oracle 公司聯系獲得幫助
ORA-00438: 未安裝 選項
ORA-00439: 未啟用特性:
ORA-00443: 背景進程 "" 未啟動
ORA-00444: 背景進程 "" 啟動時失敗
ORA-00445: 背景進程 "" 在 秒之后仍沒有啟動
ORA-00446: 背景進程意外啟動
ORA-00447: 背景進程出現致命錯誤
ORA-00448: 背景進程正常結束
ORA-00449: 背景進程 '' 因錯誤 異常終止
ORA-00470: LGWR 進程因錯誤而終止
ORA-00471: DBWR 進程因錯誤而終止
ORA-00472: PMON 進程因錯誤而終止
ORA-00473: ARCH 進程因錯誤而終止
ORA-00474: SMON 進程因錯誤而終止
ORA-00475: TRWR 進程因錯誤而終止
ORA-00476: RECO 進程因錯誤而終止
ORA-00477: SNP* 進程因錯誤而終止
ORA-00478: SMON 進程由于 錯誤終止
ORA-00480: LCK* 進程因錯誤而終止
ORA-00481: LMON 進程因錯誤而終止
ORA-00482: LMD* 進程因錯誤而終止
ORA-00483: 關閉進程過程中異常終止
ORA-00484: LMS* 進程因錯誤而終止
ORA-00485: DIAG 進程由于 錯誤終止
ORA-00486: 功能不可用
ORA-00568: 超出中斷處理程序的最大數
ORA-00574: osndnt: $CANCEL 失敗 (中斷)
ORA-00575: osndnt: $QIO 失敗 (發送 out-of-band 中斷)
ORA-00576: 帶內中斷協議錯誤
ORA-00577: 帶外中斷協議錯誤
ORA-00578: 重置協議錯誤
ORA-00579: osndnt: 服務器收到連接請求格式不正確
ORA-00580: 協議版本不匹配
ORA-00581: osndnt: 無法分配上下文區域
ORA-00582: osndnt: 無法撤消分配上下文區域
ORA-00583: osndnt: $TRNLOG 失敗
ORA-00584: 無法關閉連接
ORA-00585: 主機名稱格式錯誤
ORA-00586: osndnt: LIB$ASN_WTH_MBX 失敗
ORA-00587: 無法連接到遠程主機
ORA-00588: 來自主機的信息過短
ORA-00589: 來自主機的信息數據長度錯誤
ORA-00590: 來自主機的信息類型錯誤
ORA-00591: 寫入的字節數錯誤
ORA-00592: osndnt: $QIO 失敗 (郵箱隊列)
ORA-00593: osndnt: $DASSGN 失敗 (網絡設備)
ORA-00594: osndnt: $DASSGN 失敗 (郵箱)
ORA-00595: osndnt: $QIO 失敗 (接收)
ORA-00596: osndnt: $QIO 失敗 (發送)
ORA-00597: osndnt: $QIO 失敗 (郵箱隊列)
ORA-00598: osndnt: $QIO IO 失敗 (郵箱讀取)
ORA-00600: 內部錯誤代碼,參數: [], [], [], [], [], [], [], []
ORA-00601: 清除鎖定沖突
ORA-00602: 內部編程異常錯誤
ORA-00603: ORACLE 服務器會話因致命錯誤而終止
ORA-00604: 遞歸 SQL 層 出現錯誤
ORA-00606: 內部錯誤代碼
ORA-00607: 當更改數據塊時出現內部錯誤
ORA-00701: 無法改變熱啟動數據庫所需的對象
ORA-00702: 引導程序版本 '' 與版本 '' 不一致
ORA-00703: 超出行高速緩存例程鎖的最大數
ORA-00704: 引導程序進程失敗
ORA-00705: 啟動過程中的狀態不一致;請在關閉例程后重新啟動
ORA-00706: 更改文件 '' 的格式時出錯
ORA-00816: 錯誤信息無法轉換
ORA-00900: 無效 SQL 語句
ORA-00901: 無效 CREATE 命令
ORA-00902: 無效數據類型
ORA-00903: 表名無效
ORA-00904: : 無效的標識符
ORA-00905: 缺少關鍵字
ORA-00906: 缺少左括號
ORA-00907: 缺少右括號
ORA-00908: 缺少 NULL 關鍵字
ORA-00909: 參數個數無效
ORA-00910: 指定的長度對于數據類型而言過長
ORA-00911: 無效字符
ORA-00913: 值過多
ORA-00914: 缺少 ADD 關鍵字
ORA-00915: 當前不允許網絡訪問字典表
ORA-00917: 缺少逗號
ORA-00918: 未明確定義列
ORA-00919: 無效函數
ORA-00920: 無效的關系運算符
ORA-00921: 未預期的 SQL 命令結尾
ORA-00922: 缺少或無效選項
ORA-00923: 未找到預期 FROM 關鍵字
ORA-00924: 缺少 BY 關鍵字
ORA-00925: 缺失 INTO 關鍵字
ORA-00926: 缺少 VALUES 關鍵字
ORA-00927: 缺少等號
ORA-00928: 缺少 SELECT 關鍵字
ORA-00929: 缺少句號
ORA-00930: 缺少星號
ORA-00931: 缺少標識
ORA-00932: 不一致的數據類型: 要求 得到的卻是
ORA-00933: SQL 命令未正確結束
ORA-00934: 此處不允許使用分組函數
ORA-00935: 分組函數的嵌套太深
ORA-00936: 缺少表達式
ORA-00937: 非單組分組函數
ORA-00938: 函數沒有足夠的參數
ORA-00939: 函數的參數過多
ORA-00940: 無效的 ALTER 命令
ORA-00941: 群集名缺少
ORA-00942: 表或視圖不存在
ORA-00943: 群集不存在
ORA-00944: 沒有足夠的聚簇列數
ORA-00945: 指定的聚簇列不存在
ORA-00946: 缺少 TO 關鍵字
ORA-00947: 沒有足夠的值
ORA-00948: 不再支持 ALTER CLUSTER 語句
ORA-00949: 非法引用遠程數據庫
ORA-00950: 無效 DROP 選項
ORA-00951: 群集非空
ORA-00952: 缺少 GROUP 關鍵字
ORA-00953: 缺少或無效索引名
ORA-00954: 缺少 IDENTIFIED 關鍵字
ORA-00955: 名稱已由現有對象使用
ORA-00956: 缺少或無效審計選項
ORA-00957: 列名重復
ORA-00958: 缺少 CHECK 關鍵字
ORA-00959: 表空間''不存在
ORA-00960: 選擇列表中的命名含糊
ORA-00961: 錯誤的日期/間隔值
ORA-00962: group-by / order-by 表達式過多
ORA-00963: 不支持的間隔類型
ORA-00964: 表名不在 FROM 列表中
ORA-00965: 列別名中不允許'*'
ORA-00966: 缺少 TABLE 關鍵字
ORA-00967: 缺少 WHERE 關鍵字
ORA-00968: 缺少 INDEX 關鍵字
ORA-00969: 缺少 ON 關鍵字
ORA-00970: 缺少 WITH 關鍵字
ORA-00971: 缺少 SET 關鍵字
ORA-00972: 標識過長
ORA-00973: 無效的行數估計
ORA-00974: 無效 PCTFREE 值 (百分比)
ORA-00975: 不允許日期 + 日期
ORA-00976: 此處不允許為 LEVEL, PRIOR 或 ROWNUM
ORA-00977: 重復的審計選項
ORA-00978: 嵌套分組函數沒有 GROUT BY
ORA-00979: 不是 GROUP BY 表達式
ORA-00980: 同義詞轉換不再有效
ORA-00981: 不能將表和系統審計選項混在一起
ORA-00982: 缺少加號
ORA-00984: 列在此處不允許
ORA-00985: 無效的程序名
ORA-00986: 缺少或無效組名
ORA-00987: 缺少或無效用戶名
ORA-00988: 缺少或無效口令
ORA-00989: 給出的用戶名口令過多
ORA-00990: 缺少或無效權限
ORA-00991: 過程僅有 MAC 權限
ORA-00992: REVOKE 命令格式無效
ORA-00993: 缺少 GRANT 關鍵字
ORA-00994: 缺少 OPTION 關鍵字
ORA-00995: 缺少或無效同義詞標識
ORA-00996: 連接運算符是 || 而不是 |
ORA-00997: 非法使用 LONG 數據類型
ORA-00998: 必須使用列別名命名此表達式
ORA-00999: 無效的視圖名
ORA-01000: 超出打開游標的最大數
ORA-01001: 無效的游標
ORA-01002: 讀取違反順序
ORA-01003: 語句未進行語法分析
ORA-01004: 不支持默認用戶名特性;登錄被拒絕
ORA-01005: 未給出口令;登錄被拒絕
ORA-01006: 賦值變量不存在
ORA-01007: 選擇列表中沒有變量
ORA-01008: 并非所有變量都已關聯
ORA-01009: 缺少法定參數
ORA-01010: 無效的 OCI 操作
ORA-01011: 在與第 6 版服務器會話時不能使用第 7 版兼容模式
ORA-01012: 沒有登錄
ORA-01013: 用戶請求取消當前的操作
ORA-01014: ORACLE 正在關閉過程中
ORA-01015: 循環登錄請求
ORA-01016: 此函數僅可以在讀取后調用
ORA-01017: 無效的用戶名/口令;拒絕登錄
ORA-01018: 列不具有 LONG 數據類型
ORA-01019: 無法在用戶方分配內存
ORA-01020: 未知的上下文狀態
ORA-01021: 指定的上下文大小無效
ORA-01022: 此配置中不支持數據庫操作
ORA-01023: 未找到游標上下文 (無效的游標編號)
ORA-01024: OCI 調用中的數據類型無效
ORA-01025: UPI 參數超出范圍
ORA-01026: 賦值列表中存在多個大小 > 4000 的緩沖區
ORA-01027: 在數據定義操作中不允許對變量賦值
ORA-01028: 內部雙工錯誤
ORA-01029: 內部雙工錯誤
ORA-01030: SELECT ...INTO 變量不存在
ORA-01031: 權限不足
ORA-01032: 沒有這樣的用戶標識
ORA-01033: ORACLE 正在初始化或關閉過程中
ORA-01034: ORACLE 不可用
ORA-01035: ORACLE 只允許具有 RESTRICTED SESSION 權限的用戶使用
ORA-01036: 非法的變量名/編號
ORA-01037: 超出最大游標內存
ORA-01038: 無法寫入數據庫文件版本 (使用 ORACLE 版本 )
ORA-01039: 視圖基本對象的權限不足
ORA-01040: 口令中的字符無效;登錄被拒絕
ORA-01041: 內部錯誤,hostdef 擴展名不存在
ORA-01042: 不允許使用打開游標分離會話
ORA-01043: 用戶方內存損壞 [], [], [], []
ORA-01044: 緩沖區大小 (與變量關聯) 超出了最大限制
ORA-01045: 用戶 沒有 CREATE SESSION 權限;登錄被拒絕
ORA-01046: 無法獲得擴展上下文區域的空間
ORA-01047: 以上錯誤出現在 schema=, package=, procedure= 中
ORA-01048: 給定的上下文中無法找到指定的過程
ORA-01049: 流動 RPC 中不支持按名稱賦值
ORA-01050: 無法獲得打開上下文區域的空間
ORA-01051: 延遲 rpc 緩沖區格式無效
ORA-01052: 未指定所需的目的 LOG_ARCHIVE_DUPLEX_DEST
ORA-01053: 無法讀取用戶存儲地址
ORA-01054: 無法寫入用戶存儲地址
ORA-01057: 用戶出口中引用的 block.field 無效或有歧義
ORA-01058: 內部 New Upi 接口錯誤
ORA-01059: 在賦值或執行之前進行語法分析
ORA-01060: 不允許數組賦值或執行
ORA-01061: 無法使用第 7 版客戶應用程序啟動第 8 版服務器
ORA-01062: 無法分配定義緩沖區所需的內存
ORA-01070: 服務器使用 Oracle 的舊版本
ORA-01071: 無法不啟動 ORACLE 而執行操作
ORA-01072: 無法停止 ORACLE;因為 ORACLE 不在運行
ORA-01073: 致命的連接錯誤: 不能識別的調用類型
ORA-01074: 無法關閉 ORACLE;請首先在注冊會話中注銷
ORA-01075: 您現在已登錄
ORA-01076: 尚不支持每個進程的多次登錄
ORA-01077: 背景進程初始化失敗
ORA-01078: 處理系統參數失敗
ORA-01079: ORALCE 數據庫未正確創建,操作中止
ORA-01080: 關閉 ORACLE 時出錯
ORA-01081: 無法啟動已在運行的 ORACLE --- 請首先關閉
ORA-01082: 'row_locking = always' 要求事務處理處理選項
ORA-01083: 參數 "" 的值與其它例程序的相應參數值不一致。
ORA-01084: OCI 調用中的參數無效
ORA-01085: 延遲 rpc 到 ".." 之前的錯誤
ORA-01086: 從未創建保留點 ''
ORA-01087: 不能啟動 ORALCE --- 現在已登錄
ORA-01088: 不能在存在活動進程時關閉 ORACLE
ORA-01089: 正在進行緊急關閉 - 不允許進行任何操作
ORA-01090: 正在進行關閉 --- 不允許連接
ORA-01091: 強行啟動出錯
ORA-01092: ORACLE 例程終止。強行斷開連接
ORA-01093: ALTER DATABASE CLOSE 僅允許在沒有連接會話時使用
ORA-01094: ALTER DATABASE CLOSE 正在進行。不允許連接
ORA-01095: DML 語句處理了零個行
ORA-01096: 程序版本 () 與例程 () 不兼容
ORA-01097: 無法在事務處理過程中關閉 - 首先提交或返回
ORA-01098: 在 Long Insert 過程中出現程序接口錯誤
ORA-01099: 如果在單進程模式下啟動,則無法在 SHARED 模式下安裝數據庫
ORA-01100: 數據庫已安裝
ORA-01101: 要創建的數據庫當前正由其它例程安裝
ORA-01102: 無法在 EXCLUSIVE 模式下安裝數據庫
ORA-01103: 控制文件中的數據庫名 '' 不是 ''
ORA-01104: 控制文件數 () 不等于
ORA-01105: 安裝與其它例程的安裝不兼容
ORA-01106: 必須在卸下之前關閉數據庫
ORA-01107: 必須安裝數據庫才可以進行介質恢復
ORA-01108: 文件 正處于備份或介質恢復過程中
ORA-01109: 數據庫未打開
ORA-01110: 數據文件 : ''
ORA-01111: 數據文件 名稱未知 - 請重命名以更正文件
ORA-01112: 未啟動介質恢復
ORA-01113: 文件 需要介質恢復
ORA-01114: 將塊寫入文件 時出現 IO 錯誤 (塊 # )
ORA-01115: 從文件 讀取塊時出現 IO 錯誤 (塊 # )
ORA-01116: 打開數據庫文件時出錯
ORA-01117: 對文件 '' 添加非法塊大小: ;限制為
ORA-01118: 無法添加任何其它數據庫文件: 超出限制
ORA-01119: 創建數據庫文件 '' 時出錯
ORA-01120: 無法刪除聯機數據庫文件
ORA-01121: 無法重命名數據庫文件 - 文件在使用中或在恢復中
ORA-01122: 數據庫文件 驗證失敗
ORA-01123: 無法啟動聯機備份;未啟用介質恢復
ORA-01124: 無法恢復數據文件 - 文件在使用中或在恢復中
ORA-01125: 無法禁用介質恢復 - 文件 設置了聯機備份
ORA-01126: 對于此操作,數據庫必須以 EXCLUSIVE 模式安裝且未打開
ORA-01127: 數據庫名 '' 超出 個字符的限制
ORA-01128: 無法啟動聯機備份 - 文件 處于脫機狀態
ORA-01129: 用戶默認或臨時表空間不存在
ORA-01130: 數據庫文件版本 與 ORACLE 版本 不兼容
ORA-01131: DB_FILES 系統參數值 超出限制
ORA-01132: 數據庫文件名 '' 的長度超出 個字符的限制
ORA-01133: 日志文件名 '' 的長度超出 個字符的限制
ORA-01134: 數據庫已由其它例程獨立安裝
ORA-01135: DML/query 訪問的文件 處于脫機狀態
ORA-01136: 文件 ( 塊) 的指定大小小于 塊的原大小
ORA-01137: 數據文件 仍處于脫機過程中
ORA-01138: 數據庫必須在此例程中打開或根本沒有打開
ORA-01139: RESETLOGS 選項僅在不完全數據庫恢復后有效
ORA-01140: 無法結束聯機備份 - 所有文件均處于脫機狀態
ORA-01141: 重命名數據文件 時出錯 - 未找到新文件 ''
ORA-01142: 無法結束聯機備份 - 沒有文件在備份中
ORA-01143: 不能禁用介質恢復 - 文件 需要介質恢
關于怎么進行Oracle異常處理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。