【问题标题】:How to refresh Materialized View using DB link in Oracle如何使用 Oracle 中的 DB 链接刷新物化视图
【发布时间】:2019-11-25 23:17:46
【问题描述】:

我在 Oracle 中有 3 个模式。第三个架构中有一个物化视图,我需要从第一个架构刷新。

以下是需求的详细说明:

uv1(第一个模式)--> db 链接到nwdb2(第二个模式)--> nwdb3(第三个模式)--> emp_de_mv(MV)

我需要从uv1 刷新emp_de_mv

我已经在 uv1 的 MV 上执行了 SELECTstatement,如下所示,它正在成功运行:

SELECT * FROM nwdb3.emp_de_mv@nwdb2;

我尝试按照here的建议从uv1刷新MV。

EXEC DBMS_MVIEW.refresh('nwdb3.emp_de_mv@nwdb2', 'C');

但它给了我以下错误:

Error starting at line : 25 in command -
EXEC DBMS_MVIEW.refresh('nwdb3.emp_de_mv@nwdb2', 'C')
Error report -
ORA-20000: ORA-00979: illegal reference to remote database
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2994
ORA-06512: at line 1
20000. 00000 -  "%s"
*Cause:    The stored procedure 'raise_application_error'
           was called which causes this error to be generated.
*Action:   Correct the problem as described in the error message or contact
           the application administrator or DBA for more information.

谁能帮我解决上述要求?

请注意,出于安全原因,我将无法在uv1 中创建新的数据库链接。

【问题讨论】:

  • @APC 感谢您的回复。有效。我的问题解决了。但是我仍然很想知道如何在没有 DB 链接的情况下直接从 nwdb2 访问 nwdb3 以及为什么我不能从 uv1 直接访问 nwdb2 而没有 DB 链接?

标签: oracle distributed-computing materialized-views


【解决方案1】:

ORA-20000: ORA-00979: illegal reference to remote database

您收到此错误消息是因为 the documentation for refresh() states:

“这些物化视图可以位于不同的架构中,并具有不同的主表或主物化视图。但是,所有列出的物化视图都必须在您的本地数据库中。”

解决方案是通过跨数据库链接调用 DBMS_MVIEW 对远程数据库执行刷新:

EXEC DBMS_MVIEW.refresh@nwdb2('nwdb3.emp_de_mv', 'C'); 

我如何能够在没有 DB 链接的情况下直接从 nwdb2 访问 nwdb3?为什么我不能直接从 uv1 访问 nwdb2,没有 DB 链接?

这是你的环境,所以我不 - 不能 - 了解架构。您将nwdb2 描述为模式,但也将其描述为数据库链接。我猜你有一个名为nwdb2 的数据库链接,它连接到一个也称为nwdb2 的模式,该模式在远程数据库服务器中具有另一个模式nwdb3 的权限。在远程服务器上nwdb2 可以在没有数据库链接的情况下引用nwdb3 模式中的对象,因为这些模式彼此是本地的。但nwdb1 必须使用数据库链接,因为它不是任一架构的本地链接。

【讨论】:

    猜你喜欢
    • 2012-07-18
    • 2021-11-11
    • 2016-06-14
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2017-01-24
    • 2010-09-27
    • 2018-04-20
    相关资源
    最近更新 更多