DB2 9.7数据库无法关闭

DB2 9.7数据库无法关闭

依次执行以下脚本,注意SQL结束符使用 @

CREATE TABLE testdown(id integer NOT NULL PRIMARY KEY) @
INSERT INTO testdown(id) VALUES(1) @

CREATE PROCEDURE testdown(IN proc_input integer)
SPECIFIC testdown
LANGUAGE SQL
CONTAINS SQL
BEGIN
    RETURN;
END
@

调用过程 CALL TESTDOWN((SELECT min(id) FROM testdown)) 出错,信息如下:

SQL1224N  由于数据库管理器发生了错误或者被强制中断,从而无法接受新的请求,已终止
正在处理的所有请求或者已终止所指定的请求。  SQLSTATE=55032

显式断开应用程序连接后,执行db2stop关闭数据库,出错,信息如下:

2009-10-30 19:41:47     0   0   SQL1025N  未停止数据库,因为数据库仍是活动的。
SQL1025N  未停止数据库,因为数据库仍是活动的。

看来还存在活动的数据库连接,查看下,执行:db2 list application

授权标识  应用程序名    应用程序    应用程序标识                  数据库   代理
程序
                        句柄                                      名称     序号
-------- -------------- ---------- ---------------------------------------------
----------------- -------- -----
ADMINIS> db2bp.exe      50         *LOCAL.DB2.091030113855
                  TEST     1
                 
手动断开下,执行:db2 force application all,然后继续查看该连接依然存在,看来不是那么容易断掉的。
查看系统进程,找到db2bp.exe,强制结束进程。
心想这下应该掉了吧,执行查看数据库连接命令,奇了,该连接依然存在,再查看系统进程,刚被杀死的db2bp.exe又运行了

总结:1、在调用存储过程TESTDOWN时,数据库服务器自动产生一个db2bp.exe的进程;
      2、在该存储过程的执行过程中  数据库服务器出现SQL1224N异常后;
      3、之后第一步产生的db2bp.exe数据库连接就无法断开
      4、在该情况下,如果执行db2stop force就会出现漫长的等待,数据库实例无法关闭
     
注:该问题同样存在DB2 9.5版本上,表现的结果是实例直接异常终止。

  由于DB2实例异常自动终止,可能会连带引发其他数据库严重问题,
  
  例如:实例发生异常时,正好有其他事务正在执行(没有提交),
        重新启动实例,连接至数据库时,必然会进行数据库崩溃恢复,
        此时可能会因刚刚的实例异常无法启动崩溃恢复,从而又导致实例的自动终止。
       
        该问题在DB2 8上存在,有兴趣的可以在版本9上试试看看。

心得:在DB2数据库开发中,过程、函数的输入参数,最好使用变量,不要直接用SELECT查询语句的结果。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7690668/viewspace-617792/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7690668/viewspace-617792/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值