作者·2011-12-22 11:38
·

断开连接的几种方式的实质区别

字数 1791阅读 1287评论 0赞 0
1:
connect reset 应该是终止数据库连接,包含一个commit的动作
terminate应该是能终止这个client发起的进程,释放资源
2:
terminate是命令,除了断开连接以外,它还终止clp(命令行处理器)的后台进程,也就是常见的db2bp:back-end process。   
connect   reset是sql语句
3:
connect   reset只是断开连接,不终止clp后台,在duow(可以同时连接多个数据库的事务)中可以将数据库当前连接休眠。
4:
quit :退出clp,但数据库连接不断开
connect reset:断开数据库连接但不退出clp
terminate:断开数据库连接,同时退出clp
5:
CLP backend process会在从CLP提交命令和SQL语句时启动,其作用就是将Directory file的内容读到内存中,这样不用每次connect都去读一次I/O,以提高效率。
就如上面所说,区别就在于是否终止那个CLP backend process。所以,当你修改了一些参数以后,用terminate的话,下次的CLP命令(比如一个新的connect语句)此参数就会生效;而用connect reset则还不会生效。


disconenct ,当连接在uow executing(事务执行过程中,还没有执行完毕时,是无法断开连接的)
而 connect reset 是可以的,uow会被回滚
执行如下例子
-bash-4.1$ db2 connect to dstdb

   Database Connection Information

Database server        = DB2/AIX64 9.5.5
SQL authorization ID   = DB2INST1
Local database alias   = DSTDB

-bash-4.1$ db2 +c "select count(*) from syscat.tables"  //取消显示提交,需要db2  commit事务才结束

1          
-----------
        636

  1 record(s) selected.

-bash-4.1$ db2 disconnect
SQL0104N  An unexpected token "END-OF-STATEMENT" was found following 
"DISCONNECT".  Expected tokens may include:  "<identifier>".  SQLSTATE=42601
-bash-4.1$ db2 disconnect current
SQL0428N  The SQL statement is only allowed as the first statement in a unit 
of work.  SQLSTATE=25001
-bash-4.1$ db2 disconnect all
SQL0428N  The SQL statement is only allowed as the first statement in a unit 
of work.  SQLSTATE=25001
-bash-4.1$ db2 connect reset
DB20000I  The SQL command completed successfully.


disconnect current 和disconnect all的区别,前者是断开当前自己的链接,后者ALL断开所有连接

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

  • 事务日志
    评论 0 · 赞 0
  • 维护笔记(一)
    评论 0 · 赞 0
  • DB2 CODEPAGE和OS CODEPAGE
    评论 0 · 赞 0
  • DB2数据库中插入中文后,显示成空白
    评论 0 · 赞 0
  • db2 bufferpool
    评论 1 · 赞 0
  • 相关文章

    相关问题

    相关资料

    X社区推广