为了在连接断开的情况下测试异常处理,能够以编程方式请求数据库终止连接是很有用的。
最好的方法是什么?
答案 0 :(得分:2)
以下是处理该问题的几个代码。这适用于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