Oracle: Как я могу программно организовать разрыв моего текущего соединения? - PullRequest
2 голосов
/ 24 декабря 2008

Для тестирования обработки исключений в случае разрыва соединения полезно иметь возможность программно запрашивать базу данных на разрыв соединения.

Какой лучший способ сделать это?

1 Ответ

2 голосов
/ 24 декабря 2008

Вот пара битов кода, чтобы справиться с этим. Это работает в многоузловой среде RAC. Предполагается, что у вас есть запись TNS для каждого из ваших экземпляров кластера.

  1. скрипт оболочки для разрыва соединения:

    #!/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
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...