Oracle: отслеживание операторов SQL

Я поддерживаю решение службы технической поддержки, основанное на домашнем пивоварении, и при некоторых обстоятельствах мы испытываем ошибочные изменения в поле базы данных. Код, о котором идет речь, откровенно запутался, смешивая разные подходы к доступу к базе данных (худшим и самым опасным является создание строк sql через конкатенацию). Полнотекстовый поиск проблемного поля во всем решении не помог (поле появилось только в выборках и в одной допустимой вставке), поэтому я даже не могу найти код, вызывающий нарушение.

Знаете ли вы быстрый способ включить трассировку sql в Asp.Net или в самой Oracle (8)? (Возможно ли перехватить команды sql через объект OracleConnection или что-то в этом роде? Это позволило бы получить трассировку стека и выяснить ошибочный код).

Я немного погуглил и нашел вот это: ALTER SYSTEM SET sql_trace = true SCOPE=MEMORY; но я хотел бы знать, что является лучшим способом решения проблемы (и, возможно, создать простой механизм регистрации SQL без переписывания приложения).

2 ответа

Решение

Включение трассировки - это то, что нужно, но если у вас возникли проблемы с его работой, попробуйте найти ссылку на поврежденный столбец в столбце sql_text в SYS.v$sql. Предполагая, что оператор был запущен недавно (и что оператор, который выполнил действие, не настолько длинный, что столбец, который вы ищете, был усечен - Oracle 8 не сохранил полный текст), вы сможете найти это там. Единственный другой случай, когда SQL не будет отображаться там, - это если изменение происходило через триггер или сохраненный процесс, и в этом случае вы сможете найти столбец в столбце TEXT таблицы ALL_SOURCES.

Другие вопросы по тегам