06 августа 2020 года    
Четверг | 02:58    
Главная
 Новости
Базы данных
Безопасность PC
Всё о компьютерах
Графика и дизайн
Интернет-технологии
Мобильные устройства
Операционные системы
Программирование
Программы
Связь
Сети
 Документация
Статьи
Самоучители
 Общение
Форум







Разделы / Базы данных / Oracle

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

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

21 сентября 2000 г.

Системный пакет 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);

Vladimir Begun
Sunbay Software AG
Oracle DBA/Technical Project Manager
mailto:VladimirBegun@yahoo.com
http://www.sunbay.crimea.ua/~jester

 

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


2006 (c) Copyright Hardline.ru