假设我使用CLP在IBM DB2数据库中开始执行低效且长时间运行的查询。 也许有一些可怕的连接在数据库中占用了大量的处理时间。也许我还没有那么急需的索引。
# db2 +c -m
db2 => connect to mydb
db2 => select * from view_with_inefficient_long_running_query
//// CLP waiting for database response
如何取消处理此语句/查询而不杀死DB2 CLP?我可以通过杀死它来实现,即按 Ctrl - C :
db2 => select * from view_with_inefficient_long_running_query
^C
SQL0952N Processing was cancelled due to an interrupt. SQLSTATE=57014
# db2 +c -m
db2 =>
但还有另一种更优雅的方式吗?也许另一个 Ctrl - 快捷方式?我已经看过this question,但它并没有谈论我想要的东西。
答案 0 :(得分:2)
AFAIK,没有CTRL-来终止CLP。您的选择是打开另一个终端会话并使用LIST / FORCE应用程序,CTRL-Z CLP暂停它并使用另一个CLP到LIST / FORCE或使用像Data Server Manager这样的GUI工具来查找应用程序并强制它终止
db2 list applications for <database>
获取您要终止的会话的应用程序句柄。
db2 force application ( application-handle )
答案 1 :(得分:1)
这样您的命令就会停止并报告SQLSTATE 57013
-913 UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT.
答案 2 :(得分:1)
为什么不直接从UNIX提示符开始直接使用CLP?
db2 "select * from view_with_inefficient_long_running_query"
您可以点击Ctrl-C
取消查询。 DB2 Backend Process(db2bp
)维护与数据库的连接,您可以获得在UNIX shell中工作的所有好处 - 优越的历史记录,命令管道等。