2012-03-08 29 views
2

我正在使用Oracle和ODP.Net並註冊一些連續的查詢通知。連續查詢通知自動取消註冊

一切正常工作良好的數據庫升級到11.2.0.3 - 現在我看到我的查詢註冊並在幾秒鐘後註銷。代碼如下所示:

 OracleCommand cmd = new OracleCommand(); 
     cmd.Connection = getOpenConnection(); 
     cmd.CommandText = _sqlStatement; 

     _odep = new OracleDependency(cmd, false, 0, false); 

     _odep.OnChange += new OnChangeEventHandler(_odep_OnChange); 

     OracleDB.bindVars(ref cmd, arguments); 

     cmd.Notification.IsNotifiedOnce = false; 
     cmd.ExecuteNonQuery(); 

在數據庫的某處是否有CQN註冊日誌?

編輯:getOpenConnection()只是一個返回打開連接的函數,而OracleDB.bindVars只是將現有的綁定變量綁定到該命令。強調數據庫更新前一切正常的事實:)

+0

你可以檢查你從SELECT * FROM DBA_CHANGE_NOTIFICATION_REGS獲得的結果(註冊你的通知後) – Eggi 2012-03-09 06:11:47

+0

嗨Eggi,謝謝你的回答。當我執行該sql命令時,我發現查詢已成功註冊 - 但如果我在一分鐘後重複查詢,它們就會消失。它可能與ODP.Net驅動程序版本有關嗎? – Andrea 2012-03-09 13:56:53

+0

也許你可以嘗試使用11.2.0.3('http:// www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html')。你甚至收到任何通知?也許關於防火牆(在運行客戶端的機器上 - 因爲服務器連接到客戶端)或某事發生了一些變化。 – Eggi 2012-03-09 14:12:59

回答

2

最後,這是數據庫方面的一個問題 - 在11.2.0.3服務器上使用11.2.0.1客戶端註冊CQN條目導致不兼容。

2

這可能與您的特定情況無關,但任何有CQN(和AQ)通知不存在問題的人都應升級數據庫。 11.2.0.1數據庫中存在一個錯誤。

下面的SQL導致甲骨文以避免與舊版本的bug的代碼路徑,但建議您升級數據庫:

ALTER SYSTEM SET事件「10867痕跡的名字永遠背景下,1級」;

編輯:請注意,這是一箇舊的bug,問題在當前的補丁集中得到修復。你將需要修補數據庫和ODP.NET來修復它。

基督教吉文

甲骨文

+0

這實際上並不是我的情況,但感謝您提供的信息 - 肯定會對某人有用! – Andrea 2012-03-16 09:56:44

1

+1基督教的回答(我沒有代表+1吧)

他的修復(ALTER SYSTEM SET事件「10867痕跡的名字永遠背景,等級1')解決了回調事件未觸發的問題。

在應用此修復程序之前,我會看到更改通知註冊輸入USER_CHANGE_NOTIFICATION_REGS表,並在發生數據庫更改時消失,但不會觸發任何事件。

我正在使用11.2.0.1.0服務器和11.2.0.3.0客戶端(http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html)。