oracle 异常处理总结
- 格式:wps
- 大小:17.50 KB
- 文档页数:2
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存储过程异常处理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数据库异常处理步骤如下:
1. 定位异常:首先确定出现异常的具体位置,可以通过数据库日志、错误消息和异常堆栈跟踪等方式来定位。
2. 分析异常:对异常进行详细分析,了解异常的原因和影响。
3. 恢复数据库:根据异常的严重程度决定是否需要恢复数据库。
如果是较小的异常,可以进行手动或自动恢复;如果是较严重的异常,可能需要进行数据库的备份和恢复操作。
4. 修复异常:根据异常的具体情况,进行相应的修复操作。
这可能包括删除无效的数据、重建索引、修复损坏的表结构等。
5. 进行测试:在修复异常之后,进行必要的测试,确保数据库的正常运行。
可以执行一些SQL查询、事务处理和性能测试等,以验证修复操作的有效性。
6. 监控和预防措施:定期监控数据库的运行情况,及时发现异常并采取相应的措施。
同时,采取一些预防措施,如定期备份数据库、设置合适的权限和访问控制、优化SQL查询等,以
减少数据库异常的发生。
ORACLE 数据库故障解决方案一、引言ORACLE 数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。
然而,在数据库运行过程中,可能会遇到各种故障,如数据库崩溃、数据丢失、性能下降等。
本文将介绍一些常见的ORACLE数据库故障解决方案,以匡助管理员快速恢复数据库的正常运行。
二、数据库崩溃的解决方案1. 数据库崩溃可能由于硬件故障、软件错误、人为操作等原因引起。
当数据库崩溃时,管理员应采取以下步骤进行故障排查和修复:a. 检查数据库日志文件,查找崩溃前的异常信息;b. 尝试重启数据库实例,使用备份恢复数据;c. 如果无法恢复数据,可以考虑使用数据库恢复工具进行修复。
2. 数据丢失的解决方案数据丢失可能由于误删除、磁盘损坏等原因导致。
为了防止数据丢失,管理员应采取以下预防措施:a. 定期备份数据库,并将备份文件存储在安全的位置;b. 使用数据库的日志文件功能,可以实现数据的增量备份;c. 配置RAID技术,提高数据库的容错能力。
3. 性能下降的解决方案当数据库性能下降时,可能会导致用户访问延迟、查询速度变慢等问题。
管理员可以采取以下措施来提高数据库性能:a. 优化数据库的查询语句,使用索引、视图等技术来加速查询;b. 增加硬件资源,如CPU、内存等,提升数据库的处理能力;c. 定期清理数据库,删除不必要的数据和索引,减少数据库的负载。
4. 数据库安全的解决方案数据库安全是保护数据库免受未经授权的访问和数据泄露的重要任务。
管理员应采取以下安全措施来保护数据库:a. 设置强密码策略,要求用户使用复杂的密码,并定期更换密码;b. 限制数据库用户的权限,只赋予其必要的访问权限;c. 定期更新数据库软件和补丁,以修复已知的安全漏洞;d. 使用防火墙和入侵检测系统,监控数据库的网络访问。
三、总结本文介绍了ORACLE数据库常见故障的解决方案,包括数据库崩溃、数据丢失、性能下降和数据库安全等方面。
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 问题处理方法摘要: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官方发布的补丁,及时修复新发现的漏洞。
一、一个实例Commit;create or replace procedure PROC_SUNHONGBO_MONCHNL(tim varchar2) istimest varchar(8); timday varchar(33); sqlsql varchar(6666); no_result EXCEPTION; begin Commit; select to_char(sysdate,'yyyymmddHH24miss') tima into timday from dual;selectto_char(add_months(sysdate,-1),'yyyymm') mon into timest from dual;dual; into timest from select tim monexecute immediate 'delete report.wo_sunhongbo_chnl where mon = '||tim;Commit;**********/如果有就抛出异常后继续执行、/*1添加所需要的列real_charge + time ,BEGINvarchar2(66)';real_charge'||tim||' add immediate 'alter table execute shiyw11.t_my EXCEPTION WHEN no_result THENDBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');WHEN OTHERS THEN'||tim);!已经存在该列1:你的数据更新语句DBMS_OUTPUT.PUT_LINE('END; execute immediate 'update shiyw11.t_my set real_charge'||tim||' = null'; Commit; Commit; dbms_output.put_line('timest:'||timest||';tim:'||tim||';timest:'||sqlsql); Commit; end PROC_SUNHONGBO_MONCHNL; / Commit;主要内容如下:1.1 异常处理概念1.1.1 预定义的异常处理1.1.2 非预定义的异常处理1.1.3 用户自定义的异常处理1.1.4 用户定义的异常处理异常错误传播1.21.2.1 在执行部分引发异常错误1.2.2 在声明部分引发异常错误1.3 异常错误处理编程1.4 在PL/SQL 中使用SQLCODE, SQLERRM异常处理函数即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件。
Oracle 预定义的异常处理当PL/SQL程序违反了Oracle的规定或超出了系统规定的限制时,就会隐含地引发一个预定义异常错误。
如前面已经提到过的异常ZERO_DIVIDE就是系统预定义的,Oracle PL/SQL自身能发现和引发的异常较少。
表6-2列出了这些异常的详细信息。
表6-2 系统定义的异常系统定义异常说明access_into_null 企图为某个未初始化对象的属性赋值case_not_found 在CASE语句中若未包含相应的WHEN 子句,并且没有设置ELSE 子句collection_is_null 集合元素未初始化cursor_already_open 企图打开一个已经打开的游标。
游标在重新打开之前,必须关闭dup_val_on_index 企图在一个惟一性索引的列中存储冗余值invalid_cursor 执行一个非法的游标操作,例如关闭一个未打开的游标invalid_number 企图将一个字符串转换成一个无效的数字login_denied 企图使用无效的用户名和密码连接数据库no_data_found SELECT INTO语句没有返回数据,或者企图访问嵌套表中已经被删除的元素或未初始化的元素not_logged_on 企图在没有连接数据库的情况下访问数据库中的内容program_error PL/SQL 内部问题,可能需要重装数据字典和PL./SQL 系统包rowtype_mismatch 主游标变量与PL/SQL 游标变量的返回类型不兼容self_is_null 使用对象类型时,在null 对象上调用对象方法storage_error PL/SQL程序使用完了内存,或内存遭到了破坏subscript_beyond_count 元素下标超过嵌套表或V ARRAY 的最大值subscript_outside_limit 企图使用非法索引号引用嵌套表或V ARRAY中的元素sys_invalid_rowid 字符串向ROWID转换时的错误,因为该字符串不是一个有效的ROWID值timeout_on_resource Oracle 在等待资源时超时too_many_rows 执行select into 语句时,结果集超过一行value_error 赋值时,变量长度不足以容纳实际数据zero_divide 除数为0对于系统预定异常,用户无需在程序中定义,它们将由Oracle自动引发。
一、Oracle存储过程exception异常处理大全及实例经典最终Commit;create or replace procedure PROC_SUNHONGBO_MONCHNL(tim varchar2) istimest varchar(8);timday varchar(33);sqlsql varchar(6666);no_result EXCEPTION;beginCommit;select to_char(sysdate,'yyyymmddHH24miss') tima into timday from dual;select to_char(add_months(sysdate,-1),'yyyymm') mon into timest from dual;select tim mon into timest from dual;execute immediate 'delete report.wo_sunhongbo_chnl where mon = '||tim;Commit;/*1、添加所需要的列real_charge + time ,假如有就抛出特殊后继续执行**********/ BEGINexecute immediate 'alter table shiyw11.t_my add real_charge'||tim||' varchar2(66)'; EXCEPTIONWHEN no_result THENDBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('你的数据更新语句!已经存在该列1:'||tim);END;execute immediate 'update shiyw11.t_my set real_charge'||tim||' = null';Commit;Commit;dbms_output.put_line('timest:'||timest||';tim:'||tim||';timest:'||sqlsql);Commit;end PROC_SUNHONGBO_MONCHNL;/Commit;要紧内容如下:1.1 特殊处理概念1.1.1 预定义的特殊处理1.1.2 非预定义的特殊处理1.1.3 用户自定义的特殊处理1.1.4 用户定义的特殊处理1.2 特殊错误传播1.2.1 在执行部分引发特殊错误1.2.2 在声明部分引发特殊错误1.3 特殊错误处理编程1.4 在PL/SQL 中使用SQLCODE, SQLERRM特殊处理函数即使是写得最好的PL/SQL程序也会遇到错误或者未预料到的事件。
oracle的no_data_found用法1. 引言1.1 概述Oracle是一种常用的关系数据库管理系统,广泛应用于各种企业级和大型应用程序中。
在Oracle中,异常处理是必不可少的一部分,它可以帮助我们检测和处理运行时错误。
其中,no_data_found异常是在查询语句执行时未找到任何数据所引发的异常。
1.2 文章结构本文将围绕着Oracle的no_data_found异常展开讨论,并提供相关使用方法和示例。
首先介绍no_data_found的基本概念和使用场景,并提供一些示例代码来演示其用法。
接着讨论如何正确处理no_data_found异常,包括使用异常处理块捕获异常和使用存储过程进行异常处理的方法。
此外,我们还将与其他Oracle异常如too_many_rows进行比较分析,并给出正确区分和处理这两种异常情况的建议。
最后,在结论部分总结no_data_found用法的重要性和灵活性,并强调合理使用no_data_found异常处理方式的必要性和技巧性。
1.3 目的本文旨在帮助读者深入了解Oracle的no_data_found异常及其在实际应用中的作用。
通过详细讲解其用法、示例以及与其他相关异常的对比分析,读者将能够正确地使用和处理no_data_found异常,提高代码的稳定性和可靠性。
同时,本文也强调合理使用no_data_found异常处理方式的必要性和技巧性,以避免潜在的问题和错误处理不当所带来的影响。
2. Oracle的no_data_found用法:2.1 基本介绍:Oracle数据库中的no_data_found异常是一种常见的异常类型,表示在执行SQL查询时没有找到任何数据。
当查询结果为空时,Oracle会抛出这个异常。
对于处理这种情况,需要了解如何正确使用no_data_found以及它适用的场景。
2.2 使用场景:在开发过程中,我们经常会遇到需要执行SQL查询并判断查询结果是否为空的情况。
千里之行,始于足下。
oracle日常运维总结以下是Oracle日常运维总结的一些要点:1. 定期备份数据:重要性不言而喻,确保数据安全。
可以使用Oracle的备份工具或者第三方工具进行备份,定期检查备份的完整性和可用性。
2. 监控数据库性能:使用Oracle的性能监控工具,如AWR报告、ASH报告等,分析数据库性能瓶颈,并及时采取措施进行优化。
3. 维护数据库统计信息:定期收集和更新数据库的统计信息,以便优化查询性能。
可以使用Oracle的DBMS_STATS包来进行统计信息的收集和更新。
4. 定期检查表空间使用情况:监控数据库的表空间使用情况,及时扩展表空间或调整表空间大小,以确保数据库的正常运行。
5. 定期检查数据库日志和告警日志:定期检查数据库的日志文件和告警日志,及时处理数据库异常或错误。
6. 定期进行数据库滚动备份:数据库滚动备份可以保证数据库的连续备份,避免因备份过程中的数据变更造成备份不完整。
7. 定期进行数据库性能调优:定期进行数据库性能调优,如优化SQL语句、调整数据库参数等,以提高数据库的运行效率和性能。
8. 定期进行数据库安全审计:定期审计数据库的安全性,检查数据库的用户权限、网络安全等,并及时修复和加固数据库的安全漏洞。
第1页/共2页锲而不舍,金石可镂。
9. 定期进行数据库版本升级和补丁安装:定期检查Oracle官方网站,了解最新的数据库版本和补丁,并根据需要进行升级和安装,以保证数据库的安全和稳定。
10. 定期进行数据库容量规划:根据业务需求和数据增长情况,定期进行数据库容量规划,以确保数据库能够满足业务的需求并保持良好的性能。
以上是Oracle日常运维总结的一些要点,根据实际情况进行调整和补充。
SQL连接ORACLE异常解决方案Oracle数据库是一款常用的关系型数据库管理系统,广泛应用于企业级应用开发中。
在使用SQL连接Oracle过程中,常常会遇到一些异常情况,如无法连接数据库、连接超时等问题。
本篇文章将就SQL连接Oracle异常进行详细的解决方案介绍。
1.无法连接到数据库当SQL无法连接到Oracle数据库时,首先要检查以下几个方面:- 网络连接是否正常:确认网络连接是否正常,尝试ping数据库服务器的IP地址,检查是否可以正常访问。
- Oracle数据库是否启动:确认Oracle数据库是否已经启动,可以使用命令`lsnrctl status`来查看监听器的状态,如果监听器没有启动,可以使用`lsnrctl start`启动监听器。
- TNS配置是否正确:确认TNS配置文件(一般为tnsnames.ora)中数据库实例的配置是否正确,如数据库地址、端口等。
- 防火墙是否阻止访问:检查防火墙设置,确保Oracle数据库端口没有被阻止。
2.连接超时在连接数据库时,可能出现连接超时的情况。
解决连接超时的方法有以下几种:-调整网络延迟设置:如果是由于网络延迟问题导致的连接超时,可以尝试调整操作系统的网络延迟设置,或者调整网络路由器的参数,以降低网络延迟。
- 检查数据库是否正常响应:连接超时可能是由于Oracle数据库响应速度过慢导致的,可以使用命令`sqlplus / as sysdba`连接数据库,检查数据库的健康状态。
3.连接断开在使用SQL连接Oracle时,可能会遇到连接断开的情况,无法执行任何SQL语句。
为了解决连接断开的问题,可以采取以下措施:-检查数据库连接池配置:如果使用数据库连接池连接数据库,可以检查连接池的配置参数,例如最大连接数、空闲连接时间等,调整相关参数。
- 检查数据库日志:连接断开可能是由于数据库内部发生错误导致的,可以查看数据库日志(alert.log),确认数据库是否有相关报错信息。
oracle存储过程中的异常处理一、异常类型1. 内置异常:Oracle数据库中提供了一些内置的异常类型,如NO_DATA_FOUND、TOO_MANY_ROWS等。
这些异常类型在处理过程中可以直接使用,无需自定义。
2.用户自定义异常:除了使用内置异常类型外,我们还可以自定义异常类型,以便更好地适应业务需求。
自定义异常类型可以通过CREATEORREPLACETYPE语句创建。
二、异常处理语法在Oracle存储过程中,可以使用以下语法来处理异常:BEGIN--可能发生异常的代码EXCEPTIONWHEN exception1 THEN--处理异常的代码WHEN exception2 THEN--处理异常的代码...WHEN others THEN--处理其他异常的代码END;在上述语法中,可以根据需要处理一个或多个异常,使用WHEN关键字加上异常类型来指定异常处理的代码块。
当发生异常时,会按照顺序依次匹配异常类型,找到匹配的异常类型后执行相应的异常处理代码块。
如果没有匹配的异常类型,则会执行WHEN others THEN的异常处理代码块。
三、异常处理示例1.创建一个存储过程,该存储过程接收一个员工ID作为参数,并查询该员工的信息。
CREATE OR REPLACE PROCEDURE get_employee_info(p_employee_id NUMBER) ASv_employee_name VARCHAR2(100);BEGINSELECT employee_name INTO v_employee_nameFROM employeesWHERE employee_id = p_employee_id;DBMS_OUTPUT.PUT_LINE('Employee Name: ' , v_employee_name);EXCEPTIONWHENNO_DATA_FOUNDTHENDBMS_OUTPUT.PUT_LINE('Employee not found.');WHENOTHERSTHENDBMS_OUTPUT.PUT_LINE('An error occurred.');END;2.调用存储过程并传入一个有效的员工ID。
Oracle ORA-12516 错误解析(2007-05-09 17:20:51)转载分类:Oracle数据库五一期间,负责的内蒙项目的数据库连接的时候突然出现“ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程”的异常,很是郁闷!!可看看Tomcat还在正常连接着,可PL/SQL怎么着就登录不了,报这个异常,一时之间把我吓坏了,还以为数据库又出现什么问题了!!于是就赶紧去网上查查。
得到了一系列的答案,其中下面这个我还是比较认可的。
ORA-12516:TNS:监听程序无法找到匹配的信息栈的可用句柄错误ORA-12520:解决方法:查了一下,原来是以前设置共享服务器时SESSION设了170,PROCESSES设了150,共享服务器时就肯定够用,专用服务器就不行了,后来改为SESSION设555,PROCESSES设500。
重启数据库,正常了。
然后又马上再查了,PROCESSES已经达到140了,奇怪,不可能有这么多人,再查SESSION发现只有30多,想了一下,哦!原来是共享服务器SHARED_SERVER设了100,就将它改成了10。
解决方法:加大PROCESSES后来,我把数据库给停了,但并没有按照上面的说法去增加PROCESSES,重新启动之后,连接就正常了,个人认为是访问量达到了设置的最大限,不过上面的解决方法是可以解决的,并且也比较彻底。
如果大家以后再遇到这种问题,可以尝试着把PROCESSES放大来解决这个问题!!ORA-12516错误的处理分类:数据库Oracle技术2007-06-08 11:47 5734人阅读评论(1) 收藏举报解决过程:1、查看当前会话数、processes和sessions值,发现session数和2个参数的值已经非常逼近SQL*Plus: Release 10.2.0.1.0- Production on星期一 10月915:50:21 2006Copyright (c) 1982, 2005, Oracle. All rights reserv ed.SQL> conn /as sysdba已连接。
Oracle是世界上领先的企业级数据库管理系统,被广泛应用于企业的信息管理和数据处理中。
其中,Oracle-00031错误是一个常见的数据库错误,本文将深入探讨Oracle-00031错误的产生原理及解决方法。
一、Oracle-00031错误的产生原因1.1 表空间不足Oracle数据库中的表空间是用来存储表和索引数据的逻辑结构,如果表空间不足,数据库就无法正常存储数据,从而导致Oracle-00031错误的产生。
1.2 数据库连接失败当数据库连接失败时,用户无法正常访问数据库中的数据,这也可能导致Oracle-00031错误的出现。
1.3 数据文件损坏数据文件是Oracle数据库中用来存储实际数据的物理文件,如果数据文件损坏或丢失,数据库将无法正常读取数据,从而引发Oracle-00031错误。
1.4 日志文件满数据库的日志文件用来记录数据库的操作日志,当日志文件满时,数据库就无法继续记录新的操作日志,从而导致Oracle-00031错误的产生。
二、解决Oracle-00031错误的方法2.1 扩充表空间当出现表空间不足的情况时,可以通过扩充表空间的方式解决这一问题。
可以通过 ALTER TABLESPACE 命令来扩充表空间的大小,使其能够满足数据库存储数据的需求。
2.2 修复数据文件如果数据文件损坏或丢失,可以通过使用 RMAN 或者恢复数据库备份文件的方式来修复数据文件,保障数据库的正常运行。
2.3 清理日志文件当日志文件满时,可以通过定期清理日志文件的方式来避免日志文件满的情况发生。
可以通过设置自动日志文件清理策略,定期清理过期日志文件,保证数据库的正常运行。
2.4 重新连接数据库当数据库连接失败时,可以尝试重新连接数据库,或者检查网络连接,确保数据库可以正常访问。
三、结论通过以上分析可以看出,Oracle-00031错误通常是由于表空间不足、数据库连接失败、数据文件损坏、日志文件满等原因引起的。
技术心得一、SQL查询:1、”列出同部门中工资高于1000的员工数量超过2人的部门,显示部门名字、地区名称”.查询语句如下:selectdistinct dept.department_name,loc.cityfrom employeesemp,departmentsdept,locationslocwhere emp.department_id=dept.department_idandfromwhereand)子,fromwhereandandhavingcount(*)>2对于groupby来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论groupbydepartment_id还是groupbydepartment_name,loc.city达到的效果是一样的2、用一条语句查询出scott.emp表中每个部门工资前三位的数据:selectdepartment_id,max(salary)max_salary,max(decode(rank,2,salary,salary))mid_s alary,min(salary)min_salaryfrom(selectdepartment_id,salary,rankfrom(selectemp.department_id,emp.employee_id,emp.salary,row_number()over(partitionby emp.department_idorderbyemp.salary)asrankfromemployeesemp)EwhereE.rank<=3)groupbydepartment_idSQL%ISOPEN FALSE FALSE FALSE FALSESQL%FOUND TRUE有结果成功成功-20,999之间的参数.可在程序块中自定义异常,并捕捉在其他函数或存储过程中RAISE_APPLICATION_ERROR抛出的异常,与Oracle交互.4、PRAGMAAUTONOMOUS_TRANSACTIONORACLE8i可以支持事务处理中的事务处理的概念.这种子事务处理可以完成它自己的工作,独(2)不使用自动事务处理:CREATEORREPLACEPROCEDURE log_message(p_message varchar2)ASBEGININSERTINTO logtable VALUES(user,sysdate,p_message);COMMIT;END log_message;(select*fromtemp_table查询结果有数据)流程:1、以2、3、4、实例:1为’GL’)件:and'yyy y-mm-ddHH24:MI:SS'))and(to_date(p_End_Date,'yyyy-mm-ddHH24:MI:SS'));!!!注意’HH24:MI:SS’必不可少,因为请求程序要求的数据一定是带时分秒的数据否则解析报表时会报错.如下所示:**Starts**23-08-201111:53:42**Ends**23-08-201111:53:42ORA-01830:日期格式图片在转换整个输入字符串之前结束2、根据借方数量与借方金额求出借方单价同理求贷方单价,每发生一笔,统计当前数量与当前金额,然后得出当前数量当前总价与当前单价其中借方与贷方金额的获取,如:select(case cila.inv_typewhen'IN'then(case cila.type_codewhen'GL'thenACCOUNTED_DRwhen'AP'thenAP_ACCOUNTEDend)end3四、1即是多OUview_all_orgnization_flagFROMper_security_profilesWHEREsecurity_profile_id=to_number(fnd_profile.value(‘XLA_MO_SECURITY_PROFILE_LEVEL’));可以通过以下语句获取当前安全性配置文件和当前用户在当前职责下可访问的OU nazation_id,organization_id,nameFROMper_orgnazation_listper,Hr_operating_unitshrWHEREper.secutity_profile_id=to_number(fnd_profile.VALUE(‘XLA_MO_SECURITY_PROFILE_LEVEL’))nization_id=nization_idable_flagisnull;如我在CUX_INV_MATERIAL_ALL表中建立的Org_Id字段,可在策略函数中通过此字段产生Where 子句,筛选可操作客户化职责下物料维护菜单的OU.当用户进入YD_GL_ALL_总账超级用户职责时将初始化用户的上下文,通过MO_GLOBAL的一系列方法设置CONTEXT的值(包括访问模式和当前Org_Id)。
ORACLE异常处理剖析
林秀丽;邹贵红;卢道设
【期刊名称】《电脑知识与技术》
【年(卷),期】2018(014)010
【摘要】编程领域无论是高手还是新手,程序编写过程中或业务逻辑处理中,遇到难以周全考虑的错误是很正常的,所以任何一个优秀程序都应该带有对异常的捕获、提示、处理并恢复的功能.目的提高程序的健壮性.该文以ORACLE数据库为例,对异常处理进行剖析.
【总页数】3页(P3-5)
【作者】林秀丽;邹贵红;卢道设
【作者单位】广州华夏职业学院,广东广州510935;广州华夏职业学院,广东广州510935;广州华夏职业学院,广东广州510935
【正文语种】中文
【中图分类】TP311
【相关文献】
1.浅谈Oracle数据库中异常处理的教学设计 [J], 徐秀勤
2.Java异常处理机制的案例剖析 [J], 刘烨
3.剖析异常处理在高级语言中的实现 [J], 宋奎;冉春玉;荆晶;张秋生
4.Oracle 9i启动异常处理 [J], 王一军
5.基于JAVA常见异常处理剖析 [J], 肖坤峨
因版权原因,仅展示原文概要,查看原文内容请购买。
①异常的分类:
(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>.并且提供完成的例子.。