我对远程数据库中的表使用了同义词。远程站点中的应用程序会将数据插入源表,我的应用程序将通过表的同义词读取这些数据。
远程站点应用程序将在向源表插入记录后发送 TCP 消息。我的应用程序在收到该消息后执行提取。但是我检测到某些记录无法获取,因为在收到 TCP 消息时表(同义词)中不可用。
在 Synonyms 中插入和获取时是否有可能出现竞争条件?
同义词的存在(或不存在)没有影响。
如果源应用程序在发送通知之前提交,并且您的应用程序使用默认的已提交事务隔离级别,则您的应用程序将在查询数据库时看到所有已提交的行。我知道的唯一例外是,如果远程数据库是一个 RAC 数据库,并且它MAX_COMMIT_PROPAGATION_DELAY
被设置为一个非零值。除非远程数据库是旧的(10.2 之前)版本的 Oracle,否则只有在有人更改了该参数的默认值时才会出现这种情况。
您可以通过查看来确定 Oracle 版本v$version
select *
from v$version
可以MAX_COMMIT_PROPAGATION_DELAY
通过查询来判断是否已经设置v$parameter
(如果参数没有设置则返回0行)
select name, value
from v$parameter
where name = 'max_commit_propagation_delay'
您可以通过查询来判断数据库是否为多节点RAC集群gv$instance
。如果返回count(*)
大于 1 的 a,则为多节点 RAC 数据库
select count(*)
from gv$instance