{2 マルチテナント}PDBを作成

 

https://docs.oracle.com/cd/F19136_01/multi/creating-a-pdb-from-scratch.html#GUID-BCC15DB0-FC09-4D1A-90ED-B6DB7A2A78AE
https://docs.oracle.com/cd/F19136_01/multi/cloning-a-pdb.html#GUID-1251F297-D839-4F46-9038-9E89AFBE5CA5
https://docs.oracle.com/cd/F19136_01/multi/plugging-in-a-pdb.html#GUID-5CFC53B9-C457-460A-92A5-DAFDC472F458
https://docs.oracle.com/cd/F19136_01/multi/relocating-a-pdb.html#GUID-6A85B92C-0AE6-4737-BDBD-EA8256C09E55


show con_name
show pdbs
select * from V$PDBS;
select * from cdb_pdbs;


     シードPDBから作成          (orcl:pdb11)

CREATE PLUGGABLE DATABASE pdb11 ADMIN USER pdbadm IDENTIFIED BY oracle
FILE_NAME_CONVERT= ('/oradata/orcl/pdbseed/', '/oradata/orcl/pdb11/');


     シードPDBから作成          (PROD1:pdb21,pdb22,pdb23)

CREATE PLUGGABLE DATABASE pdb21 ADMIN USER pdbadm IDENTIFIED BY oracle;
CREATE PLUGGABLE DATABASE pdb22 ADMIN USER pdbadm IDENTIFIED BY oracle;
CREATE PLUGGABLE DATABASE pdb23 ADMIN USER pdbadm IDENTIFIED BY oracle;

 

     ローカルPDBのコールドクローニング  (orcl:pdb11 → orcl:pdb12)

CDBはローカルUNDOモードでない場合、ソースPDBは読取り専用オープン・モードである必要があります。
CDBがARCHIVELOGモードでない場合、ソースPDBは読取り専用オープン・モードである必要があります。

archive log list

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM   DATABASE_PROPERTIES
WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';


alter session set PDB_FILE_NAME_CONVERT='/oradata/orcl/pdb11/', '/oradata/orcl/pdb12/';
CREATE PLUGGABLE DATABASE pdb12 FROM pdb11;

※CDBが共有UNDOモード、非ARCHIVELOGモード、ソースPDBがread writeの場合はエラー発生(ORA-65035: PDB11からプラガブル・データベースを作成できません)
※CDBが共有UNDOモード、ARCHIVELOGモード、ソースPDBがread writeの場合はエラー発生(ORA-65035: PDB11からプラガブル・データベースを作成できません)

alter pluggable database pdb11 close;
alter pluggable database pdb11 open read only;


※作成した直後で一度もオープンしていないPDBをソースとしてクローニングしようとすると以下のエラーとなる
ORA-65036: プラガブル・データベースPDB11は必要なモードでオープンされていません

 

     ローカルPDBのホットクローニング  (orcl:pdb11 → orcl:pdb13)

alter session set PDB_FILE_NAME_CONVERT='/oradata/orcl/pdb11/', '/oradata/orcl/pdb13/';
CREATE PLUGGABLE DATABASE pdb13 FROM pdb11;


     リモートPDBのクローニング  (PROD1:pdb21 → orcl:pdb14)

cdh
cd network/admin

vim listener.ora


LISTENER_PROD1 =
  (ADDRESS_LIST=
       (ADDRESS=(PROTOCOL=tcp)(HOST=mmm111)(PORT=1521)))

SID_LIST_LISTENER_PROD1=
   (SID_LIST=
       (SID_DESC=
          (GLOBAL_DBNAME=PROD1.example.com)
          (SID_NAME=PROD1)
          (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)))

lsnrctl start LISTENER_PROD1
lsnrctl status LISTENER_PROD1

vim tnsnames.ora

PROD1=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm111)(PORT=1521))
  (CONNECT_DATA= 
     (SERVICE_NAME=PROD1.example.com)))

create database link PROD1 connect to system identified by oracle using 'PROD1';

mkdir -p /oradata/orcl/pdb14
alter session set DB_CREATE_FILE_DEST='/oradata/orcl/pdb14';

CREATE PLUGGABLE DATABASE pdb14 FROM pdb21@PROD1;


※下記エラー発生
行1でエラーが発生しました。:
ORA-17628: Oracleエラー1031がリモートOracleサーバーから返されました ORA-01031:
権限が不足しています
→ ソースPDBで下記実行してエラー解消
grant create pluggable database to system container=all;

 

 

     リモート非CDBのクローニング  (PROD2 → orcl:pdb15)

vim listener.ora


LISTENER_PROD2 =
  (ADDRESS_LIST=
       (ADDRESS=(PROTOCOL=tcp)(HOST=mmm111)(PORT=1522)))

SID_LIST_LISTENER_PROD2=
   (SID_LIST=
       (SID_DESC=
          (GLOBAL_DBNAME=PROD2.example.com)
          (SID_NAME=PROD2)
          (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)))

lsnrctl start LISTENER_PROD2
lsnrctl status LISTENER_PROD2

vim tnsnames.ora

PROD2=
  (DESCRIPTION= 
  (ADDRESS=(PROTOCOL=tcp)(HOST=mmm111)(PORT=1522))
  (CONNECT_DATA= 
     (SERVICE_NAME=PROD2.example.com)))

-- PROD2で実行
alter system set local_listener = '(ADDRESS = (PROTOCOL=TCP)(HOST=mmm111)(PORT=1522))';
show parameter listen
grant create pluggable database to system;

 

create database link PROD2 connect to system identified by oracle using 'PROD2';

select * from v$instance@PROD2;


CREATE PLUGGABLE DATABASE pdb15 FROM PROD2@PROD2
  FILE_NAME_CONVERT = ('/oradata/PROD2/', '/oradata/orcl/pdb15/');


alter session set container=pdb15;

@?/rdbms/admin/noncdb_to_pdb.sql

 


     切断したPDBxmlベースで接続          (PROD1:pdb21 → orcl:pdb16)

select * from v$pdbs;
alter pluggable database pdb21 close immediate;

ALTER PLUGGABLE DATABASE pdb21 UNPLUG INTO '/oradata/PROD1/pdb21.xml';

mkdir -p /oradata/orcl/pdb16
alter session set DB_CREATE_FILE_DEST='/oradata/orcl/pdb16';

CREATE PLUGGABLE DATABASE pdb16 USING '/oradata/PROD1/pdb21.xml
  COPY ;

 


     切断したPDBPDBアーカイブベースで接続          (PROD1:pdb22 → orcl:pdb17)

select * from v$pdbs;
alter pluggable database pdb22 close immediate;

ALTER PLUGGABLE DATABASE pdb22 UNPLUG INTO '/oradata/PROD1/pdb22.pdb';

mkdir -p /oradata/orcl/pdb17
alter session set DB_CREATE_FILE_DEST='/oradata/orcl/pdb17';

CREATE PLUGGABLE DATABASE pdb17 USING '/oradata/PROD1/pdb22.pdb
  COPY ;


     PDBの再配置          (PROD1:pdb23 → orcl:pdb18)

-- PROD1で実行
grant create pluggable database to system container=all;
grant sysoper to system container=all;

archive log list

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM   DATABASE_PROPERTIES
WHERE  PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';

 


mkdir -p /oradata/orcl/pdb18
alter session set DB_CREATE_FILE_DEST='/oradata/orcl/pdb18';

CREATE PLUGGABLE DATABASE pdb18 FROM pdb23@PROD1 RELOCATE;