0

我对远程数据库中的表使用了同义词。远程站点中的应用程序会将数据插入源表,我的应用程序将通过表的同义词读取这些数据。

远程站点应用程序将在向源表插入记录后发送 TCP 消息。我的应用程序在收到该消息后执行提取。但是我检测到某些记录无法获取,因为在收到 TCP 消息时表(同义词)中不可用。

在 Synonyms 中插入和获取时是否有可能出现竞争条件?

4

1 回答 1

3

同义词的存在(或不存在)没有影响。

如果源应用程序在发送通知之前提交,并且您的应用程序使用默认的已提交事务隔离级别,则您的应用程序将在查询数据库时看到所有已提交的行。我知道的唯一例外是,如果远程数据库是一个 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
于 2012-07-07T18:58:51.013 回答