簡體   English   中英

如何從Oracle occi C ++ api中記錄原始SQL?

[英]How to log the raw SQL from Oracle occi C++ api?

我們的一位客戶抱怨我們的申請無效。 他們的理由是我們的sql函數調用他們的Oracle數據庫沒有得到“預期”的結果。 有時,它應該失敗,但我們的應用程序從他們的數據庫獲得成功。 這真是令人沮喪,因為它是他們的數據庫,我們無法對其進行任何測試。

我們正在使用C ++ Oracle OCCI API。 反正我們可以從我們的結尾記錄原始sql嗎? 這將非常有用,我們可以將腳本發送給他們,讓他們在他們的系統中調試以找出問題。

提前致謝。

我假設您只發出一個SQL語句,因為您說您希望看到“來自您的原始SQL”。 那么,最好的辦法是按照建議獲取數據庫跟蹤。

我想指出的是,即使您的SQL在測試數據庫中返回預期結果,同一SQL也可能在另一個數據庫中返回意外結果,因為數據可能不同:數據可能已損壞,索引可能存在或可能不存在,可以定義或不定義約束等。當然,您需要從數據庫中獲取跟蹤才能繼續前進。

理想情況下,您將在數據庫級別啟用跟蹤,該跟蹤將生成包含數據庫執行的所有活動的跟蹤文件。

其他替代方法是更改​​您的應用程序以記錄它將要針對數據庫執行的所有SQL。

這篇文章還介紹了其他一些選項(它們試圖檢測SQL注入是否正在發生)來嗅探數據庫活動:

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

雖然必須在數據庫上進行設置,但跟蹤將為您提供最真實的結果。 如果您使用的是Oracle 9i或更高版本,Oracle Oracle Fine Grained Auditing是另一個需要考慮的問題。

根據體系結構,通過網絡發送的語句不一定鏡像執行的SQL。 顯而易見的示例是調用存儲過程,其中網絡只是調用,但數據庫操作過程的所有基礎SQL。 但是,觸發器,細粒度訪問控制,視圖等都可能具有類似的影響。

對於網絡傳輸,您可以查看SQL網絡跟蹤

對於數據庫端,請查看DBMS_MONITOR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM