当前位置:首页 » 编程语言 » sql异常处理

sql异常处理

发布时间: 2022-12-10 08:56:27

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

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

Ⅱ SQL2005执行 Transact-SQL 语句或批处理时发生了异常,错误51,怎么处理

是数据库的问题权限问题:
找到.ldf的文件右击“属性”,安全-〉编辑-〉添加-〉高级-〉立即查找,选择Authenticated users,确定,在安全选项卡里选中Authenticated users编辑它的权限,“完全控制”打勾,然后应用确定,另一个数据库文件即.mdf的文件一样,这样就可以了。
P.S:这是在win8系统下的,win7的也一样,xp我就不知道了。。

Ⅲ MySQL异常处理浅析

MySQL的异常处理分析如下:
标准格式
DECLARE
handler_type
HANDLER
FOR
condition_value[,...]
statement
handler_type:
CONTINUE
|
EXIT
|
UNDO
--这个暂时不支持
condition_value:
SQLSTATE
[VALUE]
sqlstate_value
|
condition_name
|
SQLWARNING
|
NOT
FOUND
|
SQLEXCEPTION
|
mysql_error_code
condition_value细节
1、常用MYSQL
ERROR
CODE
列表
http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
更多错误列表见MySQL安装路径下
比如我的/usr/local/mysql/share/mysql/errmsg.txt
说明一下:SQLSTATE
[VALUE]
sqlstate_value这种格式是专门为ANSI
SQL

ODBC以及其他的标准.
并不是所有的MySQL
ERROR
CODE
都映射到SQLSTATE。
2、如果你不想插ERROR
CODE的话,就用速记条件来代替
SQLWARNING
代表所有以01开头的错误代码
NOT
FOUND
代表所有以02开头的错误代码,当然也可以代表一个游标到达数据集的末尾。
SQLEXCEPTION
代表除了SQLWARNING和NOT
FOUND
的所有错误代码
3、我们现在就用手册上的例子
CREATE
TABLE
t
(s1
int,primary
key
(s1));
mysql>
use
t_girl
Database
changed
mysql>
CREATE
TABLE
t
(s1
int,primary
key
(s1));
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
mysql>
mysql>
DELIMITER
||
mysql>
CREATE
PROCEDURE
handlerdemo
()
->
BEGIN
->
DECLARE
EXIT
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
--
遇到重复键值就退出
->
SET
@x
=
1;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
3;
->
END||
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
2
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
1
|
+------+
1
row
in
set
(0.00
sec)
mysql>
现在来看一下遇到错误继续的情况
mysql>
truncate
table
t;
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
->
BEGIN
->
DECLARE
CONTINUE
HANDLER
FOR
SQLSTATE
'23000'
BEGIN
END;
->
SET
@x
=
1;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t
VALUES
(1);
->
SET
@x
=
3;
->
END$$
Query
OK,
0
rows
affected
(0.01
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)
mysql>
可以看到,始终执行到最后。
当然,上面的SQLSTATE
'23000'可以替换为1062
我们来看一下警告。
mysql>
alter
table
t
add
s2
int
not
null;
Query
OK,
0
rows
affected
(0.01
sec)
Records:
0
Duplicates:
0
Warnings:
0
此列没有默认值,插入的时候会出现警告或者1364错误提示。
mysql>
DELIMITER
$$
mysql>
DROP
PROCEDURE
IF
EXISTS
`t_girl`.`handlerdemo`$$
Query
OK,
0
rows
affected,
1
warning
(0.00
sec)
mysql>
CREATE
DEFINER=`root`@`localhost`
PROCEDURE
`handlerdemo`()
->
BEGIN
->
DECLARE
CONTINUE
HANDLER
FOR
1062
BEGIN
END;
->
DECLARE
CONTINUE
HANDLER
FOR
SQLWARNING
->
BEGIN
->
update
t
set
s2
=
2;
->
END;
->
DECLARE
CONTINUE
HANDLER
FOR
1364
->
BEGIN
->
INSERT
INTO
t(s1,s2)
VALUES
(1,3);
->
END;
->
SET
@x
=
1;
->
INSERT
INTO
t(s1)
VALUES
(1);
->
SET
@x
=
2;
->
INSERT
INTO
t(s1)
VALUES
(1);
->
SET
@x
=
3;
->
END$$
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
DELIMITER
;
mysql>
call
handlerdemo();
Query
OK,
0
rows
affected
(0.00
sec)
mysql>
select
*
from
t;
+----+----+
|
s1
|
s2
|
+----+----+
|
1
|
3
|
+----+----+
1
row
in
set
(0.00
sec)
遇到错误的时候插入的新记录。
mysql>
select
@x;
+------+
|
@x
|
+------+
|
3
|
+------+
1
row
in
set
(0.00
sec)

Ⅳ sql函数无法向客服端返回数据

首页 问答 PL/SQL异常处理 - 函数无返回值返回
Q
PL/SQL异常处理 - 函数无返回值返回
oracle plsql exception-handling
2016-08-20 60 views 2 likes
2
在Oracle 12.1中,我有一个相当简单的PL/SQL例程。输出是单个值,可以是逗号分隔的名称列表或字符串“NO_DATA”。没有其他输出允许。对于输入,有一个单一的值,一个公司名称。如果我硬编码公司名称,并从SQL窗口运行SQL语句(不是函数),它运行良好,所以我知道SQL是有效的。这个问题与异常处理有关。如果我没有任何异常处理,并传递一个有效的名称给函数,它会给我一个有效的输出。当我找不到数据时,我需要能够处理这种情况,所以我添加了简单的异常处理。这是我得到我的问题的地方。有了异常处理代码,如果我传入了一个不合适的值(又名公司名称,未找到),我就会像'我应该'那样得到'NO_DATA'。如果我传递了一个很好的值,那么我得到一个PL/SQL错误ORA-06503:PL/SQL:函数返回时没有值。这是我的代码。PL/SQL异常处理 - 函数无返回值返回

Ⅳ 系统的一个异常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'));

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

Ⅵ db2的过程中怎样写异常处理

创建SQL存储过程(CREATEPROCEDURE(SQL)statement)

CREATEPROCEDUREprocere-name(IN|OUT|INOUTparameter-namedata-type,...))---存储过程可以设定输入参数和输出参数
LANGUAGESQL----DB2可以用多种语言编写存储过程,这里用的是纯SQL
BEGIN---开始
DECLAREvIDsmallint;---定义变量和Oracle一样DECLARE变量名变量的数据类型;
FORVASSELECTBRND_CDFROMTMP_BRND_CD---for循环tmp_brnd_cd预先创建好
DO---循环体开始
SETvID=BRND_CD;---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD)intovID
INSERTINTOWWM_FORINSERT_TESTVALUES(vID);---往wwm_forinsert_test插入数据
ENDFOR;-----循环体结束
END@-----存储过程结束

参数语法说明

1、procere-name:存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。

2、(IN|OUT|INOUTparameter-namedata-type,...):传入参数IN:输入参数OUT:输出参数INOUT:作为输入输出参数parameter-name:参数名字,在此存储过程中唯一的标识符。data-type:参数类型,可以接收SQL类型和创建的表。不支持LONGVARCHAR,LONGVARGRAPHIC,DATALINK,REFERENCE和用户自定义类型。

3、SPECIFICspecific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。

4、DYNAMICRESULTSETSinteger:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。

5、CONTAINSSQL,READSSQLDATA,MODIFIESSQLDATA:指定存储过程中的SQL访问级别CONTAINSSQL:表示存储过程可以执行中,既不可读取SQL数据,也不可修改SQL数据。READSSQLDATA:表示存储过程可以执行中,可读取SQL,但不可修改SQL数据。MODIFIESSQLDATA:表示存储过程可以执行任何SQL语句。可以对数据库中的数据进行增加、删除和修改。

6、:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。

7、CALLEDONNULLINPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。

8、INHERITSPECIALREGISTERS:表示继承专用寄存器。

9、:建立存储点。OLDSAVEPOINTLEVEL是默认的存储点。

10、LANGUAGESQL:指定程序的主体用的是SQL语言。

11、:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是EXTERNALACTION。如果指定为NOEXTERNALACTION,则数据库会确定最最佳优化方案。

12、PARAMETERCCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETERCCSIDUNICODE,其他的数据库默认为PARAMETERCCSID3ASCII。

13、SQL-procere-body:存储过程的主体

Ⅶ 石化通sql错误

网络的问题。sql错误多数是网络连接异常导致。
1、首先打开电脑检查网络。
2、其次打开石化通sql进行测试网络连接是否异常。
3、最后点击重新连接网络后重新登录该软件即可。

Ⅷ SQL语句执行异常

http://www.cnblogs.com/wdkshy/p/4164804.html
http://jingyan..com/article/5d6edee22daf8799eadeeca2.html

Ⅸ 执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)

估计是异常关闭了,建议恢复一下
恢复步骤:
1 停止sqlserver服务,备份msdb数据库

2 将数据库设置为单用户模式
启动sqlserver服务,将数据库设置为单用户模式
ALTER DATABASE ErrorDB SET SINGLE_USER

3 从其他机器拷贝msdb数据库过来,直接替换msdb数据库文件和日志文件

4 对数据库进行检查修复
dbcc checkdb(EIMSDb,REPAIR_ALLOW_DATA_LOSS
dbcc checkdb(EIMSDb,REPAIR_REBUILD)

5 取消单用户模式
exec sp_dboption EIMSDb, N'single', N'false'

热点内容
存储器部件教学实验 发布:2025-01-21 09:14:06 浏览:178
php安装memcached扩展 发布:2025-01-21 09:07:06 浏览:545
手机缓存视频到电脑上 发布:2025-01-21 09:07:02 浏览:977
如果知道服务器ip有什么风险 发布:2025-01-21 09:06:58 浏览:524
在压缩曲线 发布:2025-01-21 09:05:31 浏览:909
华山算法 发布:2025-01-21 08:44:48 浏览:366
如何在微信上再设置一个密码 发布:2025-01-21 08:44:39 浏览:731
浙江服务器搭建云主机 发布:2025-01-21 08:41:38 浏览:452
光遇和王者荣耀哪个需要的配置高 发布:2025-01-21 08:40:28 浏览:13
如何取消安卓微信表情 发布:2025-01-21 08:08:39 浏览:556