СОЗДАНИЕ БАЗЫ ДАННЫХ ПРИЛОЖЕНИЯ PDB
Контейнеры приложений" - это функция версии 12 версии 2 (12.2). Контейнер приложений - это дополнительный компонент CDB для хранения данных и метаданных приложения. CDB имеет 0 или более контейнеров приложений. Каждое приложение состоит из конфигурации, метаданных и общих объектов. Поэтому мы можем определить его как общий контейнер приложений, в котором могут быть размещены различные версии одного и того же приложения.
Контейнеры приложений могут быть созданы различными способами: из семян PDBD, клонированием PDBS, pluggind или unplugged from PDB, но во всех случаях используется команда CREATE PLUGGABLE DATABASE, включая пункт "APPLICATION CONTAINER". Для создания контейнера приложений необходимо подключиться к корневой CDB, она должна быть открыта в режиме "чтение-запись", а имя контейнера приложений должно быть уникальным.
1) Заявление о создании базы данных в виде контейнера приложений.
В качестве примера создадим контейнер приложений toys, который назовем "toys_root".
CREATE PLUGGABLE DATABASE toys_root AS APPLICATION CONTAINER
ADMIN USER admin identified by ****
ROLES=(CONNECT)
oracle;
/
2) С помощью следующего запроса мы можем проверить, какие PDB мы создали в нашей архитектуре.
Результат покажет, что наша PDB Application является "корнем приложения" и имеет значение YES.

3) Открываем только что созданную базу данных.
alter подключаемая база данных TOYS_ROOT open;
После создания PDB контейнера приложений мы можем проверить, как осуществляется управление версиями APP и как эти версии могут быть реплицированы между различными PDBS.
4) Создаем прикладную версию PDB.
Подключившись к PDB TOYS_ROOT, мы выполняем.
ALTER PLUGGABLE DATABASE application TOYS_APP begin install '1.0';
Этим мы указываем ему создать версию приложения, которую мы назовем TOYS_APP и версия которой будет 1.0.
5) Проверяем правильность создания CBD.
select app_name, app_version, app_status
from dba_applications
where app_name='TOYS_APP';

6) Создаем тестовый tbs, пользователя и предоставляем необходимые права:
set echo on
create tablespace toys_tbs datafile size 100M autoextend on next 10M maxsize 200M;
create user toys_owner identified by **** container=all;
grant create session, dba to toys_owner;
alter user toys_owner default tablespace toys_tbs;
Для проверки правильности репликации создадим новую таблицу. Это будет версия 1.0. нашего приложения TOYS_APP.
SQL> CREATE TABLE toys_owner.raul (one number, two varchar(2));
Таблица создана.
SQL> insert into toys_owner.raul values(1,'r');
Создана 1 строка.
SQL> commit;
Commit complete.
7) Закройте установку "приложения".
ALTER PLUGGABLE DATABASE application TOYS_APP end install '1.0';
8) Теперь мы проверяем статус заявки.
select app_name, app_version, app_status
from dba_applications
where app_name='TOYS_APP';
APP_NAME APP_VERSION APP_STATUS
-------------------------------
TOYS_APP 1.0 NORMAL9) Межконтейнерная репликация
Для теста мы создадим две новые PDBS, в данном случае "роботы" и "куклы".
CREATE PLUGGABLE database robots
admin user admin identified by ***
CREATE_FILE_DEST=
'/u02/app/oracle/oradata/ORCL/toys_root/robots'
Pluggable database created.
SQL> alter pluggable database robots open;
Pluggable database altered.CREATE PLUGGABLE database dolls
admin user admin identified by ***
CREATE_FILE_DEST=
oracle;
SQL> alter pluggable database dolls open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB$SEED READ ONLY NO
3 TOYS_ROOT READ WRITE NO
4 PDB1 READ WRITE NO
5 TOYS_ROOT$SEED READ WRITE NO 6 ROBOTS READ WRITE NO
7 DOLLS READ WRITE NO
Теперь мы переходим во вновь созданные контейнеры, чтобы выполнить синхронизацию нашего приложения.
Мы переходим в контейнер ROBOTS и обновляем приложение, в данном случае tst_app
SQL> ALTER SESSION SET CONTAINER=ROBOTS;
Session altered.
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Pluggable database altered.Мы проверяем, что таблица была обновлена
SQL> show con_name
CON_NAME
------------------------------
ROBOTS
SQL> DESC TOYS_OWNER.RAUL
Name Null? Type
---------------------------------- -------- -----------------------
UNO NUMBER
DOS VARCHAR2(2)
SQL> select * from toys_owner.raul;
UNO DO
---------- --
1 r
Выполним ту же операцию синхронизации для другой PDB.
SQL> ALTER SESSION SET CONTAINER=DOLLS;
Сессия изменена.
И мы выполняем ту же операцию. Синхронизируем приложение:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Подключаемая база данных изменена.
Мы проверяем, что таблица была реплицирована:
SQL> desc toys_owner.raul
Имя Null? Тип
UNO NUMBER
DOS VARCHAR2(2)
SQL> select * from toys_owner.raul;
UNO DO
1 r
В любой момент вы сможете узнать статус вашего APP, его состояние и версию
Проверить это можно с помощью запроса, аналогичного следующему, где указывается имя APP, его id, статус, является ли он неявным или нет и т.д.
select app_name, app_version, app_id, app_status,
app_implicit implicit
from dba_applications;
APP_NAME APP_VERSION APP_ID APP_STATUS I ---------------------------------------- ------------------------------ ---------- ------------ - TOYS_APP 1.0 2 NORMAL N
10) Обновление нашего APP.
Создав и протестировав работу контейнера приложений, мы можем создавать различные его версии или удалять версию APP, если она утратила свою актуальность.
Для обновления версии нашего APP необходимо использовать команды begin upgrade / end upgrade, разумеется, в пределах APP_ROOT.
SQL> alter pluggable database application TOYS_APP1 begin upgrade '1.0' to '1.1';
Pluggable database altered.
SQL> insert into toys_owner. raul values(2,'d');
1 row created.
SQL> commit;
Commit complete.
SQL> alter pluggable database application TOYS_APP1 end upgrade;
Pluggable database altered.
SQL> alter session set container=DOLLS;
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP1 SYNC;
Pluggable database altered.
SQL> SELECT * FROM TOYS_OWNER.RAUL;
ОДИН ДВА
---------- --
1 r
2 d11) Деинсталляция приложения
Для удаления приложения необходимо выполнить следующие действия:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP BEGIN UNINSTALL; Подключаемая база данных изменена. SQL> drop user toys_owner cascade; пользователь удален. SQL> drop tablespace TOYS_TBS INCLUDING CONTENTS AND DATAFILES; табличное пространство удалено SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP END UNINSTALL; Подключаемая база данных изменена.
В конечном итоге, Oracle позволяет Oracle иметь «версии» различных приложений, которые могут быть синхронизированы через PDB, обновлены, клонированы и т. д.





