gpt4 book ai didi

oracle - 外部数据库上的物化 View 无法在指定时间刷新 - SQL*Net more data from dblink

转载 作者:行者123 更新时间:2023-12-02 02:54:14 34 4
gpt4 key购买 nike

我们使用在 Oracle 上运行的基于 Web 的服务。他们严格规定仅允许 SELECT-only ODBC 访问。我们所做的一些报告并不能很好地由公司提供的 View 来解释,因此我们使用 Oracle 11g 的 Express 版本设置了 db_link,并使用刷新将一些更重要的查询重写为物化 View :指定每小时重新运行查询的设置,这对于我们的目的来说足够新了。到目前为止一切都很好。

我注意到有些MV会停止刷新,背后没有真正的模式。进一步调查发现,外部数据库(我们通过 db_link 连接到的数据库)有时不会完成查询,并且刷新过程耐心地等待事件“SQL*Net more data”无限期地从 dblink' 开始。

这是我运行的查询,用于获取有关卡住的刷新 session 和似乎卡住的刷新语句的三个 session 的数据:

select a.username, a.osuser, a.sid, a.serial#, b.spid, a.seconds_in_wait, 
a.event, a.state, a.wait_class
from v$session a, v$process b
where a.paddr = b.addr
and a.seconds_in_wait > 500 and a.username is not null;

USERNAME OSUSER SID SERIAL# SPID SECONDS_IN_WAIT EVENT STATE WAIT_CLASS
KIPP_NWK SYSTEM 27 7904 2704 161991 SQL*Net more data from dblink WAITING Network
KIPP_NWK SYSTEM 35 2469 3880 139489 SQL*Net more data from dblink WAITING Network
KIPP_NWK SYSTEM 37 6051 1408 40860 SQL*Net more data from dblink WAITING Network

我认为我的问题是“关于定期(例如每小时)扫描事件类型“来自 dblink 的更多数据”的卡住 session 并终止它们的脚本有什么建议吗?”对我来说,期望的行为是这种刷新更具弹性 - 如果超时,我希望它重新开始并尝试,再试一次......

我认为弄清楚外部数据库停止执行这些查询的原因不会那么富有成效——提供商提供了选择权限,但很清楚不想支持/解决出现的任何问题。

我读到了有关设置idle_time并更改sqlnet.ora文件中设置的SQLNET.EXPIRE_TIME的信息 - 但我不明白这是正确的方法,因为连接并不空闲,它们处于事件状态但无限期地等待,因为以及这些 session 是由数据库本身发起的复杂因素。

如何使此刷新更有弹性/自动终止这些等待已久的刷新?

最佳答案

不要仅通过 dblink 连接来对远程 Oracle 实例上的 mat View 执行刷新。只需设置一个调度程序作业即可在与 View 相同的实例上启动刷新。

您不需要打开连接并等待刷新完成。这更像是一项自动化管理工作,而不是外部客户端应该启动和照顾的工作。如果需要检查其状态,可以检查 dba_scheduler_jobs、dba_scheduler_job_log、dba_scheduler_run_details、all_scheduler_running_jobs 等(不止这些,但这些会告诉你很多信息)。

参见here一些很好的例子。如果您使用的是 11g,还有其他增强功能。

关于oracle - 外部数据库上的物化 View 无法在指定时间刷新 - SQL*Net more data from dblink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735179/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com