On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru


http://marketcenter.ru/News/NewsArticleShow.asp?ID=776





 

Некоторые недокументированные процедуры пакета DBMS_SYSTEM

Системный пакет Oracle DBMS_SYSTEM содержит ряд весьма интересных недокументированных процедур, которые могут оказаться полезными в определенных ситуациях, таких как трассировка событий и вывод отладочной информации в рабочие файлы Oracle-trace и alert.

Процедура dbms_system.set_ev устанавливает событие для сессии.

  PROCEDURE set_ev (
    si                             BINARY_INTEGER
  , se                             BINARY_INTEGER
  , ev                             BINARY_INTEGER
  , le                             BINARY_INTEGER
  , nm                             VARCHAR2
  );
  • si - идентификатор сессии sid из представления v$session
  • se - идентификатор сессии serial# из представления v$session
  • ev - номер события ["event number"]
  • le - уровень выдачи отладочной информации
  • nm - имя события

Процедура dbms_system.read_ev проверяет уровень выдачи отладочной информации для сессии.

  PROCEDURE read_ev (
    iev                            BINARY_INTEGER
  , oev                            OUT BINARY_INTEGER
  );
  • iev - номер проверяемого события ["event number"]
  • oev - уровень выдачи отладочной информации
  • Процедура возвращает следущие значения:
  • 0 - событие для сессии не установлено
  • n - где n > 0, уровень выдачи отладочной информации для текущей сессии

Процедура dbms_system.ksdwrt выводит отладочную информацию в рабочие файлы Oracle.

  PROCEDURE ksdwrt (
    dest                            BINARY_INTEGER
  , tst                             VARCHAR2
  );
  • dest - определяет файл для выдачи сообщений:
  • 1 - trace файл
  • 2 - alter файл
  • 3 - trace и alter файл
  • tst - сообщение, максимальная длина 1023 символа. Следует также обратить внимание на то, что NULL значения параметра tst не будут выводиться в файл.

Процедура dbms_system.ksdddt выводит текущую дату и время в пользовательский trace файл.

  
  PROCEDURE ksdddt;

Формат вывода 2000.09.18.09.16.47.467

Процедура dbms_system.ksdind печатает разделитель в trace файл.

  
  PROCEDURE ksdind (
    lvl                             BINARY_INTEGER
  );

lvl - определяет сколько раз печатать разделитель ":". Максимальное значение lvl - 30.

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

Пример использования:

Рассмотрим две открытых сессии SQL*PLUS:
пусть сессия "A" - сессия, отрытая пользователем SYS, а сессия "B" - сессия, отрытая пользователем J.
Пользователю J дана привилегия на запуск кода пакета dbms_system["GRANT EXECUTE ON dbms_system TO j;"]

Сессия "A":
Начало трассировки SQL для сессии пользователя J

SQL> SELECT sid, serial#
  2    FROM v$session
  3   WHERE username = 'J'
  4  /

      SID   SERIAL#
--------- ---------
        7        27

BEGIN
  dbms_system.set_ev(7, 27, 10046, 10, '');
END;
/

Сессия "B":
Проверка пользователем J статуса его сессии.

VAR n NUMBER;
BEGIN
  sys.dbms_system.read_ev(10046, :n);
  sys.dbms_system.ksdwrt(3, 'Hello, DBA! =;)');
  sys.dbms_system.ksdwrt(1,
'1 TRACE FILE: event level = ' || :n); sys.dbms_system.ksdind(:n); sys.dbms_system.ksdddt; sys.dbms_system.ksdwrt(2,
'2 ALERT FILE: event level = ' || :n); sys.dbms_system.ksdind(:n); sys.dbms_system.ksdddt; sys.dbms_system.ksdwrt(3,
'3 TRACE AND ALERT FILE: event level = ' || :n); sys.dbms_system.ksdddt; END; / PRINT n N --------- 10

Итак, пользователь J выяснил, что его сессия находиться под "контолем", с уровнем выдачи отладочной информации 10. Он передал привет DBA и записал уровень отладочной информации в trace и alert файлы.

Сессия "A":
Завершения трассировки SQL для сессии пользователя J

BEGIN
  dbms_system.set_ev(7, 27, 10046, 0, '');
END;
/

Пример для сессии "A", приведенный выше-это аналог функции dbms_system.set_sql_trace_in_session(sid, serial#, sql_trace);



Литература по Oracle