【问题标题】:how to store db link results in oracle cache如何将数据库链接结果存储在oracle缓存中
【发布时间】:2017-10-18 11:43:30
【问题描述】:

系统中有多个oracle DB服务器。

假设 oracle Db1 是具有一个主表的主服务器,其余的 oracle Db 服务器使用 DB 链接连接到该主服务器。 那么有没有办法将从主数据库获取的值缓存到目标数据库中,以便每次保存数据库链接调用时都可以从本地 oracle 数据库缓存中获取值。

有哪些可用的缓存机制(如果有的话)及其优缺点?

此缓存是否在主动-被动节点设置中无缝工作,或者需要任何额外的配置设置/代码?

当主数据库值发生变化时,消费者数据库将被通知更改,以便从缓存中刷新数据。所以任何事件驱动机制都是可能的。

环境详细信息 - Oracle 11g 数据库版本 1,Unix。

希望在“HowTo”上提供示例代码 sn-p 的输入。谢谢

【问题讨论】:

  • MATERIALIZED VIEW 更接近您的预期。但是它在计算意义上并不完全是缓存。

标签: database oracle caching oracle11g


【解决方案1】:

当数据库链接暂时脱机时允许应用程序继续工作的一种方法是使用物化视图 (MV)。

但是,这不像缓存那样工作,因为 MV 需要按计划手动刷新(例如每 5 分钟一次)。如果远程数据库上的数据发生变化,本地数据库在刷新MV之前是看不到新结果的。

例如:

create materialized view tablename_mv
  refresh complete on demand
  as select * from remotetablename@dblinkname;

然后定期刷新它:

begin
  dbms_mview.refresh('TABLENAME_MV');
end;

【讨论】:

  • 感谢您的意见。在主数据库和其他数据库之间共享的 T 数据非常少(单列 5-10 行)。那么结果缓存会是一个好的选择吗?
  • 如果你说的是 SQL 结果缓存,那是行不通的,因为缓存不会根据数据库链接的状态而失效。
  • 由于您的数据集非常小,我可能会选择刷新间隔较快的 MV,例如1 分钟。
  • 再次感谢!应考虑您建议的选项。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
相关资源
最近更新 更多