2013-01-15 32 views
0

我有一個來自第三方的應用程序,它可以寫入Oracle數據庫。應用程序的一個組件不會返回給定特定參數的數據,而應用程序的另一個組件將返回具有相同參數的數據。沒有人擁有此應用程序的源代碼,但可以看到數據庫中有適當的信息。Oracle 10g,請參閱發送到數據庫的確切查詢

從oracle數據庫服務器返回錯誤組件獲得ORA-01403,這意味着找不到數據,但可能與語法錯誤相關,如我安裝的數據包嗅探器所示。

我想查看應用程序的不同組件實際生成的查詢中的差異。

還想在命令行或其他數據庫查看器中運行這些查詢以查看返回的內容。

如何使用實際顯示查詢的跟蹤來監視數據庫?我也想通過IP地址或來源隔離這些。

使用Oracle 10g企業

+0

IIRC,TOAD會做你想做的事 – KevinDTimm

+0

@KevinDTimm是否有試用版或免費工具? – CQM

回答

0

IIRC,蟾蜍會做你想要什麼。

此外,還有一個免費試用 - http://www.quest.com/toad-for-oracle/software-downloads.aspx

還有其他有趣的下載(搜索甲骨文免費蟾蜍),但我不能肯定其合法性的。

+0

什麼是SQL開發人員,如果一個已經有一個oracle帳戶,看起來是免費的(我猜是附帶企業許可證) – CQM

+0

我已經使用SQL Dev但不知道答案 - TOAD有這麼多功能 - 第一個產品,初戀:) – KevinDTimm

+0

TOAD是如何完成的?從屏幕截圖 – CQM

0

如果你的客戶端直接連接到沒有任何中間層的數據庫,那麼你有兩個非常簡單的選項。

首先,使用v$session視圖找出所需的會話的ID,然後要麼找到在v$sql/v$sql_text其散列值的查詢(您可以檢查docs各的描述),或啓用會話級SQL跟蹤(1)(2)並在純文本跟蹤文件中獲取您的查詢。

如果你有一箇中間層,事情會變得稍微複雜一些,但只是在確定需要跟蹤的會話方面。儘管可以始終啓用系統範圍的跟蹤。

0

晚會有點晚,但我遇到了這個問題,並不想在數據庫服務器上安裝一個一次性使用的東西,我用wireshark結束了;查詢以明文形式發送並且完全可讀。

1

我發現這適用於AWS Oracle RDS實例。我跑從連接到數據庫的Linux實例的tcpdump的...

tcpdump tcp port 1521 -s 0 -l -w - | strings | perl -e ' 
while(<>) { chomp; next if /^[^ ]+[ ]*$/; 
    if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) { 
    if (defined $q) { print "$q\n"; } 
    $q=$_; 
    } else { 
    $_ =~ s/^[ \t]+//; $q.=" $_"; 
    } 
}' 

希望幫助別人。