2011-12-13 35 views
1

我有一個Oracle OCI程序,該程序在各種平臺上進行生產:SLES Linux,Ubuntu,AIX,Solaris和HP-UX。我試圖在Redhat上運行同樣的東西,但我遇到了困難。Oracle OCI - 提取延遲並失敗

使用可滾動遊標(調用OCIStmtExecuteOCI_STMT_SCROLLABLE_READONLY)時,似乎會出現此問題,並使用執行二分搜索以獲得確切結果集大小的函數。更一般地說,在讀取OK值之前,問題似乎是在結果集的末尾讀取。

我寫了一個測試實用程序,它執行一個簡單的語句,必須返回1行(SELECT COUNT(*) FROM xxx)。然後它從結果集中檢索數據:

如果我第一次檢索第1行,它工作正常。如果我接着經過結果集的末尾,那麼當我返回時,它仍會繼續正常工作。但如果我的第一次檢查是在結果集之後,一切都錯了:

> rdb_test 1 
12:06:32.365 Checking row 1 - OK 

> rdb_test 3 
12:06:35.510 Checking row 3 - NO DATA 
12:06:35.511 Checking row 2 - NO DATA 
12:06:45.549 Checking row 1 - NO DATA 

> rdb_test -3 
12:06:49.344 Checking row 1 - OK 
12:06:49.344 Checking row 3 - NO DATA 
12:06:49.345 Checking row 2 - NO DATA 
12:06:49.345 Checking row 1 - OK 

也有一個奇怪的延遲,10S在上面的例子,而它檢索這應該是OK的行。在調試器中,這在OCIStmtFetch2函數中很深 - 在用於等待服務器響應的__read_nocancel函數中不出所料。

有沒有其他人看過這個問題?

回答

0

該問題似乎與版本11 OCI庫有關。我剛剛嘗試過v10庫,它似乎再次運行良好。不幸的是,這需要舊版本的C++標準庫,所以如果有替代方案,我仍然希望避免這種修復。