株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021 やりますよ / PDB作成について

Oracle ACEの渡部です。

つい「カッと」なって(全部俺)某Oracle書籍を25日後に脱稿するXX歳の Advent Calendar 2021を作ってしまいました。

オラクルマスター教科書 Bronze DBA Oracle Database Fundamentalsオラクルマスター教科書 Silver DBA Oracle Database Administration Iに続く「某Oracle書籍」を執筆中のOracle ACE 渡部が、12月25日のドラフト脱稿目指して1日1記事頑張って投稿してゆきたいと思います!

(注意点) 一連の投稿について

  • 「某Oracle書籍」執筆中に実施した下調べの内容や、「某Oracle書籍」のターゲットを超える内容、内容的に関連するセミナー資料の抜粋などを記載する予定です。

  • 2021年12月時点で「某Oracle書籍」の発売時期は未定です。もう少々お待ちを。

  • 万が一、関係者から怒られたら途中でやめるかも(たぶん大丈夫だと思うのだけど)

  • 執筆中の「某Oracle書籍」の記載内容と、一連の投稿の記載内容は異なります

    • そもそも、同じ内容を投稿したら「問題」になる!
  • 「某Oracle書籍」の記載と、一連の投稿は品質が全く異なります

    • 「某Oracle書籍」の記載は、十分に推敲を重ねた、図や表を用いた丁寧なものです。一方、一連の投稿はメモ書きの延長のレベルで、概して推敲が不十分で図や表はあまり使っていません。
    • 「某Oracle書籍」の記載は、先頭から読んでいけばスンナリ理解できるように工夫された完結性・完備性が高いものです。一方、一連の投稿は特定の観点やトピックにのみ関連するものです。内容を理解するには前提知識が求められます。

[宣伝] これまでに渡部が執筆した書籍の一覧

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

PDB作成の分類と方法

執筆中の「某Oracle書籍」の対象範囲には、マルチテナント環境におけるPDBの作成が含まれます。

マルチテナント環境におけるPDBの作成については、

11/19 #dbts2021 Oracleマルチテナント再入門セミナーのお知らせ

で「Oracle経験者にとっては」見通し良く理解しやすいように整理・説明を試みたので、これを転記しておきます。

A) 空のPDBを作成

最もシンプルな方法として、空のPDBを作成する方法を実行してみます。

というわけでCREATE PLUGGABLE DATABASE を実行すると・・・ エラーになります。

SQL> CREATE PLUGGABLE DATABASE pdb9
  2    ADMIN USER pdb9admin IDENTIFIED BY Password123;
  ADMIN USER pdb9admin IDENTIFIED BY Password123
                                               *
行2でエラーが発生しました。:
ORA-65016: FILE_NAME_CONVERTを指定する必要があります

PDBの実体は、表領域を構成するデータファイルです。 PDBの作成時には、データファイルのファイルパスを以下の2つのいずれかの考え方で指定する必要があります。

これを踏まえると、上記エラーは以下の理由で発生していたことがわかります。

  • 非OMFでPDBのデータファイルを指定するならば、FILE_NAME_CONVERT句などの「元PDBと新PDBの間のファイル名変換ルール」を指定する必要がある。
  • OMFでPDBのデータファイルを指定するならば、CREATE_FILE_DEST句やDB_CREATE_FILE_DEST初期化パラメータなどの「ファイルの配置先ディレクトリ」を指定する必要がある。

非OMF - FILE_NAME_CONVERT句 を指定してPDBを作成

上記の通り、PDBの作成時のデータファイルのファイルパス指定には非OMFとOMFの2つの考え方があります。まず、非OMFでデータファイルのファイルパスを指定してみます。具体的には、CREATE PLUGGABLE DATABASE に FILE_NAME_CONVERT句を指定してみます。

で、FILE_NAME_CONVERT句を指定するためには、「元PDBと新PDBの間のファイル名変換ルール」を指定する必要がありますから、まずは「元PDB」であるところのPDBシードのデータファイル名を確認します。

SQL> ALTER SESSION SET CONTAINER=PDB$SEED;

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

SQL>
SQL> SELECT file_name FROM dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB/pdbseed/system01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/undotbs01.dbf

これを元に「元PDBと新PDBの間のファイル名変換ルール」を決めるわけですが、 これは要件に応じて適宜決めてOKな形になります。

ここでは、元PDBと新PDBのファイル配置を似たような形にするとして、以下の変換ルールおよび、ファイルパスにすることとします。

/u01/app/oracle/oradata/CDB/pdbseed/system01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdbseed/undotbs01.dbf
      │
      │変換ルール  '/pdbseed/' → '/pdb9/'
      ↓
/u01/app/oracle/oradata/CDB/pdb9/system01.dbf
/u01/app/oracle/oradata/CDB/pdb9/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdb9/undotbs01.dbf

この変換ルールをFILE_NAME_CONVERT句 に指定して、CREATE PLUGGABLE DATABASE文を実行します。

SQL> CREATE PLUGGABLE DATABASE pdb9
  2    ADMIN USER pdb9admin IDENTIFIED BY Password123
  3    FILE_NAME_CONVERT=('/pdbseed/', '/pdb9/');

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

SQL> ALTER PLUGGABLE DATABASE pdb9 OPEN;

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

SQL> connect system/Password123@localhost:1521/pdb9
接続されました。
SQL> SELECT file_name FROM DBA_DATA_FILES;

FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB/pdb9/system01.dbf
/u01/app/oracle/oradata/CDB/pdb9/sysaux01.dbf
/u01/app/oracle/oradata/CDB/pdb9/undotbs01.dbf

SQL>

想定通りのデータファイル名でPDBが作成されました。

OMF - DB_CREATE_FILE_DEST初期化パラメータ を指定してPDBを作成

次にOMFでPDBを作成してみます。

おさらいですが、OMFとはOracleデータベースの構成ファイルの管理を「Oracle任せ」にすることです。具体的には…

  • ファイル名をOracleが自動的に決定する
  • 不要なファイルはOracleが自動的に削除する

OMFでPDBを作成する方法にはいくつかありますが、ここではDB_CREATE_FILE_DEST初期化パラメータを使います。

SQL> ALTER SESSION SET DB_CREATE_FILE_DEST ='/u01/app/oracle/oradata';

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

SQL> CREATE PLUGGABLE DATABASE pdb8
  2    ADMIN USER pdb8admin IDENTIFIED BY Password123;

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

SQL> ALTER PLUGGABLE DATABASE pdb8 OPEN;

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

SQL> connect system/Password123@localhost:1521/pdb8
接続されました。
SQL> SELECT file_name FROM DBA_DATA_FILES;

FILE_NAME
------------------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB/CFEEA753BB111F37E0530C38A8C01647/datafile/o1_mf_system_jr6lw92m_.dbf
/u01/app/oracle/oradata/CDB/CFEEA753BB111F37E0530C38A8C01647/datafile/o1_mf_sysaux_jr6lw92n_.dbf
/u01/app/oracle/oradata/CDB/CFEEA753BB111F37E0530C38A8C01647/datafile/o1_mf_undotbs1_jr6lw92n_.dbf

SQL>

データファイルのファイルパス指定方法4パターン

これまで、非OMFとOMFでのデータファイルのファイルパス指定方法を紹介しましたが、 指定方法は全部で4つあります。

  • CREATE PLUGGABLE DATABASE文の句 : 非OMF、OMF
  • 初期化パラメータ: 非OMF、OMF

の2×2で4パターンです。

複数の指定パターンを併用する(同時に指定する)ことは実務上考えにくいですが、一応同時に指定した場合の優先度も定義されています。

ということで2日目に続く・・・

2022/3/25 追記

12月中の脱稿には失敗してしまいましたが、その後鋭意執筆を進め、2022年5月27日に「オラクルマスター教科書 Gold DBA Oracle Database Administration II」を販売開始します。詳細は以下をご覧ください。

ORACLE MASTER Bronze DBA 2019試験対策本の発売日が決定しました

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ