Oracle:我如何以编程方式安排将当前连接杀死?

时间:2008-12-24 08:47:05

标签: oracle exception testing

为了在连接断开的情况下测试异常处理,能够以编程方式请求数据库终止连接是很有用的。

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

以下是处理该问题的几个代码。这适用于RAC多节点环境。它假设您为每个集群实例都有一个TNS条目。

  1. 用于终止连接的shell脚本:

    #!/bin/sh
    # oracle-killsession -- kill a specified oracle session
    
    sid=$1; ser=$2; inst=$3
    echo -n sys password:
    stty -echo; read pass; stty echo
    echo "alter system kill session '$sid,$ser';"|
         sqlplus -SL sys/$pass@$inst as sysdba
    
  2. 客户端函数(在python中),用于生成对脚本的调用。 我在测试程序开始时调用它并打印出来 字符串,所以我可以剪切和粘贴。

    def killstring(curs):
        """return a string that will kill this db connection"""
        curs.execute("""SELECT dbms_debug_jdwp.current_session_id,
                               dbms_debug_jdwp.current_session_serial,
                               sys_context('USERENV', 'INSTANCE_NAME')
                        FROM dual""")
        (sid,serial,instance)=curs.fetchone()
        s="oracle-killsession %s %s %s"%(sid,serial,instance)
        return s
    
  3. 和示例调用

    $ oracle-killsession 98 45809 orcl2
    sys password:
    System altered.
    
  4. 来自我的客户......万岁!

    cx_Oracle.DatabaseError: ORA-00028: your session has been killed