当前位置:首页 » 编程语言 » 统一异常处理sql
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

统一异常处理sql

发布时间: 2023-02-09 05:54:21

A. 系统的一个异常sql的处理

下面是在awr报告里面看到的有问题的sql,是9个变量的,在应用前台属于关联查询,在sqlplus里面手工执行检查实际执行情况如下:

下面是查询到的绑定变量值,可以通过查看v$sql_bind_capture视图来查看变量的实际值,如果时间比较久,可以使用如下的语句查看历史的绑定变量信息

以下是开启了autotrace 选项跟踪的手工执行情况,从执行效率上看是没有问题的。

从执行计划和表的数据量等方面判断如果sql的开销有问题,应该出现在表SAMS_CHECKINOUT上面,下面检查该表上面索引的创建语句看是否有问题

下面是在awr报告里面看到的有问题的sql,是9个变量的,在应用前台属于关联查询,在sqlplus里面手工执行检查实际执行情况如下:

下面是查询到的绑定变量值,可以通过查看v$sql_bind_capture视图来查看变量的实际值,如果时间比较久,可以使用如下的语句查看历史的绑定变量信息

以下是开启了autotrace 选项跟踪的手工执行情况,从执行效率上看是没有问题的。

从执行计划和表的数据量等方面判断如果sql的开销有问题,应该出现在表SAMS_CHECKINOUT上面,下面检查该表上面索引的创建语句看是否有问题

从上图可以看到,实际测试出来的执行计划跟awr报告上不同。

现在要对sql做测试

我们通过/*+ gather_plan_statistics */ 收集的相关执行计划及其统计信息与该SQL的AWR报告中的执行计划不同,且逻辑读的数量与AWR报告中的数值也相差巨大。因此,为了更准确的判断问题,按以下方法测试。
1、SQL在生产库(SAMS库的实例 1上,实例名为sams1 )上,在SQLPLUS中执行。
2、执行后,在同一SQLPLUS窗口中,立即执行以下命令:

结果如下:

1、在目录下创建一个脚本文件,用来获取更加相信的信息。
2、在SQLPLUS中,执行以下命令:@sql_rpt 3271368959 1 24114 24115 99vaabs5ptktb
4、执行完成后,在该目录下生成一个HTML文档,拿到更加详细的sql统计信息附带表的数据信息

初步分析如下:
1、该SQL执行一次的逻辑读为11130块次,其中第37步的逻辑读为6127块次,占了一半还多。而该步的操作是根据前面的获取到的ROWID,回表SAMS_CHECKINOUT获取"SC".“CHECKTIME"[TIMESTAMP,11], "SC"."VERIFYCODE"[CHARACTER,4], "SC"."SN"[NVARCHAR2,40], "SC"."INSYSTIME"[TIMESTAMP,11]四列的内容。
2、第38步对SAMS_ICLOCK表的全表扫描,对整个SQL的逻辑读也有较大贡献。但这个不是问题的关键

另外索引上有两个想法:
1、新建组合索引或改造已有索引,按如下顺序构建组合索引:
(BADGENUMBER, CHECKTIME, SN, VERIFYCODE, INSYSTIME)
2、在表SAMS_ICLOCK上创建组合索引,列名及顺序如下:
(SN, ALIAS)

这两个索引先暂时不创建,先从其他方面入手
由于在测试过程中,其生成的执行计划从未与AWR中显示的执行计划一致过。所以,这也许是造成不能模拟出2亿个块次逻辑读的一个原因。因此,把有问题的SQL的执行计划绑定到的测试SQL上。然后执行该测试SQL,并观察和分析测试SQL的执行过程和结果来做出进一步的处理。
为完成上述想法,需要用到ORACLE的SQL PROFILE在不改变SQL文本的前提下,改变其执行计划。操作方法如下:
1、在SQLPLUS中,生成问题SQL的创建SQL PROFILE的脚本。该脚本执行后,会要求分别输入SQL_ID和PLAN_HASH_VALUE的值。而我们问题SQL的SQL_ID是99vaabs5ptktb,PLAN_HASH_VALUE的值是4243346097。脚本执行完成后,会在运行SQLPLUS的当前目录中生成一个脚本文件。其名称在执行脚本过程中的结尾有显示。为描述方便,简称该生成的S脚本文件为“问题SQL脚本”。
2、再次执行该脚本,只不过这次输入测试SQL的SQL_ID和PLAN_HASH_VALUE。其SQL_ID为3kys9xsdjrm3b,PLAN_HASH_VALUE的值为561269195。为描述方便,简称该生成的脚本文件为“测试SQL脚本”
3、在文本编辑工具中分别打开上述两个脚本,将问题SQL脚本中出现在以下特征文字之间的文字(不包含特征文字 )复制并覆盖掉测试SQL脚本中同样位置的原文字:
h := SYS.SQLPROF_ATTR(
………
……….
……….
:signature := DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE(sql_txt);
4、将测试SQL脚本另存为一个文件(后缀名为.sql)
5、在SQLPLUS中执行第4步另存后的脚本。
6、在SQLPLUS中原封不动的执行原测试SQL。(注:执行前设置SQLPLUS格式,以避免格式混乱。比如 set lines 200 set pagesize 100 )
7、执行 select * from table(dbms_xplan.display_cursor('','','allstats projection last'));

如果正常生成脚本,没有报错信息出现在屏幕上,就是生成脚本成功。比如出现下面的提示就是正常的:

B. sql server异常怎么处理

你可以看一下异常谢谢,然后根据异常信息进行处理。
你可以在这里贴出一场信息,这样比较容易得到答案。
异常信息一般在操作sql时弹出
在系统日志里面也可以查看

C. java sql 异常处理

能把你的全部程序弄来看看不?
getInt()和getString(),记得好像是要参数。数据库字段名
如getString("uname");
不知道你全部程序什么样子。瞎说了下。看能不能帮上忙

D. 数据库PL/SQL异常处理(组图)

在设计PL/SQL程序时 经常会发生这样或那样的错误 异常处理就是针对错误进行处理的程序段 Oracle i中的异常处理分为系统预定义异常处理和自定义异常处理两部分 系统预定义异常处理 系统预定义异常处理是针对PL/SQL程序编译 执行过程中发生的问题进行处理的程序 下列代码为正确代码 在【SQLPlus Worksheet】中能够顺利执行 ―――――――――――――――――――――――――――――――――――――set serveroutput ondeclaretempno integer:= ;begintempno:=tempno+ ;end;―――――――――――――――――――――――――――――――――――――【配套程序位置】 第 章 correctplsql sql 下列代码为错误代码 在【SQLPlus Worksheet】中的执行结果如图 所示 【配套程序位置】 第 章 wrongplsql sql 由于代码有错误 因此将激活系统预定义的异常处理 并得出如下提示信息 Oracle i提供了很多异常处理 读者可以尝试修改可以正常运行的程序 并执行修改后的程序 就可以发现调用了哪些异常处理 下面着重介绍如何自定义异常处理 自定义异常处理 定义异常处理定义异常处理的语法如下 declare异常名 exception; 触发异常处理触发异常处理的语法如下 raise 异常名; 处理异常触发异常处理后 可以定义异常处理部分 语法如下 ExceptionWhen 异常名 then异常处理语句段 ;When 异常名 then异常处理语句段 ; 实例下面的PL/SQL程序包含了完整的异常处理定义 触发 处理的过程 定义名为salaryerror的异常 在scott emp数据表中查找empno= 的记录 将其值放入变量tempsal中 判断tempsal值若不在 和 之间 说明该员工的薪水有问题 将激活异常处理 提示信息 在【SQLPlus Worksheet】中执行下列PL/SQL代码 执行结果如图 所示 【配套程序位置】 第 章 exceptiondefine sql lishixin/Article/program/Oracle/201311/16582

E. sql server 2008数据库提示异常如何处理

如果说还可以创建数据库。只是某个数据库出现可疑,那就是我说的那两个文件被删或者移除追问:
一直在运行的啊!好好的
没删除啊!我用过很多办法都不行啊
我脱离
然后再附加
曾经遇到这样的问题!我试过把mdf拿去其他机,然后成功!我就备份bak回来原来新建
还原
都很顺利!这次就是不行。回答:
是整个服务器质疑还是只是一个数据库?还能建库吗?既然祢有备份那就附加,如果附加不了估计就是服务器问题。建议把sql重新装下。估计就好了
有9个数据库
,各种程序都有!同样的程序的数据库有三个,有两个出问题!
之前出问题的也是同一种程序新装sql的话,我全部停止几个小时,肯定有损失的
而且麻烦!
我不能次次遇见这样的问题就新装sql吧!
我总要找个解决的办法的啊
哪怕出现“可疑”后能够备份bak数据库也好!
我也经常用数据库,也出现过质疑,基本就是我说的那两种情况,我仔细想了下,既然是质疑,我想肯定那两个备份文件服务器默认找不到的缘故,只能是被移除或者更名但是祢又说备份在呢还可以附加。而且祢又有那么多库。不能停!祢给我截个图吧。

F. j2ee统一异常处理,DataAccessException怎么把具体的异常信息(栈),传递到控制器乃至页面显示出来

最简单的办法就是用spring mvc的拦截器了,层抛给service, service抛给controller,在每个controller执行后加上拦截器,如果出错,抓取错误信息,跳转到指定页面。http://exceptioneye.iteye.com/blog/1303842

还有种排错的方法也很常用:记录log,通过log排错

G. C# sql catch (Exception ce) 异常处理

SqlConnection sqlcon = this.getcon();
SqlCommand sqlcom = new SqlCommand(M_str_sqlstr, sqlcon);
SqlDataReader sqlread = null;
try
{
sqlcon.Open();
}
catch (Exception ce)
{
MessageBox.Show("数据库连接失败!" + ce.Message + "\n");
Chemical.DBSet.FrmDBset frm = new Chemical.DBSet.FrmDBset();
frm.Show();
}
finally
{
sqlread = sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
}
return sqlread;

H. sql数据库质疑的原因及解决办法

sql数据库质疑是设置错误造成的,解决方法为:

1、通过DBCC CHECKCB('DBName') 来检测数据库异常的原因,如果可以检测到数据库的异常,其中红色部分即时数据目前存在的问题,我们也在检测结果最后看到数据的总体的错误情况的汇总。