きさま!見ているなッ!!

【Oracle】既存PDBのクローニングで新規PDBを作成する

  • 2019-09-04
  • 2019-09-05
  • Oracle

プラガブル・データベース(PDB)を作成する手法は、いくつかあります。

今回は、「既存 PDB のクローニングによる PDB の作成」について、ご紹介します。

環境

・環境情報

OSRDBMS
CentOS 7.6Oracle Database 12c R2 Enterprise Edition

・CDB 情報

データベース名CDB
データベースタイプ単一インスタンス
アーキテクチャマルチテナント
データベース記憶域ローカル・ストレージ
高速リカバリ領域ローカル・ストレージ
UNDOモードローカル
データベース・ログ・モードアーカイブ・モード

・既存 PDB 情報

PDB名PDB1
PDBローカル管理者PDB1ADM
PDBのデータファイルの場所/u01/app/oracle/oradata/pdb1/
オープン・モード読取り/書込みモード

・今回作成する PDB 情報

PDB名PDB2
PDBローカル管理者PDB1ADM ※1
PDBのデータファイルの場所/u01/app/oracle/oradata/pdb2/

※1 既存のローカル管理者がコピーされます。

既存 PDB の作成については、こちらの記事をどうぞ。

データベース作成

環境変数の設定

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
export ORACLE_HOSTNAME=testdb.oracle12c.jp
export ORACLE_SID=cdb

必要な環境変数を設定します。

環境変数設定値説明
ORACLE_BASE/u01/app/oracleOracleディレクトリ・ツリーのルート
ORACLE_HOME/u01/app/oracle/product/12.2.0/dbhome_1Oracleソフトウェアのインストール先
ORACLE_HOSTNAMEtestdb.oracle12c.jpPCのホスト名
ORACLE_SIDcdbインスタンス識別子(SID)

CDBルートに接続

$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on 水 9月 4 02:44:10 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.



Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
に接続されました。
SQL> 
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL>

現在のコンテナが CDB ルートであることを確認します。

初期化パラメータの確認

SQL> show parameter DB_CREATE_FILE_DEST

NAME                     TYPE      VALUE
------------------------ --------- --------
db_create_file_dest      string

SQL> 
SQL> show parameter PDB_FILE_NAME_CONVERT

NAME                     TYPE      VALUE
------------------------ --------- --------
pdb_file_name_convert    string

SQL>

PDB のファイル作成場所・方法(OMF 使用可否)の設定を確認します。

今回は、FILE_NAME_CONVERT 句を使用して PDB を作成するので、上記は未設定で構いません。

クローニングによるデータベース(PDB)作成

SQL> CREATE PLUGGABLE DATABASE pdb2 FROM pdb1
  2  FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/pdb1/', '/u01/app/oracle/oradata/pdb2/')
  3  ;

プラガブル・データベースが作成されました。

SQL>

FROM 句でクローニング元「pdb1」を指定します。

FILE_NAME_CONVERT 句により、/u01/app/oracle/oradata/pdb1/ から /u01/app/oracle/oradata/pdb2/ にファイルがコピーされます。

PDB名PDB2
PDBローカル管理者PDB1ADM ※1
PDBのデータファイルの場所/u01/app/oracle/oradata/pdb2/

※1 既存のローカル管理者がコピーされます。

データをクローニングしない場合は、「NO DATA 句」を使用します。

データベース(PDB)をオープンする

SQL> set lin 1000
SQL> set pages 100
SQL> col name for a30
SQL> SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ------------------------------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           MOUNTED

SQL>

作成したばかりの PDB は、マウント状態です。

SQL> ALTER PLUGGABLE DATABASE pdb2 OPEN;

プラガブル・データベースが変更されました。

SQL> 
SQL> SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE
------------------------------ ------------------------------
PDB$SEED                       READ ONLY
PDB1                           READ WRITE
PDB2                           READ WRITE

SQL>

読取り/書込みモードでオープンしましょう。

PDBに接続

SQL> ALTER SESSION SET CONTAINER = pdb2;

セッションが変更されました。

SQL> show con_name

CON_NAME
------------------------------
PDB2

SQL>

PDB に接続して、確認作業をします。

データベース確認

V$PDBS

SQL> set lin 1000
SQL> col name for a20
SQL> col open_mode for a15
SQL> SELECT name, open_mode FROM v$pdbs;

NAME                 OPEN_MODE
-------------------- ---------------
PDB2                 READ WRITE

SQL>

読取り/書込みモードでオープンしています。

V$CONTAINERS

SQL> set lin 1000
SQL> col name for a10
SQL> SELECT name, con_id FROM v$containers ORDER BY con_id;

NAME       CON_ID
---------- ----------
PDB2       4

SQL>

PDB コンポーネントが作成されています。

V$DATAFILE

SQL> set lin 1000
SQL> col enabled for a10
SQL> col name for a50
SQL> SELECT file#, status, enabled, bytes, name, con_id
  2  FROM v$datafile
  3  ORDER BY con_id, file#
  4  ;

     FILE# STATUS                ENABLED    BYTES      NAME                                               CON_ID
---------- --------------------- ---------- ---------- -------------------------------------------------- ----------
        15 SYSTEM                READ WRITE  209715200 /u01/app/oracle/oradata/pdb2/system01.dbf          4
        16 ONLINE                READ WRITE  167772160 /u01/app/oracle/oradata/pdb2/sysaux01.dbf          4
        17 ONLINE                READ WRITE  225443840 /u01/app/oracle/oradata/pdb2/undotbs01.dbf         4
        18 ONLINE                READ WRITE  524288000 /u01/app/oracle/oradata/pdb2/users01.dbf           4
        19 ONLINE                READ WRITE  314572800 /u01/app/oracle/oradata/pdb2/usertbs01.dbf         4

SQL>

PDB コンポーネントのデータ・ファイル情報が確認できます。

CDB_TABLESPACES

SQL> set lin 1000
SQL> set null @
SQL> col tablespace_name for a20
SQL> col status for a10
SQL> col contents for a10
SQL> SELECT tablespace_name, block_size, initial_extent, next_extent, min_extents, max_extents, max_size, status, contents
  2  FROM cdb_tablespaces
  3  ORDER BY tablespace_name
  4  ;

TABLESPACE_NAME      BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE   STATUS     CONTENTS
-------------------- ---------- -------------- ----------- ----------- ----------- ---------- ---------- ----------
SYSAUX                     8192          65536 @                     1  2147483645 2147483645 ONLINE     PERMANENT
SYSTEM                     8192          65536 @                     1  2147483645 2147483645 ONLINE     PERMANENT
TEMPTS1                    8192        1048576     1048576           1 @           2147483645 ONLINE     TEMPORARY
UNDOTBS1                   8192          65536 @                     1  2147483645 2147483645 ONLINE     UNDO
USERS                      8192          65536 @                     1  2147483645 2147483645 ONLINE     PERMANENT
USERTBS                    8192          65536 @                     1  2147483645 2147483645 ONLINE     PERMANENT

6行が選択されました。

SQL>

PDB の表領域情報が確認できます。

CDB_TEMP_FILES

SQL> set lin 1000
SQL> col con_id for 999
SQL> col file_id for 9999
SQL> col tablespace_name for a15
SQL> col file_name for a45
SQL> col maxbytes for 999999999999
SQL> SELECT con_id, file_id, tablespace_name, file_name, bytes, status, maxbytes, user_bytes
  2  FROM cdb_temp_files
  3  ORDER BY con_id
  4  ;

CON_ID FILE_ID TABLESPACE_NAME FILE_NAME                                     BYTES      STATUS     MAXBYTES      USER_BYTES
------ ------- --------------- --------------------------------------------- ---------- ---------- ------------- ----------
     4       4 TEMPTS1         /u01/app/oracle/oradata/pdb2/temp01.dbf         52428800 ONLINE       34359721984   51380224

SQL>

PDB の一時ファイル情報が確認できます。

まとめ

既存の PDB をクローニングして、簡単に新しい PDB を作成することができました。

データのクローニング有無も設定できるので、開発環境やテスト環境を作成する際に役立ちますね。

【Oracle】既存PDBのクローニングで新規PDBを作成する
最新情報をチェックしよう!