Как создать материализованное представление для соединения двух разных таблиц базы данных Oracle

Мне нужно создать mview, чтобы получить данные из удаленной базы данных в базу данных назначения с помощью команды обновления.

это мой sql запрос для создания mview:

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 ответ

Решение

tnsnames.ora на сервере, где вы создаете, DBLink должен содержать информацию о подключении к удаленному экземпляру 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))';

Обратите внимание, что создание DBLink с system Пользователь для предоставления материализованных представлений обычному пользователю - плохая идея.

Когда у вас есть 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;
Другие вопросы по тегам