Как мне регистрировать / отслеживать вызовы хранимых процедур Oracle со значениями параметров? - PullRequest
4 голосов
/ 30 октября 2008

Мы ищем способ записать любой вызов хранимых процедур в Oracle и посмотреть, какие значения параметров были использованы для вызова.

Мы используем Oracle 10.2.0.1

Мы можем регистрировать операторы SQL и видеть связанные переменные, но когда мы отслеживаем хранимые процедуры, мы видим переменные связывания B1, B2 и т. Д., Но без значений.

Мы хотели бы видеть ту же информацию, что и в MS SQL Server Profiler.

Спасибо за любую помощь

Ответы [ 4 ]

6 голосов
/ 30 октября 2008

Вы можете взглянуть на пакет DBMS_APPLICATION_INFO . Это позволяет вам «оборудовать» свой код PL / SQL любой информацией, которую вы хотите, но это влечет за собой добавление вызовов к каждой процедуре, которая будет инструментирована.

См. Также этот поток AskTom об использовании DBMS_APPLICATION_INFO для мониторинга PL / SQL.

2 голосов
/ 30 октября 2008

Я думаю, что вы используете слово «журнал» в странной манере.

Мы можем регистрировать операторы SQL ...

Вы действительно хотите сказать, что можете использовать TRACE SQL-операторы с переменными связывания? Ответ Тони направлен на способность регистрировать, что вы делаете. Это всегда лучше, чем отслеживание, потому что только вы знаете, что важно для вас. Возможно, выполнение вашего процесса сильно зависит от запроса значения из таблицы. Поскольку это значение изменяется и оно не передается в качестве параметра, вы можете потерять эту информацию.

Но если вы на самом деле регистрируете то, что делаете, вы можете включить это значение в свою таблицу журналов, и вы будете знать не только переменные, которые вы передали, но и это значение ключа.

изменить системные системные события '10046 контекст имени трассы навсегда, уровень 12'; Это то, что вы использовали?

0 голосов
/ 06 апреля 2009

вы используете 10 г давай попробуем с этим exec dbms_monitor.session_trace_enable (session_id => xxx, serial_num => xx, ждет => true, связывает => true); вы можете получить session_id = SID & serial_num = SERIAL # из v $ session

0 голосов
/ 30 октября 2008

Да, я думаю, мне следовало использовать термин «след»

Я постараюсь описать, что мы сделали:

Используя менеджер предприятия (как dbo), мы пошли на сеанс и запустили трассировку

начать трассировку Включить информацию ожидания, информацию о привязке

Запустите операцию с нашим приложением, которое попадает в БД

Завершите трассировку, запустите на выходе:

tkprof .prc output2.txt sys = нет записи = record.txt объясните = dbo @ DBINST / PW

То, что мы хотим увидеть, это «эти процедуры были вызваны с этими параметрами». Что мы получаем:

Begin dbo.UPKG_PACKAGENAME.PROC(:v0, :v1, :v2 ...); End;
/
Begin dbo.UPKG_PACKAGENAME.PROC2(:v0, :v1, :v2 ...); End;
/
...

Таким образом, мы можем отследить вызванные процедуры, но мы не получаем фактические значения параметров, только: v0 и т. Д.

Насколько я понимаю, мы сделали то же самое, что и оператор alter system, но, пожалуйста, дайте нам знать, если это не так.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...