2009-04-26 173 views
3

我有一个Oracle连接到ORACLE 10.2数据库,并且想要监听对表的更改。连接的用户被授予了“CHANGE NOTIFICATION”的权限。OracleDependency没有触发事件

听力被初始化为以下的方法:

private OracleDependency SubscribeToTable(string tableName) 
{ 
    string sql = "select * from " + tableName; 
    var cmd = new OracleCommand(sql, this.connection) { AddRowid = true }; 
    var dep = new OracleDependency(cmd); 
    cmd.Notification.IsNotifiedOnce = false; 
    dep.OnChange += this.dep_OnChange; 
    cmd.ExecuteNonQuery(); 
    return dep; 
} 

在i行插入观察到的表并提交,dep_OnChange永远不会触发事件。我究竟做错了什么?

UPDATE:

后检查故障列表,发现一切会好的,我连为DBA对Oracle和检查的IP不会忽略在发生变化时应当通知(SELECT * FROM user_change_notification_regs)。由于某些原因,这些IP地址指向了VMWare虚拟网络适配器,尽管通知请求是从物理机器启动的,而不是VM启动的。禁用该虚拟网络适配器后,所有操作都应如此。

+0

我有一个Python程序类似的问题。它工作了一段时间,然后停止工作。如果我找到任何线索,我会更新答案。 – 2009-04-27 06:55:08

回答

2

您是否遇到documentation的问题解答?

+2

文档链接现在无效。 – Thought 2012-06-18 23:50:17

0

作为替代方案,您可以使用oracletabledependency组件。你可以在 Tabledependency.codeplex.com

一旦实例化,你将接收事件fot修改每个表记录。