Как создать PDB PDB
СОЗДАТЬ PDB
«Контейнеры приложений» — это функция версии 12.2. «Контейнер приложения» — это дополнительный компонент CDB, предназначенный для хранения данных и метаданных приложения. CDB может содержать от нуля до нескольких контейнеров приложений. Каждое приложение состоит из конфигурации, метаданных и общих объектов. Таким образом, его можно определить как контейнер общих приложений, в котором могут храниться различные версии одного и того же приложения.
Контейнеры приложений можно создавать различными способами: из PDBD seed, путем клонирования PDB, подключения или отключения PDB, но во всех случаях используется команда CREATE PLUGGABLE DATABASE с включением клаузулы«APPLICATION CONTAINER». Для создания контейнера приложения необходимо подключиться к корневой CDB, которая должна быть открыта в режиме «read write», а имя контейнера приложения должно быть уникальным.
1) Оператор для создания базы данных как контейнера приложений.
В качестве примера мы создадим контейнер приложений для игрушек под названием «toys_root».
CREATE PLUGGABLE DATABASE toys_root AS APPLICATION CONTAINER
ADMIN USER admin identified by ****
ROLES=(CONNECT)
CREATE_FILE_DEST=’/u02/app/oracle/oradata/ORCL/toys_root’;
/
2) С помощью следующего запроса мы можем проверить, какие типы PDB-файлов были созданы в нашей архитектуре.
В результате наш Application PDB будет отображаться PDB «Application root» с значением YES.

3) Открываем базу данных, которую мы только что создали.
alter pluggable database TOYS_ROOT open;
После создания PDBконтейнера приложения мы можем проверить, как осуществляется управление версиями приложений и как эти версии можно реплицировать между различными PDB-контейнерами.
4) Создаем версию приложения из PDB.
Подключившись к PDB , запускаем.
ALTER PLUGGABLE DATABASE application TOYS_APP begin install ‘1.0’;
Тем самым мы указываем, что создается версия приложения, которую мы назовем TOYS_APP, и версия которой будет 1.0.
5) Проверяем, успешно ли создана CDB.
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 (uno number, dos varchar(2));
Table created.
SQL> insert into toys_owner. raul values(1,’r’);
1 row created.
SQL> commit;
Commit complete.
7) Cerramos la instalación de la «aplicación»
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 NORMAL
9) Репликация между контейнерами
Для проведения теста создадим две новые PDB, в данном случае «robots» и «dolls».
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=
‘/u02/app/oracle/oradata/ORCL/toys_root/dolls’;
SQL> alter pluggable database dolls open;
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
2 PDB READ ONLY NO
3 TOYS_ROOT READ WRITE NO
4 PDB1 READ WRITE NO
5 TOYS_ROOT$SEED READ WRITE NO
6ROBOTS READWRITE NO
7DOLLS READWRITE 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;
Session altered.
И выполняем ту же операцию. Синхронизируем приложение:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP SYNC ;
Pluggable database altered.
Проверяем, что таблица была реплицирована:
SQL> desc toys_owner.raul
Name Null? Type
UNO NUMBER
DOS VARCHAR2(2)
SQL> select * from toys_owner.raul;
UNO DO
1 r
В любой момент вы можете узнать состояние вашего APP, каково его текущее состояние и версия
Вы можете проверить это с помощью запроса, подобного следующему, где указано имя APP, его идентификатор, состояние, является ли оно неявным и т. д.
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.
После того, как мы создали и проверили работу Application Container, мы можем создавать разные версии приложения или удалять версию 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;
UNO DOS
---------- --
1 r
2 d
11) Удаление приложения
Чтобы удалить приложение, мы должны выполнить следующие действия:
SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP BEGIN UNINSTALL; Pluggable database altered. SQL> drop user toys_owner cascade; user dropped. SQL> drop tablespace TOYS_TBS INCLUDING CONTENTS AND DATAFILES; tablespace dropped SQL> ALTER PLUGGABLE DATABASE APPLICATION TOYS_APP END UNINSTALL; Pluggable database altered.
В конечном итоге Oracle позволяет нам иметь «версии» различных приложений, которые можно синхронизировать через PDB, обновлять, клонировать и т. д.

