为了在连接断开的情况下测试异常处理,能够以编程方式请求数据库终止连接是很有用的。
最好的方法是什么?
最佳答案
这里有一些代码来处理这个问题。这适用于 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 中的 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
和一个示例调用
$ oracle-killsession 98 45809 orcl2 sys password: System altered.
来 self 的客户...万岁!!!
cx_Oracle.DatabaseError: ORA-00028: your session has been killed
关于Oracle:如何以编程方式安排终止当前连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/391036/