oracle 异常处理总结

合集下载

12_PLSQL的异常处理

12_PLSQL的异常处理
... EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20201,'Manager is not a valid employee.'); END;
12-16
成都信息工程学院· 计算机系
嵌入块能够处理异常或传 递异常到它的上层块
12-15
成都信息工程学院· 计算机系
RAISE_APPLICATION_ERROR
语法
raise_application_error (error_number, message[, {TRUE | FALSE}]);
• 从存储过程中触发用户自定义异常。
1
2
3
12-12
成都信息工程学院· 计算机系
捕获异常中的函数
• SQLCODE
返回错误代码。
• SQLERRM
返回与错误代码相关联的消息。
Байду номын сангаас
12-13
成都信息工程学院· 计算机系
捕获异常中的函数
DECLARE v_error_code v_error_message BEGIN ... EXCEPTION ... WHEN OTHERS THEN ROLLBACK; v_error_code := v_error_message
12-8
成都信息工程学院· 计算机系
捕获非Oracle服务器预定义错误
将一个经过命名的异常和一个特别的Oracle错误相关联。
Declare
Associate
Reference
Exception-Handling Section
Declarative Section

Oracle ESB Lesson06 交易和异常处理指南说明书

Oracle ESB Lesson06 交易和异常处理指南说明书
• Exceptions Visible in Console Instance Tracking • Only Retryable Exceptions can be resubmitted • Yellow Indicates Non Transactional Endpoint • “R” indicates transaction Rollback status
Use JCA Rejection Handlers for Sync Rules
• Custom Rejection Handlers redirect to JCA destinations
• File, AQ, WSIF (JMS, DB …) • Supports both inbound and outbound adapters
– “Async” execution terminates existing txn – “Sync” execution continues inbound txn – ESB has 1 Listener per ESB System per Async Topic
• What does this mean ?
- See “Update Service” response dialogue - Click “OK” - Notice CustDBOut Routing Rule moved to end - Click on “Diagram” - See new “Async” execution rule icon
ESB Lesson06
Page 11
Go Back to Services View
- Click “Services” - Select “CustOut_RS” in Service Pane - Click “Routing Rules” Tab

ORA-12570错误处理的简单记录-oracle数据库故障处理记录

ORA-12570错误处理的简单记录-oracle数据库故障处理记录

ORA-12570错误处理的简单记录-oracle数据库故障处理记录引⾔:在公司⼀台windows搭建的oracle的数据库运⾏⼀直正常,突然昨天发⽣了发现在其他机器客户端连接服务器的oracle数据库连接不上,报错17001,于是开始了本次故障处理。

oracle故障处理记录过程1:排查orale服务于客户端机器是否⽹络被做了限制,在客户端通过telnet oracle主机的ip 端⼝,此项排查完毕,正常!2:登录oracle服务器,在windows机器的服务⾥查看oracle的数据库服务和listenner是否是启动状态。

此项排查完毕,正常!3:在oracle服务器,使⽤客户端软件⼯具连接oracle数据库,连接不上,报错异常为IO异常。

因此怀疑为⽹络限制或域名解析问题。

4:由于怀疑是⽹络问题,所以先查看oracle配置⽂件的listenner中的host是否被⼈篡改或不能识别,排查完毕,正常!查看windows主机的host,位置:C:\Windows\System32\drivers\etc\hosts 发现这个hosts⽂件中没有配置主机名与ip地址的对应,关系,于是加上后重启listenner,仍然不能正常连接,排查完毕!5:查看oracle数据库服务器中的trace中的listenner⽇志,位置: $oracle_home\diag\tnslsnr\主机名\listener\trace\,发现⽇志⾥报错的都是ORA-12570,百度搜索问题中有⼈回答是需要重启监听,这个我测试过,并没有解决问题,也有的⼈回复需要将listen.ora中的HOST从主机名换成ip地址,这个也做过测试仍然不⾏。

6:进⾏原始命令连接,从windows机器上进⾏cmd的sqlplus连接,发现如果是sqlplus ⽤户名/密码连接正常,但是如果使⽤ sqlplus ⽤户名/密码@ip地址:端⼝/实例这样的⽅式进⾏连接的时候返回的结果是 no listenner,这样认定为listenner⽆响应。

Oracle存储过程异常处理

Oracle存储过程异常处理

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 。

oracle异常处理步骤

oracle异常处理步骤

oracle异常处理步骤
Oracle数据库异常处理步骤如下:
1. 定位异常:首先确定出现异常的具体位置,可以通过数据库日志、错误消息和异常堆栈跟踪等方式来定位。

2. 分析异常:对异常进行详细分析,了解异常的原因和影响。

3. 恢复数据库:根据异常的严重程度决定是否需要恢复数据库。

如果是较小的异常,可以进行手动或自动恢复;如果是较严重的异常,可能需要进行数据库的备份和恢复操作。

4. 修复异常:根据异常的具体情况,进行相应的修复操作。

这可能包括删除无效的数据、重建索引、修复损坏的表结构等。

5. 进行测试:在修复异常之后,进行必要的测试,确保数据库的正常运行。

可以执行一些SQL查询、事务处理和性能测试等,以验证修复操作的有效性。

6. 监控和预防措施:定期监控数据库的运行情况,及时发现异常并采取相应的措施。

同时,采取一些预防措施,如定期备份数据库、设置合适的权限和访问控制、优化SQL查询等,以
减少数据库异常的发生。

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案

ORACLE 数据库故障解决方案一、引言ORACLE 数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。

然而,在数据库运行过程中,可能会遇到各种故障,如数据库崩溃、数据丢失、性能下降等。

本文将介绍一些常见的ORACLE数据库故障解决方案,以匡助管理员快速恢复数据库的正常运行。

二、数据库崩溃的解决方案1. 数据库崩溃可能由于硬件故障、软件错误、人为操作等原因引起。

当数据库崩溃时,管理员应采取以下步骤进行故障排查和修复:a. 检查数据库日志文件,查找崩溃前的异常信息;b. 尝试重启数据库实例,使用备份恢复数据;c. 如果无法恢复数据,可以考虑使用数据库恢复工具进行修复。

2. 数据丢失的解决方案数据丢失可能由于误删除、磁盘损坏等原因导致。

为了防止数据丢失,管理员应采取以下预防措施:a. 定期备份数据库,并将备份文件存储在安全的位置;b. 使用数据库的日志文件功能,可以实现数据的增量备份;c. 配置RAID技术,提高数据库的容错能力。

3. 性能下降的解决方案当数据库性能下降时,可能会导致用户访问延迟、查询速度变慢等问题。

管理员可以采取以下措施来提高数据库性能:a. 优化数据库的查询语句,使用索引、视图等技术来加速查询;b. 增加硬件资源,如CPU、内存等,提升数据库的处理能力;c. 定期清理数据库,删除不必要的数据和索引,减少数据库的负载。

4. 数据库安全的解决方案数据库安全是保护数据库免受未经授权的访问和数据泄露的重要任务。

管理员应采取以下安全措施来保护数据库:a. 设置强密码策略,要求用户使用复杂的密码,并定期更换密码;b. 限制数据库用户的权限,只赋予其必要的访问权限;c. 定期更新数据库软件和补丁,以修复已知的安全漏洞;d. 使用防火墙和入侵检测系统,监控数据库的网络访问。

三、总结本文介绍了ORACLE数据库常见故障的解决方案,包括数据库崩溃、数据丢失、性能下降和数据库安全等方面。

PLSQL异常处理

PLSQL异常处理

PLSQL异常处理As we all known,程序的错误⼀般分为两类:编译错误和运⾏时错误。

其中运⾏时错误被称为异常。

PL/SQL语句块中处理异常的部分即为异常处理部分。

在异常处理部分,可以指定当特定异常发⽣时所采取的动作。

PL/SQL有两种类型的异常:内置异常和⽤户⾃定义异常。

其中,内置异常⼜分为预定义异常和⾮预定义异常。

⼀、内置异常⾸先试举⼀例来抛砖引⽟。

DECLAREv_ename varchar2(10);v_empno number(4) := &v_empno;BEGINSELECT enameINTO v_enameFROM EMPWHERE empno = v_empno;DBMS_OUTPUT.PUT_LINE('Employee name is '||v_ename);END;该语句块通过输⼊员⼯的编号来得出员⼯的姓名。

当输⼊的员⼯编号存在时,输出员⼯姓名,当员⼯编号不存在时,会有运⾏错误。

如下所⽰:SQL>/Enter value for v_empno: 7788Employee name is SCOTT -->> 输⼊的员⼯编号存在,输出员⼯姓名PL/SQL procedure successfully completed.SQL>/Enter value for v_empno: 1234DECLARE*ERROR at line 1:ORA-01403: no data found -->> 输⼊的员⼯编号不存在,报运⾏时错误ORA-06512: at line 5由此可见,编译器⽆法检测运⾏错误。

为在程序中处理这种类型的错误,必须添加异常处理部分。

异常处理部分的语法结构如下:EXCEPTIONWHEN EXCEPTION_NAME THENERROR-PROCESSING STATEMENTS;在语句块中,异常处理部分位于可执⾏部分之后,上例可修改如下:DECLAREv_ename varchar2(10);v_empno number(4) := &v_empno;BEGINSELECT enameINTO v_enameFROM EMPWHERE empno = v_empno;DBMS_OUTPUT.PUT_LINE('Employee name is '||v_ename);EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('There is no such employee');END;使⽤异常处理部分,可以使得程序能够正常结束,⽽不是⾮正常终⽌。

oracle tns listener remote poisoning 问题处理方法

oracle tns listener remote poisoning 问题处理方法

oracle tns listener remote poisoning 问题处理方法摘要:1.问题背景及影响2.诊断方法3.处理方法4.预防措施5.总结正文:近年来,Oracle TNS Listener远程溢出问题(也称为远程污染)在企业级数据库中愈发常见。

该问题可能导致数据泄露、系统性能下降乃至业务中断,给企业带来巨大的安全风险。

本文将详细介绍如何诊断、处理和预防Oracle TNS Listener远程溢出问题。

1.问题背景及影响Oracle TNS Listener远程溢出问题的产生主要是由于攻击者利用了Oracle数据库中的漏洞,通过发送恶意构造的数据包,使Listener进程在内存中不断复制自身,最终导致系统资源耗尽。

受到此问题影响的系统表现包括:- 系统性能急剧下降- 数据库连接失败- 无法正常执行SQL语句- 系统崩溃2.诊断方法诊断Oracle TNS Listener远程溢出问题,可以从以下几个方面入手:- 检查系统日志:分析系统日志中与TNS Listener相关的异常信息,如连接失败、内存泄漏等。

- 监控系统资源:观察系统内存、CPU、磁盘IO等资源使用情况,发现异常高峰。

- 分析网络流量:通过网络监控工具,检测是否存在异常流量,如大量重复的TCP连接请求。

- 验证Oracle数据库漏洞:对照已知的漏洞列表,检查是否存在可被攻击者利用的漏洞。

3.处理方法一旦确认Oracle TNS Listener存在远程溢出问题,可以采取以下措施进行处理:- 紧急修复漏洞:根据Oracle官方发布的修复方案,及时修复已知漏洞。

- 强化安全策略:限制非必要的服务和端口,提高系统安全性。

- 升级TNS Listener配置:调整Listener的资源限制,如内存、连接数等,以减轻系统压力。

- 重启数据库服务:在确认修复方案后,重启数据库服务,恢复正常运行。

4.预防措施为避免Oracle TNS Listener远程溢出问题的再次发生,建议采取以下预防措施:- 定期更新Oracle数据库版本:跟进Oracle官方发布的补丁,及时修复新发现的漏洞。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

①异常的分类:
(1)系统自身定义的异常,比如说:除零、没有找到数据等。

(2)用户自定的异常:比如说:在规定的时间内不准修改数据;一些业务规则,比如说:工资不能低于600元,如果在输入员工信息时,输入的工资低于600,那么是不能保存数据的。

这个可以通过抛出异常的方式,也可以采用设置字段,强制使用:CHECK的方式。

(异常号的范围是:-20999~-20000)
(3)未知的异常。

在oracle中规定未知的异常指的是没有捕获的异常。

就是说:只要这个异常处理了,那么就不会是未知的异常。

②异常的定义:
CREATE OR REPLACE PACKAGE errpkg
IS
bulk_errors EXCEPTION;--定义异常
PRAGMA EXCEPTION_INIT (bulk_errors, -20381);--给该异常制定对应的数字代码。

注:EXCEPTION_INIT指定的异常名称必须存在,如果不存在,那么会报错。

END errpkg;
/
③异常的产生:
(1)当oracle执行SQL语句过程中产生错误时,产生异常。

(2)用户执行操作时,不满足规定的义务规则时,产生异常.
(3)用户在编写oracle存储过程或者函数\触发器等实用raise_application_error强制抛出异常.
④抛出异常的方法:
(1)Raise 用户自定义的异常;
在存储过程,函数,触发器等变量定义时,定义异常名称,并指定异常SQLCode,然后在实现中抛出该异常. (2)Raise package.异常异常包内定义的异常;
在存储过程,函数,触发器等实现中引用其他的包内定义的异常(必须是公共的类型).
(3)Raise;
抛出一个任意的异常.
⑤异常的处理流程:
产生异常
第一层产生异常,如果没有处理,那么抛给第二层,指导调用该存储过程的平台,比如: 应用程序.如果应用程序也没有处理,那么就产生了未知的异常.
⑥建议:
1)用户自定义的异常都应该在一个包体内部.
2)用户自定义的异常所对应的SQLCODE和SQLPrama,最好建立一个表,用来维护异常信息
3)在编写存储过程时,最好有When Others处理前面未处理的异常,但是同时又需要记录该异常,同时再把异常抛给最终的应用程序,这种处理方式可能会给客户带来反感,但是只要出现异常,就可以彻底的解决该问题.记录异常时,需要记录: SQLCODE,SQLPARAM,Machine IP,UserName,SysDate等.
⑦用例:
Create or replace procedure Test_Name(input_A number )
IS
bulk_errors EXCEPTION;--定义异常
PRAGMA EXCEPTION_INIT (bulk_errors, -20381);--给该异常制定对应的数字代码。

BEGIN
If (input_A>0) then
Raise bulk_errors;
End if;
Exception
When bulk_errors then
Dbms_output.put_line('产生了错误!');
When Others then
--'记录该错误信息'
NULL;
END;
该存储过程中,没有在其他的包体处理错误信息异常信息,同时没有存储该信息.具体得如何操作,可以参考:<oracle PL SQL programming>.并且提供完成的例子.。

相关文档
最新文档