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

时间:2018-03-26 07:16:02

标签: oracle ddl materialized-views

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

这是我创建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文件?

有谁可以帮我解决这个问题?

1 个答案:

答案 0 :(得分:2)

创建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;