Oracle:如何以编程方式安排终止当前连接?

Oracle:如何以编程方式安排终止当前连接?,oracle,exception,testing,Oracle,Exception,Testing,对于在断开连接的情况下测试异常处理,能够以编程方式请求数据库终止连接非常有用 最好的方法是什么?这里有一些代码来处理这个问题。这适用于RAC多节点环境。它假定每个集群实例都有一个TNS条目 用于终止连接的shell脚本: #!/bin/sh # oracle-killsession -- kill a specified oracle session sid=$1; ser=$2; inst=$3 echo -n sys password: stty -echo; read pass; stt

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


最好的方法是什么?

这里有一些代码来处理这个问题。这适用于RAC多节点环境。它假定每个集群实例都有一个TNS条目

  • 用于终止连接的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
    
  • 一个客户端函数(在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
    
  • 和一个示例调用

    $ oracle-killsession 98 45809 orcl2
    sys password:
    System altered.
    
  • 从我的客户那里。。。万岁

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