【问题标题】:how to create materialized view to connect two different oracle database tables如何创建物化视图来连接两个不同的oracle数据库表
【发布时间】:2018-09-04 06:24:33
【问题描述】:

我需要创建一个 mview 以使用刷新命令将数据从远程数据库获取到目标数据库。

这是我创建 mview 的 sql 查询:

CREATE DATABASE LINK SI_DB
    CONNECT TO SYSTEM IDENTIFIED BY password
    USING 'SI_DEV';

这是我的 tns.ora 文件:

SI_DEV=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = servidor)(PORT = 1521))
)
(CONNECT_DATA =
(SID = MSQL)
)
(HS=OK)
)

我收到以下错误:

ORA-12154: TNS: 无法解析指定的连接标识符

我不知道如何为远程目标创建 mview。

我们是否需要将目标或远程数据库放入 .or 文件中?

谁能帮我解决这个问题?

【问题讨论】:

  • 使用service_name instead of sid

标签: oracle ddl materialized-views


【解决方案1】:

您创建 DBLink 的服务器上的 tnsnames.ora 需要包含到远程 Oracle 实例的连接信息。您还可以通过在创建 dblink 时提供连接描述符来创建 DBLink,而无需更改该服务器上的 tnsnames.ora

CREATE PUBLIC DATABASE LINK SI_DB
  CONNECT TO some_user
  IDENTIFIED BY some_password
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = servidor)(PORT = 1521)) ) (CONNECT_DATA = (SID = MSQL) ) (HS=OK))';

请注意,使用 system 用户创建 DBLink 以向普通用户启用物化视图是一个坏主意。

拥有 DBLink 后,您可以使用以下方法创建 mview:

create materialize view foobar
as
select *
from the_table@si_db;

请注意,the_table 引用了 DBLink 中指定的用户架构中的表。这就是您不应将system 帐户用于DBLink 的原因之一。如果表不在 DBLink 用户的模式中,则需要限定表名:

create materialize view foobar
as
select *
from the_user.the_table@si_db;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多