sql state 怎么解决

sql state 怎么解决,第1张

有关SQLSTATE57014和57019的解决方法

一、SQLSTATE57014,SQL0952N由于中断而取消处理

问题背景:近日对1400+万的数据进行select,在db2下是29秒。在sql里面添加处理逻辑后是1分40秒。在开发程序中 *** 作同样的sql,执行过程中报错“SQLSTATE57014,SQL0952N由于中断而取消处理”。debug后问题出在数据源配置结果集上。

解决方法:

1. 问题产生的原因是数据量大查询超时引起的,我们经常会将Connection的Timeout设置为0,其实在系统底层Connection的过期时间属性已经默认为0并且是只读状态

.执行sql的状态和DB2的DBCommand相关,其属性值可读可写,只需要将CommandTimeOut的属性设置为0即可;

我们设置属性的时候要在数据源关闭的前提下进行设置,如果数据源已经开启,设置DBCommand并不会产生效果,“SQLSTATE57014,SQL0952N由于中断而取消处理”的问题在执行代码期间仍然会报错。

2.db2cli.ini中添加 set QUERYTIMEOUTINTERVAL=0

二、SQLSTATE57019,SQL1117N 因为处于ROLL-FORWARD PENDING 状态,所以不能连接或激活数据库

问题背景:系统数据库的备份是动态备份下来的,人工导入后打不开,报错。

解决方法

因为处于“ROLL-FORWARD PENDING”前滚悬挂状态,右键数据库选择前滚恢复,下面我们选择日志项,同时路径指向该数据库之前的日志目录,点击退出回滚状态,执行完成即可。

 步骤 1. 执行完全数据库备份

要执行完全脱机数据库备份,可以使用以下命令:

TERMINATE

FORCE APPLICATION ALL

BACKUP DATABASE testdb1 TO c:\testdb1\backup

需要注意备份文件名称中生成的 ID。它类似于:20060411154219。这个 ID 只是备份映像的时间戳,恢复过程中需要使用它。

步骤 2. 模拟故障

要模拟故障场景,可以完全删除数据库:

TERMINATE

FORCE APPLICATION ALL

DROP DATABASE testdb1

现在,尝试连接数据库:

CONNECT TO testdb1

将报告以下错误,它提示找不到此数据库:

Error: SQL1013N Database alias name or Database name "testdb1" could not found.

步骤 3. 创建一个新的数据库

要开始恢复过程,首先创建一个与丢弃数据库名称相同的数据库:

CREATE DATABASE testdb1

查看数据库目录的内容,确保数据库创建成功且目录正确:

LIST DB DIRECTORY

步骤 4. 恢复数据库

恢复数据库备份映像。在本例中,我使用时间戳 20060411154219 恢复备份映像:

RESTORE DATABASE testdb1 FROM c:\testdb1\backup TAKEN AT 20060411154219 INTO testdb1

将返回以下报警消息

SQL2523W: Restoring to an existing database that is different from the database on the backup image. The target database will be overwritten by the backup version. The roll-forward recovery logs associated with the target database will be overwritten.

按 Y 键继续运行。该 *** 作将把数据库备份恢复到前一步骤中创建的数据库。成功恢复映像之后,数据库将与备份时的数据库完全一致。

步骤 5. 连接到数据库

尝试连接到数据库:

CONNECT TO testdb1

可能会返回以下错误消息:

SQL1117N A connection to or activation of database "testdb1" cannot be made because of Roll-Forward Pending SQLSTATE=57019.

出现错误的原因可能是,必须使用某些日志文件进行一致性检查。使用以下命令将数据库恢复到一致状态:

ROLLFORWARD DATABASE testdb1 COMPLETE

再次尝试连接到数据库:

CONNECT TO testdb1

步骤 6. 数据库和对象验证

验证之前的对象仍然存在且可用,比如说:

LIST TABLESPACES SHOW DETAIL

LIST TABLES

上一条命令应该会提示,所有表空间均处于正常状态并且可以访问容器。所有表及表中的数据集合应该与执行备份时的状态一致。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6656017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存