Базы данных Oracle - статьи

         

Различные способы включить трассировку


Параметр sql_trace можно установить в файле параметров инициализации для всех сеансов. На практике так делают редко, поскольку трассировка всех сеансов может заметно замедлить работу, да и общих объем созданных файлов может оказаться очень большим.

В современных версиях Oracle (например, 9.2) избирательно включить трассировку для сеанса можно несколькими способами.

  • Сеанс или приложение, которое необходимо трассировать, выполняет один из следующих операторов.

    alter session set sql_trace=true;

    Этот способ мы уже рассматривали. В трассировочный файл записывается базовая информация - какие операторы выполнялись и сколько времени потребовалось серверу на выполнение основных стадий обработки.

  • Сеанс или приложение, которое необходимо трассировать, выполняет оператор:

    alter session set events '10046 trace name context forever, level уровень';

    Так, с помощью установки события 10046, можно включить расширенную трассировку. В зависимости от указанного уровня, в трассировочный файл будет включаться дополнительная информация (см. далее). Чтобы завершить трассировку в этом случае надо выполнить:

    alter session set events '10046 trace name context off';

  • АБД может включить и отключить трассировку любого сеанса с помощью процедур пакета dbms_system:

    sys.dbms_system.set_sql_trace_in_session(SID, serial#, true); sys.dbms_system.set_ev(SID, serial#, 10046, уровень, '');

    Значения SID и serial# можно получить из представления v$session, например:

    select sid, serial# from v$session where username = 'SCOTT';

    Допустимые уровни трассировки представлены ниже в .

  • Начиная с версии 8, можно включить и отключить трассировку любого сеанса с помощью процедур пакета dbms_support:

    dbms_support.start_trace_in_session(SID, serial#, true, true) dbms_support.stop_trace_in_session(SID, serial#)



  • Наконец, можно автоматически включать трассировку для сеансов определенных пользователей, создав триггер на событие регистрации, например, следующего вида:

    create or replace trigger logon_trigger after logon on database begin if ( user = '&1' ) then execute immediate 'ALTER SESSION SET EVENTS ''10046 TRACE NAME CONTEXT FOREVER, LEVEL &2'''; end if; end; /


    При выполнении этого кода в SQL* Plus надо будет указать имя пользователя и требуемый уровень трассировки. Триггер можно отключить (alter trigger ... disable) сразу после успешного создания и включать (alter trigger ... enable), только когда нужна трассировка. В результате, без изменения кода приложения, можно обеспечить автоматическое включение трассировки для всех сеансов, подключающихся после включения триггера от имени указанного пользователя.

    Таблица 1. Уровни трассировки SQL.

    Уровень

    Информация, которая записывается в трассировочный файл

    0 Отключить трассировку
    1 Базовая информация, как при установке sql_trace=true
    4 Добавляется также информация о значениях связываемых переменных (bind variables) в SQL-операторах
    8 Добавляется также информация о событиях ожидания (wait events)
    12 Комбинация уровней 4 и 8

    Содержание раздела