我读了这篇文章,标题是:
事件监视器进程:架构和已知问题(文档 ID 105067.1)
…</p>
通知实现了一个高水印方案,当通知事件的积压达到内存限制时,如果设置了水印,则在 9.2 的情况下,消息会溢出到磁盘上的 SYS.AQ_EVENT_TABLE_Q 队列中。在 9.2 中,水印的默认值为 0,这意味着没有消息会溢出到磁盘上,并且整个共享池可以用于通知事件。从 10.1 开始,过程 DBMS_AQADM.GET_WATERMARK 和 DBMS_AQADM.SET_WATERMARK 可用于设置通知事件可用的内存量,但消息不再溢出到磁盘上。相反,入队过程受流控制,直到积压已被 emon 进程清除。
…</p>
作为开发人员,这对我意味着什么?我在 Linux(64 位)下有一个 12.2 EE 数据库。我注册了一个通知回调程序。
在将消息排入队列时,我如何知道我的消息将被 EMON 批准,或者将被放入 backlog?
我为什么要知道呢?“直到积压被 emon 进程清除”是否意味着整个积压将丢失而 EMON 没有进一步处理?
我多次注意到队列中有消息,同时 EMON 的作业 PLSQL_NTFN 处于“等待队列中的消息”状态。而且这些消息似乎永远不会被处理。
可能是清除积压的情况?我在哪里可以找到有关清除积压和已清除消息的 MSGId 的信息(在服务器日志、数据库对象中)?