Как войти в сырой SQL из Oracle Occi C ++ API? - PullRequest
5 голосов
/ 07 апреля 2010

Один из наших клиентов жалуется, что наше приложение не работает. Их аргументация заключается в том, что наш вызов функции sql для их базы данных Oracle не дает "ожидаемого" результата. Когда-нибудь это должно было произойти, но наше приложение получило успех из их базы данных. Это действительно расстраивает, потому что это их база данных, и мы не можем провести никакой проверки.

Мы используем C ++ Oracle OCCI API. Есть ли в любом случае мы можем войти сырой sql с нашей стороны? Это будет очень полезно, и мы можем отправить им скрипт и позволить отладке в их системе выяснить проблему.

Спасибо заранее.

Ответы [ 3 ]

1 голос
/ 14 мая 2010

Я предполагаю, что вы выполняете только оператор SQL, поскольку вы говорите, что хотите увидеть «сырой SQL с вашего конца». Лучше всего получить трассировку базы данных, как было предложено.

Я хочу отметить, что даже если ваш SQL возвращает ожидаемый результат в тестовой базе данных, тот же SQL может вернуть неожиданный результат в другой базе данных, потому что данные могут отличаться: данные могут быть повреждены, индексы могут существуют или могут не существовать, ограничения могут быть определены или нет и т. д. Определенно, вам нужно получить трассировку из базы данных, чтобы иметь возможность двигаться вперед.

0 голосов
/ 07 апреля 2010

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

Для передачи по сети вы можете посмотреть Сетевые трассировки SQL

Что касается базы данных, посмотрите на DBMS_MONITOR

0 голосов
/ 07 апреля 2010

В идеале вы должны включить трассировку на уровне базы данных, которая будет генерировать файл трассировки, содержащий все действия, выполненные базой данных.

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

В этом посте также рассматриваются некоторые другие варианты (они пытаются отследить, происходит ли внедрение SQL), чтобы прослушать действие базы данных:

http://www.symantec.com/connect/articles/detecting-sql-injection-oracle

Хотя это должно быть настроено в базе данных, трассировка даст вам наиболее достоверные результаты.Oracle Fine Grained Auditing - это еще кое-что, если вы используете Oracle 9i или выше.

...