Использование отладки SQL

Источник: all-oracle

Рекомендовано для:
  • Oracle Database 8i
  • Oracle Database 9i R1
  • Oracle Database 9i R2
  • Oracle Database 10g R1
  • Oracle Database 10g R2
  • Oracle Database 11g R1
 

В статье пойдет речь о различных способах включения отладки SQL.
Включение отладки для своей сессии, выполняется командой:

ALTER SESSION SET sql_trace=TRUE;

или

ALTER SESSION SET EVENTS '10046 trace name context forever, level <уровень_отладки>';

где, уровень отладки:
0   - Выключить отладку (значение по умолчанию)
1   - Включить отладку.
4   - Добавить в отладку информацию о значениях связанных переменных
8   - Добавить в отладку информацию об ожиданиях
12 - Комбинация уровней 4 и 8

В итоге команда может выглядеть так:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';

Чтобы включить отладку для выбранной сессии, выполняем SQL команду:

EXEC sys.dbms_system.set_sql_trace_in_session([SID],[serial#], TRUE);

или

EXEC  sys.dbms_system.set_ev([SID], [serial#], 10046, уровень_отладки, '');

Значения SID и serial# сессии можно найти в v$session:

SELECT SID, SERIAL# FROM V$SESSION;
       SID    SERIAL#
---------- ----------
       133         46
       136          4
       137          6
       138          8
       140      22905

Если требуется включить отладку для всех сессий экзмемпляра, то в файле конфигурации init.ora необходимо выставить параметр sql_trace=true и перегрузить экземпляр. Выставлять отладку для всех сессий рекомендуется только в экстренных случаях, поскольку это создаст значительную нагрузку на сервер.

Кроме того, вы можете сделать трассировку любого серверного процесса, используя oradebug. Зная SID процесса можно получить его PID (Oracle Process Identifier) или его SPID (Operating System process identifier):

SELECT P.SPID, P.PID
  2  FROM V$PROCESS P, V$SESSION S
  3  WHERE P.ADDR = S.PADDR
  4        AND S.SID = SID;

Затем выполняем любую из команд, для указания процесса:

SVRMGR> ORADEBUG SETOSPID [SPID]

либо

SVRMGR> ORADEBUG SETORAPID [PID]

И включаем отладку командой:

SVRMGR> ORADEBUG EVENT 10046 trace name context forever, level уровень_отладки

Еще один вариант включения отладки, описан у Тома Кайта. Для включения отладки на уровне сессии используется logon-тригер. Этот вариант исключительно полезен, когда необходимо получить отладочную информацию о сессии, которая работает очень непродолжительное время (секунды).

CREATE OR REPLACE TRIGGER trace_login_trigger
  AFTER logon ON DATABASE
  BEGIN
    IF (USER = '') THEN
      EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name
      context forever, level ''';
    END IF;
  END;

По завершении сбора данных, триггер переводится в состояние 'DISABLE'. Для отключение триггера выполните команду SQL:

ALTER TRIGGER trace_login_trigger DISABLE;

Когда триггер снова потребуется собрать отладочную информацию, включаете триггер командой:

ALTER TRIGGER trace_login_trigger ENABLE;


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20731