2011-03-01 19 views
0

我現在有一個奇怪的問題,即如果從其中只有1條記錄的存儲過程返回的ref遊標,則提取操作將掛起並凍結。存儲過程執行速度非常快,只是抓取過程掛起。如果引用光標有多條記錄,那麼一切都很好。有沒有人有過類似的問題?如果Oracle ref refetch提取包含1條單條記錄,則會掛起

Oracle服務器在Linus上運行11g。客戶端是Windows Server 2003.我正在使用Windows Server上的通用Oracle sqlplus工具進行測試。

任何幫助和意見將不勝感激。謝謝。

+1

你能告訴我們程序嗎? – 2011-03-01 21:29:32

回答

1

既然你說這個過程是掛起的,你的光標有沒有機會選擇「更新」而不是「選擇」?既然你說多個記錄的獲取不會導致這個錯誤,那可能不是這種情況。

您可以向我們展示您的選擇和獲取的代碼(或可重複的小測試/樣本)。

另外,您可以使用以下查詢來檢查v $ locked_objects,並在您的表名中給出以查看相關對象是否被鎖定。同樣,除非您當前的查詢具有「for update」,否則此提取不應該掛起。

select do.* 
    from v$locked_objects vo, 
     dba_objects  do 
    where vo.object_id = do.object_id 
    and vo.object_name = '<your_table_name>' 
4

當你說掛起,你是什麼意思?

如果會話在數據庫中仍處於活動狀態(V $ SESSION中的狀態),那麼它可能正在等待某個事件(例如來自客戶端的SQL * Net意味着它正在等待客戶端執行某些操作)。

這可能是查詢花了很長時間才發現沒有更多的行。考慮一個10,000,000行沒有索引的表格。該查詢可能會全面掃描該表並找到第一行符合條件。它仍然需要掃描接下來的9,999,999行,發現它們沒有。這可能需要一段時間。

相關問題