写点什么

Oracle 是如何处理异常的?

用户头像
xiezhr
关注
发布于: 2021 年 03 月 09 日
Oracle 是如何处理异常的?


序言

最近在工作中遇到这么一个场景:

  • 在同一网段内存在着 A 库和 B 库,需要将 A 库下某些表的数据同步到 B 库

  • B 库跑着定时任务,定时调用存储过程将 A 库下的数据同步到 B 库。

  • B 库和 A 库是通过建立 dblink 建立连接的。【关于 dblink 相关可能会后面单独写博客,先给自己挖个坑,慢慢填 哈哈】。

  • 定时任务的频次呢是 10 分钟增量同步一次。


但是随着时间推移,问题出来了:一部分数据没同步过去。


排查步骤:

  • 检查定时任务是不是被终止了

  • 检查存储过程是不是出问题了

  • 检查 A 库中的目标数据是不是不符合规范


排查思路是将从 A 库中同步到 B 库的数据都删了,然后手动调用过程,发现全部数据可以正常同步过去,这样就将上面三种情况都排除了。


这就令人很费解了,是哪出问题了呢?最后将问题定位在执行存储过程中,由于某种原因发生了异常,导致数据同步失败。这样看来是存储过程写的不够完善,某些异常没考虑进去。


吸取以上事例教训,下面就来探究下 Oracle 中异常处理流程


1 异常概念

和其他编程语言一样,用 PL/SQL 编写的程序,在运行过程中也会出现各种错误,这些错误就是异常。

举个栗子:

declarev_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 中预定义异常。

可以根据以下语句查询

```sql

select * from dbasource where name='STANDARD' and text like '%EXCEPTIONINIT%'

```

下面是一些常见异常


| Exception | ORA Error | SQL CODE | Condition |

| ------ | ------ | ------ | ------ |

| CASENOTFOUND | ORA-06592 | -6592 | CASE 语句时,WHEN 字句没有包含必须的条件分支,并且没有 ELSE 语句,就会触发该异常 |

| DATANOTFOUND | ORA-01403 | +100 | select into 语句没有返回记录就会触发此异常 |

| TOOMANYROWS | ORA-01422 | -1422 | select into 语句返回记录多余一条就会触发此异常 |

|DUPVALON_INDEX|ORA-00001|-1|当在唯一索引所对应的列上键入重复值时,就会触发该异常|

|VALUE_ERROR|ORA-06522|-06522|赋值是,如果变量长度不足以容纳实际数据,则会触发该异常|

|ZERO_DIVIDE|ORA-01476|-01476|除数为 0 时触发异常|

|STORAGE_ERROR|ORA-06500|-06500|内存溢出时触发异常|

|TIMEOUTONRESOURCE|ORA-00051|-51|等待资源超时时触发异常|

|CURSORALREADYOPEN|ORA-06511|-6511|打开一个已经打开的游标时触发异常|


举个栗子:

```sql

declare

v_result number(10) :=0;

begin

v_result := 10/0;

dbmsoutput.putline('结果是:'||v_result);

exception

when ZERO_DIVIDE then

dbmsoutput.putline('除数为 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 块的异常情况处理部分对异常情况做出相应的处理。


举个栗子:

--更新指定员工工资,增加100DECLARE   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;EXCEPTIONWHEN 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| LICENSEMAXUSERS 不能小于当前用户数

|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| DBBLOCKSIZE 必须为才可安装此数据库 (非 )

|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| LARGEPOOLSIZE 至少必须为

|ORA-00092| LARGEPOOLSIZE 必须大于 LARGEPOOLMIN_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| 在缺少 MAXSHAREDSERVERS 的情况下指定了 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| 控制文件的块大小 与 DBBLOCKSIZE () 不匹配

|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| LOGARCHIVEDUPLEX_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| 参数 dbblocksize = 无效; 它必须是 的倍数, 范围为 [..]

|ORA-00375| 无法获得默认 dbblocksize

|ORA-00376| 此时无法读取文件

|ORA-00377| 文件 的频繁备份导致写操作延迟

|ORA-00378| 无法按指定创建缓冲池

|ORA-00379| 缓冲池 中无法提供 K 块大小的空闲缓冲区

|ORA-00380| 无法指定 dbkcache_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$ASNWTHMBX 失败

|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| 未指定所需的目的 LOGARCHIVEDUPLEX_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| 不能禁用介质恢复 - 文件 需要介质恢


发布于: 2021 年 03 月 09 日阅读数: 10
用户头像

xiezhr

关注

把分享变成一种习惯,再小的帆也能远航 2021.03.01 加入

还未添加个人简介

评论

发布
暂无评论
Oracle 是如何处理异常的?