2
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【Oracle Database】Pluggable Database(PDB)を作成する

Last updated at Posted at 2024-06-12

Oracle Databaseマルチテナント環境において、PDBを作成する手順をメモ程度に示します。

バージョンは19cです。

はじめに

PDBを作成するといっても方法は様々。ドキュメントによると、以下の手法があるようです。

  1. PDBを最初から作成
  2. 既存のPDBまたは非CDBをクローニング
  3. PDBを異なるCDBに再配置
  4. 切断されたPDBをCDBに接続
  5. PDBをプロキシPDBとして参照
  6. 非CDBからPDBを作成し、PDBをCDBに接続

この記事では「1. PDBを最初から作成」にて作成します。作成にあたってはいずれもCREATE PLUGGABLE DATABASE文が必要になりますので、権限を確認しておきましょう。

またPDBの作成について、DBA Goldの問題解説記事になりますが以下のサイトも非常に参考になります。
Gold DBA 2019 Seminar Series 第2回:プラガブル・データベース (PDB) の作成

PDBを最初から作成する

新しいPDBを作成するにはPDB$SEEDをクローニングする形で作成します1
(以下、PDB$SEEDをSEEDと表記します。)

image.png

OMFが有効化されている場合、OMFは自動的にデータファイルの場所を管理してくれるため、データファイルの場所を明示的に指定する必要はありません。

今回、OMFは無効化されているため、データファイルの場所を指定する必要があります。コマンドとしては以下のようになるのですが、その前にPDB$SEEDのデータファイルがどこにあるかを確認しておきましょう。

SEEDからクローニングして新しいPDBを作成
CREATE PLUGGABLE DATABASE pdb_name
ADMIN USER pdb_admin IDENTIFIED BY password
FILE_NAME_CONVERT = ('/path_to_source/', '/path_to_destination/');

1. PDB$SEEDのデータファイルの位置を確認する

SEEDに移動します。

-- SEEDに移動
SQL> alter session set container = PDB$SEED;

Session altered.


-- SEEDに移動できたことを確認
SQL> show con_name

CON_NAME
------------------------------
PDB$SEED

SEEDのデータファイルの位置を確認します。念のためPDB$SEEDのファイルだと確認したかったのでJOINしていますが、ファイルパスを確認するだけであれば2番目のSQLで問題ありません。

SEEDのデータファイルのパスを確認する
SELECT dbf.file_name, pdb.name 
FROM cdb_data_files dbf
JOIN v$pdbs pdb ON dbf.con_id = pdb.con_id;
上記SQLの結果
"FILE_NAME","NAME"
"/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf","PDB$SEED"
"/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf","PDB$SEED"
"/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf","PDB$SEED"

パスを知るだけであればこれだけでも問題ない
SELECT file_name FROM dba_data_files;
上記SQLの結果
"FILE_NAME"
"/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf"
"/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf"
"/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf"

CDBから以下のコマンドでSEEDのデータファイルが見られると思ったのですが、どうやらSEEDは例外的に表示されないようです2
しかし、せっかく作ったので供養のために置いておきます。

SELECT file_name FROM cdb_data_files
WHERE con_id = (
    SELECT con_id
    FROM v$pdbs
    WHERE name = 'PDB$SEED'
);

2. PDBを作成

CDBに戻り、1.で得られたパスを引数にPDB「testpdb」を作成します。

CDBに戻ったことを確認
SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
testpdbを作成
CREATE PLUGGABLE DATABASE testpdb
	ADMIN USER testadmin IDENTIFIED BY Welcome123#
	STORAGE (MAXSIZE 1G)
	PATH_PREFIX = '/opt/oracle/oradata/ORCLCDB/TESTPDB/'
	FILE_NAME_CONVERT = ('/opt/oracle/oradata/ORCLCDB/pdbseed/', '/opt/oracle/oradata/ORCLCDB/TESTPDB/');

PATH_PREFIX句はPDB内でのファイルのデフォルトの場所を指定するために使用されるパラメータです。PDBの作成やクローン時に、デフォルトで使用されるディレクトリパスを定義します。

OMFが無効かつFILE_NAME_CONVERT句が指定されていない場合、PDB_FILE_NAME_CONVERTパラメータ3によってファイル名が置き換えられます。

3. 作成したPDBを確認する

私の環境では15秒ほどでPDBは完成しました。

CREATE PLUGGABLE DATABASE文の実行結果
SQL> CREATE PLUGGABLE DATABASE testpdb
  2      ADMIN USER testadmin IDENTIFIED BY Welcome123#
  3      STORAGE (MAXSIZE 1G)
  4      PATH_PREFIX = '/opt/oracle/oradata/ORCLCDB/TESTPDB/'
  5      FILE_NAME_CONVERT = ('/opt/oracle/oradata/ORCLCDB/pdbseed/', '/opt/oracle/oradata/ORCLCDB/TESTPDB/');

Pluggable database created.

Elapsed: 00:00:14.92

マウント状態で作成されていることが確認できます。
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB1                       READ WRITE NO
         4 ORCLPDB2                       MOUNTED
         5 TESTPDB                        MOUNTED

データファイルを見に行きましょう。FILE_NAME_CONVERT句で指定したディレクトリに移動します。

$ cd /opt/oracle/oradata/ORCLCDB/TESTPDB/
$ ls
sysaux01.dbf  system01.dbf  temp012024-05-08_06-54-06-817-AM.dbf  undotbs01.dbf

以下がSEEDのディレクトリですが、上下を見比べてもしっかりクローニングされたことが確認できます。

PDB$SEED
$ ls
sysaux01.dbf  system01.dbf  temp012024-05-08_06-54-06-817-AM.dbf  undotbs01.dbf
  1. https://docs.oracle.com/cd/E96517_01/multi/creating-a-pdb-from-scratch.html#GUID-534B3B1D-0ED7-4828-9CA4-B1757398801F

  2. https://forums.oracle.com/ords/apexds/post/unable-to-find-seed-database-files-in-cdb-data-files-4388

  3. https://docs.oracle.com/cd/F19136_01/refrn/PDB_FILE_NAME_CONVERT.html

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0