我在远程数据库中使用了表的同义词。远程站点中的应用程序将数据插入源表,我的应用程序将通过表的同义词读取这些数据。
远程站点应用程序将在将记录插入源表后发送TCP消息。我的应用程序在收到该消息后执行获取。 但我检测到某些记录无法获取,因为在收到TCP消息时表(同义词)中没有这些记录。
在插入和获取同义词时是否有可能存在竞争条件?
答案 0 :(得分:3)
同义词的存在(或不存在)没有影响。
如果源应用程序在发送通知之前提交,并且您的应用程序使用默认的读取已提交事务隔离级别,则应用程序将查看在查询数据库时提交的所有行。我所知道的唯一例外是远程数据库是一个RAC数据库,其中MAX_COMMIT_PROPAGATION_DELAY
被设置为非零值。除非远程数据库是旧的(10.2之前的)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'
您可以通过查询gv$instance
来确定数据库是否是多节点RAC群集。如果返回大于1的count(*)
,则它是一个多节点RAC数据库
select count(*)
from gv$instance