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

标签 oracle exception testing

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

最好的方法是什么?

最佳答案

这里有一些代码来处理这个问题。这适用于 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 中的 this)。 我在测试程序的开头调用它并打印 字符串,以便我可以剪切和粘贴。

    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. 来 self 的客户...万岁!!!

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

关于Oracle:如何以编程方式安排终止当前连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/391036/

相关文章:

Oracle 时间戳、最大值和最小值

oracle - 使用 COUNT(*) 和 INTO oracle sql

java - Java中检测到异常时如何重复执行代码?

testing - 我应该如何使用 gorilla 上下文对中间件包进行单元测试

django - Django 项目的 Sphinx 代码验证

mysql - Oracle 中 MySQL 临时表的替代方案

c# - ORA-01006 : bind variable does not exist ASP. 网络

java - 在 Java 异常中返回导致该异常的行的内容

java - toRealPath(),IO/NIO包Java

testing - 如何在 Elixir 中正确断言结构类型