Клонирование pluggable database в Oracle Database 18c Express Edition
Начиная с Oracle Database 12с, поддерживается новая архитектура – Multitenant, которая предоставляет возможность использовать множество баз данных для консолидации их в составе единой главной базы данных. Такое объединение упрощает задачи администрирования баз данных. Единая и главная база данных используется в качестве платформы и называется контейнерная база данных (Container Database – CDB), а база данных из множества работающих в составе контейнерной базы данных называется подключаемой базой данных (Pluggable Database – PDB). Архитектура Multitenat позволяет создать в Oracle Database 18с Express Edition одну CDB базу и до трех PDB баз. По умолчанию после установки Oracle 18c Express Edition создается одна CDB и одна PDB. Название автоматически созданной PDB после установки Oracle Database 18с Express Edition – XEPDB1. Ниже пошагово описывается процесс клонирования подключаемой базы данных XEPDB1 в Oracle Database 18c Express Edition, работающей на виртуальной машине под управлением операционной системы Oracle Linux. Нижеописанные шаги также будут работать с Oracle Database 18c Express Edition, установленной на операционную систему Windows.
Клонирование подключаемой базы данных XEPDB1 может понадобиться для самых различных целей. Например, для создания среды разработки и тестирования.
Cоздание клона подключаемой БД XEPDB1.
Необходимо подключиться к CDB под пользователем sys:
[oracle@dushanbe ~]$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Mon Mar 22 15:44:52 2021 Version 18.4.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0
Проверить список имеющихся подключаемых баз данных (PDB) и их статусы:
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO
Можно увидеть, что подключаемая база данных XEPDB1 открыта и работает в режиме чтения и записи данных (Open mode – read write). Для клонирования надо сперва перевести PDB XEPDB1 в режим монтирования (mount), а потом только чтения (read only).
В режиме mount нельзя вносить изменения в объекты и база становится доступной только для администраторов.
SQL> alter pluggable database XEPDB1 close; Pluggable database altered.
Еще раз проверяется статус подключаемых баз данных. Результат показывает, что PDB XEPDB1 теперь работает в режиме монтирования (mounted):
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
MOUNTED
Затем PDB XEPDB1 (далее XEPDB1) переводится в режим только чтения (read only). Режим read only позволяет совершать запрос, но не позволяет совершать изменения пользователям.
SQL> alter pluggable database XEPDB1 open read only; Pluggable database altered.
Просматривается список PDB и их статусы:
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ ONLY NO
Теперь, когда XEPDB1 в режиме только чтения, можно приступать к созданию непосредственно клона этой базы данных. Клон XEPDB1 будет называться MSU. Для создания клона PDB будет использована команда create pluggable database. Если create pluggable database запустить без параметра file_name_convert или create_file_dest, то можно получить ошибку ORA-65016:
SQL> create pluggable database HI from XEPDB1; create pluggable database HI from XEPDB1 * ERROR at line 1: ORA-65016: FILE_NAME_CONVERT must be specified
Для того, чтобы данная ошибка не возникала, необходимо указать директорию, где будут созданы файлы для новой PDB MSU. Директорию для файлов клона PDB можно указать с помощью одного из двух параметров в команде create pluggable database: file_name_convert или create_file_dest. При указании параметра file_name_convert система сама создает поддиректорию MSU в директории /opt/oracle/oradata/XE:
SQL> create pluggable database MSU from XEPDB1 file_name_convert = ( '/opt/oracle/oradata/XE/XEPDB1', '/opt/oracle/oradata/XE/MSU'); Pluggable database created.
Для параметра create_file_dest необходимо предварительно создать директорию операционной системы, иначе можно получить ошибку:
SQL> create pluggable database HI from XEPDB1 CREATE_FILE_DEST='/opt/oracle/oradata/XE/HI'; create pluggable database HI from XEPDB1 * ERROR at line 1: ORA-65165: missing or invalid path for file creation /opt/oracle/oradata/XE/HI ORA-01262: Stat failed on a file destination directory Linux-x86_64 Error: 2: No such file or directory
Клонирование PDB было запущено с двумя разными параметрами – file_name_convert и create_file_dest. В первом случае клон PDB успешно создался, а во втором случае не создался, т.к. предварительно не была создана директория для его файлов. Если предварительно создать директорию, то команда успешно создаст клон PDB и с помощью параметра create_file_dest. В данном посте клонирование PDB будет осуществлено на примере только одного параметра – file_name_convert.
Проверяются имеющиеся PDB и их статусы :
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ ONLY NO
4 MSU
MOUNTED
Как можно увидеть, появилась новая PDB MSU, находящаяся в режиме монтирования. Основная PDB XEPDB1 находится в режиме read only. Теперь необходимо перевести эти две PDB в режим чтения и записи. Запускается команда, которая открывает все базы данных в режим чтения и записи, кроме шаблонного PDB (PDB$SEED).
SQL> alter pluggable database all except pdb$seed open read write force; Pluggable database altered.
Далее проверяется состояние баз данных:
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ WRITE NO4 MSU
READ WRITE NO
Как видно, PDB XEPDB1 и MSU теперь находятся в режиме чтения и записи. Последним шагом будет сохранение состояния read write для PDB MSU. Параметр save state позволяет вернуть PDB MSU в текущее состояние (read write) после перезагрузки корневой БД – CDB. Другими словами, после перезагрузки CDB будет осуществлен автоматический запуск PDB MSU также как и XEPDB1.
SQL> alter pluggable database MSU save state; Pluggable database altered.
Для создания второго клона подключаемой БД XEPDB1 выполняются следующие действия.
Подключение к CDB под пользователем sys:
[oracle@dushanbe ~]$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Mon Mar 22 15:44:52 2021 Version 18.4.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production Version 18.4.0.0.0
Просматриваются имеющиеся подключаемые базы данных и их статусы:
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ WRITE NO4 MSU
READ WRITE NO
Выполняется перевод PDB XEPDB1 в режим монтирования и проверяется, что она теперь работает в другом режиме (mounted).
SQL> alter pluggable database XEPDB1 close; Pluggable database altered. SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
MOUNTED4 MSU
READ WRITE NO
Затем XEPDB1 переводится в режим read only и снова просматриваются состояние PDB.
SQL> alter pluggable database XEPDB1 open read only; Pluggable database altered. SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ ONLY NO4 MSU
READ WRITE NO
Создается еще один клон базы XEPDB1, который будет называться TTU.
SQL> create pluggable database TTU from XEPDB1 file_name_convert = ( '/opt/oracle/oradata/XE/XEPDB1', '/opt/oracle/oradata/XE/TTU'); Pluggable database created. ERROR at line 1: ORA-65010: maximum number of pluggable databases created
Видно сообщение о том, что клон (еще одна подключаемая БД) создан, однако при этом достигнуто максимально возможное количество (три) подключаемых БД в Oracle Database 18c Express Edition.
Просматриваются все имеющиеся подключаемые БД и видно, что новая PDB TTU создана и работает в режиме mounted:
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ ONLY NO4 MSU
READ WRITE NO 5 TTU MOUNTED
Все PDB кроме PDB$SEED переводятся в режим чтения и записи и проверяются их статусы:
SQL> alter pluggable database all except pdb$seed open read write force; Pluggable database altered. SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
------- --------- ---------- -----------2 PDB$SEED READ ONLY NO
3 XEPDB1
READ WRITE NO4 MSU
READ WRITE NO 5 TTU READ WRITE NO
Сохраняется состояние нового клона для будущего автоматического запуска после перезагрузки CDB:
SQL> alter pluggable database TTU save state; Pluggable database altered.
На этом завершается описание создания двух новых клонов Pluggable Database XEPDB1 в Oracle Database 18c Express Edition.