Как создать материализованное представление для соединения двух разных таблиц базы данных 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;