oracle例外處理

2023-05-09 12:02:24

序言

最近在工作中遇到這麼一個場景:

  • 在同一網段記憶體在著A庫和B庫,需要將A庫下某些表的資料同步到B庫
  • B庫跑著定時任務,定時呼叫儲存過程將A庫下的資料同步到B庫。
  • B庫和A庫是通過建立dblink建立連線的。【關於dblink相關可能會後面單獨寫部落格,先給自己挖個坑,慢慢填 哈哈】。
  • 定時任務的頻次呢是10分鐘增量同步一次。

但是隨著時間推移,問題出來了:一部分資料沒同步過去。

排查步驟:

  • 檢查定時任務是不是被終止了
  • 檢查儲存過程是不是出問題了
  • 檢查A庫中的目標資料是不是不符合規範

排查思路是將從A庫中同步到B庫的資料都刪了,然後手動呼叫過程,發現全部資料可以正常同步過去,這樣就將上面三種情況都排除了。

這就令人很費解了,是哪出問題了呢?最後將問題定位在執行儲存過程中,由於某種原因發生了異常,導致資料同步失敗。這樣看來是儲存過程寫的不夠完善,某些異常沒考慮進去。

吸取以上事例教訓,下面就來探究下Oracle中例外處理流程

1 異常概念

和其他程式語言一樣,用PL/SQL編寫的程式,在執行過程中也會出現各種錯誤,這些錯誤就是異常。
舉個栗子:

declare
v_result number(10) :=0;
begin
    v_result := 10/0;
    dbms_output.put_line('結果是:'||v_result);
end;

以上指令碼執行時就會發生除數為0的異常

2 異常分類

  • 預定義異常 (與Oracle 中的錯誤有關,當出現錯誤時會自動觸發)
  • 非預定義異常(與Oracle 中的錯誤有關,當出現錯誤時會自動觸發)
  • 自定義異常 (人為的為某種特殊情況定義的異常,不會自動觸發,需要顯示的操作來觸發)

3 例外處理

3.1 例外處理語法

exception
    when exception1 [or exception2...] then   --異常列表
        statement...                          --例外處理語句
    when exception3 [or exception4...] then   --異常列表
         statement...                         --異常語句
    when others then                         
        statement...

--exception 表示申明異常塊部分,它是例外處理部分開始標誌
-- where 後面是異常列表
-- then 後面是例外處理語句 也就是發生的異常和異常列表裡的異常匹配是,執行的指定語句
-- 可以有多個when
--when others then 是例外處理最後部分,表示如果丟擲的異常和前面的都不匹配時執行此處  

3.2 預定義例外處理

在oracle中提供一些已經定義好的常用異常,oracle中一共提供了25中預定義異常。
可以根據以下語句查詢

select * from dba_source where name='STANDARD' and text like '%EXCEPTION_INIT%'

下面是一些常見異常

Exception ORA Error SQL CODE Condition
CASE_NOT_FOUND ORA-06592 -6592 CASE語句時,WHEN字句沒有包含必須的條件分支,並且沒有ELSE語句,就會觸發該異常
DATA_NOT_FOUND ORA-01403 +100 select into 語句沒有返回記錄就會觸發此異常
TOO_MANY_ROWS ORA-01422 -1422 select into 語句返回記錄多餘一條就會觸發此異常
DUP_VAL_ON_INDEX ORA-00001 -1 當在唯一索引所對應的列上鍵入重複值時,就會觸發該異常
VALUE_ERROR ORA-06522 -06522 賦值是,如果變數長度不足以容納實際資料,則會觸發該異常
ZERO_DIVIDE ORA-01476 -01476 除數為0時觸發異常
STORAGE_ERROR ORA-06500 -06500 記憶體溢位時觸發異常
TIMEOUT_ON_RESOURCE ORA-00051 -51 等待資源超時時觸發異常
CURSOR_ALREADY_OPEN ORA-06511 -6511 開啟一個已經開啟的遊標時觸發異常

舉個栗子:

declare
v_result number(10) :=0;
begin
   v_result := 10/0;
   dbms_output.put_line('結果是:'||v_result);
   exception
       when ZERO_DIVIDE then
       dbms_output.put_line('除數為0了');
end;
--除數為0時會立即捕獲異常,異常和when中匹配時,執行之後語句。避免程式中斷
-- **異常匹配是從上到下的**

3.3 非預定義異常

oracle 中更多的是非預定義異常,它們只有錯誤編號和錯誤描述。而沒有名稱的異常是不能被捕獲的。在oracle中允許開發人員為這樣的異常取個名稱,使他們能夠被例外處理模組捕捉到

非預定義異常定義步驟:

  • 申明一個異常名稱
  • 把這個名稱和異常編號關聯起來
  • 在PL/SQL 塊的異常情況處理部分對異常情況做出相應的處理
    舉個栗子:
--刪除指定部門的記錄資訊,以確保該部門沒有員工。
INSERT INTO departments VALUES(50, 'FINANCE', 'CHICAGO');

DECLARE
   v_deptno departments.department_id%TYPE := &deptno;
   deptno_remaining EXCEPTION;    --申明異常
   PRAGMA EXCEPTION_INIT(deptno_remaining, -2292); --把異常名稱和錯誤號關聯起來
   /* -2292 是違反一致性約束的錯誤程式碼 */
BEGIN
   DELETE FROM departments WHERE department_id = v_deptno;
EXCEPTION
   WHEN deptno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('違反資料完整性約束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;

3.4 自定義異常

使用者定義的異常錯誤是通過顯式使用 RAISE 語句來觸發。當引發一個異常錯誤時,控制就轉向到 EXCEPTION塊異常錯誤部分,執行錯誤處理程式碼。

3.4.1 自定義例外處理步驟

  1. 在PL/SQL 塊的定義部分定義異常情況:<異常情況> EXCEPTION;
  2. RAISE <異常情況>;
  3. 在PL/SQL 塊的異常情況處理部分對異常情況做出相應的處理。

舉個栗子:

--更新指定員工工資,增加100
DECLARE
   v_empno employees.employee_id%TYPE :=&empno;
   no_result  EXCEPTION;
BEGIN
   UPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;
   IF SQL%NOTFOUND THEN
      RAISE no_result;
   END IF;
EXCEPTION
   WHEN no_result THEN
      DBMS_OUTPUT.PUT_LINE('你的資料更新語句失敗了!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;

4 異常出現位置

4.1 申明部分引發異常錯誤

在程式申明部分出現錯誤,那麼該錯誤就能影響到其他塊

例如:

DECLARE
    abc number(3):='abc';
    其它語句
BEGIN
    其它語句
EXCEPTION
    WHEN OTHERS THEN
    其它語句
END;
-- 以上例子 由於abc number(3)='abc'; 出錯,儘管在EXCEPTION中說明了WHEN OTHERS THEN語句,但WHEN OTHERS THEN也不會被執行。這時就需要如下寫法才能捕獲異常,在該錯誤語句塊的外部有一個異常錯誤,則該錯誤能被抓住
BEGIN
    DECLARE
    abc number(3):='abc';
    其它語句
   BEGIN
    其它語句
   EXCEPTION
    WHEN OTHERS THEN
    其它語句
    END;
EXCEPTION
WHEN OTHERS THEN
    其它語句
END;

4.2 執行部分引發異常

  • 1如果當前塊對該異常錯誤設定了處理,則執行它併成功完成該塊的執行,然後控制轉給包含塊。

  • 如果沒有對當前塊異常錯誤設定定義處理器,則通過在包含塊中引發它來傳播異常錯誤。然後對該包含塊執行步驟1)。

5 SQLCODE, SQLERRM例外處理函數

    由於ORACLE 的錯資訊最大長度是512位元組,為了得到完整的錯誤提示資訊,我們可用 SQLERRM和 SUBSTR 函數一起得到錯誤提示資訊。
  • SQLCODE 返回遇到的Oracle錯誤號
  • SQLERRM 返回遇到的Oracle錯誤資訊
    例如:
SQLCODE=-100    SQLERRM=’no_data_found ‘
SQLCODE=0       SQLERRM=’normal, successfual completion’

常用場景:

-- 1. 將ORACLE錯誤程式碼及其資訊存入錯誤程式碼錶
CREATE TABLE errors (errnum NUMBER(4), errmsg VARCHAR2(100));

DECLARE
   err_msg  VARCHAR2(100);
BEGIN
   /*  得到所有 ORACLE 錯誤資訊  */
   FOR err_num IN -100 .. 0 LOOP
      err_msg := SQLERRM(err_num);
      INSERT INTO errors VALUES(err_num, err_msg);
   END LOOP;
END;
DROP TABLE errors;
--2. 查詢ORACLE錯誤程式碼;
BEGIN
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(1111, '張','三', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
  
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(2222, '李','四', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);   --將錯誤程式碼和錯誤資訊列印出來
END;
--3. 利用ORACLE錯誤程式碼,編寫異常錯誤處理程式碼;
DECLARE
   empno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(empno_remaining, -1);
   /* -1 是違反唯一約束條件的錯誤程式碼 */
BEGIN
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(3333, '王','五', SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
  
   INSERT INTO employees(employee_id, first_name,last_name,hire_date,department_id)
   VALUES(3333, '趙','六',SYSDATE, 20);
   DBMS_OUTPUT.PUT_LINE('插入資料記錄成功!');
EXCEPTION
   WHEN empno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('違反資料完整性約束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;

6 oracle 錯誤碼歸納

errcode err
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 不能禁用媒介恢復 - 檔案 需要媒介恢