我有一个到ORACLE 10.2数据库的Oracle连接,并希望监听对表的更改。连接的用户被授予“CHANGE NOTIFICATION”特权。
使用以下方法初始化聆听:
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;
}
当我在观察到的表中插入一行并提交时,事件dep_OnChange永远不会被触发。我做错了什么?
更新:
在检查故障排除列表并发现一切正常后,我将DBA连接到Oracle并检查了在发生更改时应通知的ip地址(SELECT * FROM user_change_notification_regs)。由于某种原因,IP地址指向VMWare虚拟网络适配器,尽管通知请求是从物理机而不是VM启动的。禁用该虚拟网络适配器后,一切都按预期工作。
答案 0 :(得分:2)
您是否在documentation?
中完成了故障排除答案 1 :(得分:0)
作为替代方案,您可以使用oracletabledependency组件。你可以找到它 Tabledependency.codeplex.com
一旦实例化,您将收到每个修改过的表记录的事件。