如何创建物化视图来连接两个不同的oracle数据库表

how to create materialized view to connect two different oracle database tables

我需要创建一个 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:could not resolve the connect identifier specified

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

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

谁能帮我解决这个问题?

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

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 中指定的用户架构中的 table。这就是您不应将 system 帐户用于 DBLink 的原因之一。如果 table 不在 DBLink 用户的架构中,则需要限定 table 名称:

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