Skip to content

4. Использование Dblink#

Dblink - это настроенное соединение между двумя базами. Имя объекта и Dblink могут составлять имя объекта в удаленной базе данных.

В данном примере показывается создание линка между двумя базами DBVM - DBVM.

Создаем и запускаем два контейнера с именами dbvm-redos-pr (primary) и dbvm-redos-by (standby):

docker run --name dbvm-redos-pr -it --rm -e MODE=shell -u altibase registry.dbvm.com/dbvm-redos-7.3
docker run --name dbvm-redos-by -it --rm -e MODE=shell -u altibase registry.dbvm.com/dbvm-redos-7.3

4.1.2. ИП-адреса запущенных контейнеров#

Определяем ИП-адреса этих контейнеров:

docker inspect dbvm-redos-pr | grep IPAddress
               "IPAddress": "10.88.0.68",
docker inspect dbvm-redos-by | grep IPAddress
               "IPAddress": "10.88.0.69",

Для данного запуска ИП-адреса контейнеров такие:
dbvm-redos-pr 10.88.0.68
dbvm-redos-by 10.88.0.69

4.1.3. Настраиваем файлы конфигурации в контейнерах#

Эта настройка необходима для создания линка в dbvm-redos-pr для ресурса dbvm-redos-by. В контейнере dbvm-redos-pr выполняем команды в оболочке:

altibase@0fe38c7c37f3:~$ pwd
/home/altibase

altibase@0fe38c7c37f3:~$ sed -i -e "s/127.0.0.1:4111/10.88.0.69:20300/g" altibase_home/conf/dblink.conf

Здесь:
altibase_home/conf/dblink.conf - конфигурационный файл
127.0.0.1:4111 - ИП-адрес и порт, заданные в шаблоне
10.88.0.69:20300 - ИП-адрес и порт удаленной базы в контейнере dbvm-redos-by

Эта настройка необходима для создания линка в dbvm-redos-by для ресурса dbvm-redos-pr. В контейнере dbvm-redos-by выполняем команды в оболочке:

altibase@cff3ca7209a4:~$ pwd
/home/altibase

altibase@cff3ca7209a4:~$ sed -i -e "s/127.0.0.1:4111/10.88.0.68:20300/g" altibase_home/conf/dblink.conf

Здесь:
altibase_home/conf/dblink.conf - конфигурационный файл
127.0.0.1:4111 - ИП-адрес и порт, заданные в шаблоне
10.88.0.68:20300 - ИП-адрес и порт удаленной базы в контейнере dbvm-redos-pr

4.1.4. Перезапускаем процесс Линкер в БД#

Подключаемся к базе в каждом контейнере (dbvm-redos-pr и dbvm-redos-by), выполнив команду:

$ isql -sysdba -u sys -p manager

В запущенном клиенте базы в каждом контейнере (dbvm-redos-pr и dbvm-redos-by) выполняем следующие команды:

-- dbvm-redos-pr (10.88.0.68)
-- dbvm-redos-by (10.88.0.69)
-- Перезапускаем процесс Линкер
iSQL(sysdba)> alter database linker stop;
iSQL(sysdba)> alter database linker start;

В клиенте, подключенном к базе, в контейнере dbvm-redos-pr выполняем команду:

-- dbvm-redos-pr (10.88.0.68)
-- Создаем Dblink
CONNECT sys/manager as sysdba;
CREATE PRIVATE DATABASE LINK link1  CONNECT TO sys IDENTIFIED BY manager  USING target1;
Create success.

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команду:

-- dbvm-redos-by (10.88.0.69)
-- Создаем Dblink
CONNECT sys/manager as sysdba;
CREATE PRIVATE DATABASE LINK link1  CONNECT TO sys IDENTIFIED BY manager  USING target1;
Create success.

В клиенте, подключенном к базе, в контейнере dbvm-redos-pr выполняем команды:

-- dbvm-redos-pr (10.88.0.68)
-- Работаем с Dblink
iSQL(sysdba)> set vertical on;

iSQL(sysdba)> select 'local', DB_SIGNATURE from v$database;
'LOCAL'      : local
DB_SIGNATURE : FE6E8C43631F-692DC29B:000022F4-4F08E667

1 row selected.

iSQL(sysdba)> select 'remote', DB_SIGNATURE from v$database@link1;
'REMOTE'     : remote
DB_SIGNATURE : 9A1BEF22185E-692DBEAA:0001FF26-414C3D27

1 row selected.

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команды:

-- dbvm-redos-by (10.88.0.69)
-- Работаем с Dblink
iSQL(sysdba)> set vertical on;

iSQL(sysdba)> select 'local', DB_SIGNATURE from v$database;
'LOCAL'      : local
DB_SIGNATURE : 9A1BEF22185E-692DBEAA:0001FF26-414C3D27

1 row selected.

iSQL(sysdba)> select 'remote', DB_SIGNATURE from v$database@link1;
'REMOTE'     : remote
DB_SIGNATURE : FE6E8C43631F-692DC29B:000022F4-4F08E667

1 row selected.

В клиенте, подключенном к базе, в контейнере dbvm-redos-pr выполняем команду:

-- dbvm-redos-pr (10.88.0.68)
iSQL(sysdba)> drop private database link link1;
Drop success.

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команду:

-- dbvm-redos-by (10.88.0.69)
iSQL(sysdba)> drop private database link link1;
Drop success.

В данном примере показывается создание линка между двумя базами Oracle - DBVM.

Подготавливаем контейнер с СУБД Oracle. Для этого выполняем следующие команды. Создаем Dockerfile следующего содержимого:

-- Dockerfile-oracle
FROM gvenzl/oracle-xe:21

EXPOSE 1521/tcp

Этот файл необходим для сборки контейнера с СУБД Oracle из готового образа http://hub.docker.com/r/gvenzl/oracle-xe, но с открытым портом 1521.

Далее собираем локальный образ контейнера:

docker build -t oracle-xe-expose:21 -f Dockerfile-oracle .

Проверяем наличие образа контейнера в локальном реестре:

docker image ls | grep oracle

oracle-xe-expose:21 ...

Создаем и запускаем контейнер с именем oracle-xe-pr (primary):

docker run --name oracle-xe-pr -d --rm -e ORACLE_PASSWORD=manager oracle-xe-expose:21

Подключаемся к контейнеру oracle-xe-pr:

docker exec -ti oracle-xe-pr /bin/bash

Подключаемся к базе XE:

sqlplus / as sysdba

Создаем в базе пользователя:

-- oracle-xe-pr (10.88.0.68)
-- Создаем пользователя
create user HH identified by HH;
grant create session to HH;
grant select any dictionary to HH;

Создаем и запускаем контейнер с именем dbvm-redos-by (standby):

docker run --name dbvm-redos-by -it --rm -e MODE=shell -u altibase registry.dbvm.com/dbvm-redos-7.3

4.2.2. ИП-адреса запущенных контейнеров#

Определяем ИП-адреса этих контейнеров:

docker inspect oracle-xe-pr | grep IPAddress
               "IPAddress": "10.88.0.68",
docker inspect dbvm-redos-by | grep IPAddress
               "IPAddress": "10.88.0.69",

Для данного запуска ИП-адреса контейнеров такие:
oracle-xe-pr 10.88.0.68
dbvm-redos-by 10.88.0.69

4.2.3. Настраиваем файлы конфигурации в контейнерах#

Эта настройка необходима для создания линка в dbvm-redos-by для ресурса oracle-xe-pr. В контейнере dbvm-redos-by выполняем команды в оболочке:

altibase@0fe38c7c37f3:~$ pwd
/home/altibase

altibase@0fe38c7c37f3:~$ sed -i -e "s/127.0.0.1:4113:ORCL/10.88.0.68:1521:XE/g" altibase_home/conf/dblink.conf
altibase@0fe38c7c37f3:~$ sed -i -e "s/user2/HH/g" altibase_home/conf/dblink.conf
altibase@0fe38c7c37f3:~$ sed -i -e "s/pwd2/HH/g" altibase_home/conf/dblink.conf

Здесь:
altibase_home/conf/dblink.conf - конфигурационный файл
127.0.0.1:4111 - ИП-адрес и порт, заданные в шаблоне
10.88.0.68:1521 - ИП-адрес и порт удаленной базы в контейнере oracle-xe-pr

4.2.4. Перезапускаем процесс Линкер в БД#

Подключаемся к базе в контейнере dbvm-redos-by, выполнив команду:

$ isql -sysdba -u sys -p manager

В запущенном клиенте базы в контейнере dbvm-redos-by выполняем следующие команды:

-- dbvm-redos-by (10.88.0.69)
-- Перезапускаем процесс Линкер
iSQL(sysdba)> alter database linker stop;
iSQL(sysdba)> alter database linker start;

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команду:

-- dbvm-redos-by (10.88.0.69)
-- Создаем Dblink
CONNECT sys/manager as sysdba;
CREATE PRIVATE DATABASE LINK link1  CONNECT TO HH IDENTIFIED BY HH  USING ora1;
Create success.

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команды:

-- dbvm-redos-by (10.88.0.69)
-- Проверяем Dblink
iSQL(sysdba)> set vertical on;

iSQL(sysdba)> select 'local', DB_SIGNATURE from v$database;
'LOCAL'      : local
DB_SIGNATURE : 9A1BEF22185E-692DBEAA:0001FF26-414C3D27

1 row selected.

iSQL(sysdba)> select 'remote', DBID from v$database@link1;
'REMOTE' : remote
DBID     : 3062126794 

1 row selected.

В клиенте, подключенном к базе, в контейнере dbvm-redos-by выполняем команду:

-- dbvm-redos-by (10.88.0.69)
iSQL(sysdba)> drop private database link link1;
Drop success.