16 PDBスナップショット・カルーセルの管理

指定したPDBのPDBスナップショット・カルーセルを構成し、スナップショットを手動または自動的に作成して、スナップショットの最大数を設定できます。

この項では、次の項目について説明します。

PDBスナップショット・カルーセルについて

PDBスナップショットはPDBのPoint-in-Timeコピーです。スナップショットは、CREATE PLUGGABLE DATABASE (またはALTER PLUGGABLE DATABASE)のSNAPSHOT句を使用して手動で作成するか、またはEVERY間隔句を使用して自動的に作成できます。PDBスナップショット・カルーセルとは、PDBスナップショットのライブラリのことです。

この項では、次の項目について説明します。

PDBスナップショット・カルーセルの目的

PDBスナップショット・カルーセルは、Point-in-Timeリカバリおよびクローニングのために最新PDBコピーのライブラリを維持するのに便利な方法です。

開発およびテスト用にPDBをクローニング

一般的な開発ユースケースでは、テスト用に本番PDBをクローニングします。CDBがARCHIVELOGモードおよびローカルUNDOモードの場合、ソースの本番PDBは読取り/書込みモードでオープンでき、動作中に完全に機能します。この手法は、ホット・クローニングと呼ばれます。ホット・クローンは、ALTER PLUGGABLE DATABASE ... OPEN文が完了したSCNの時点で、ソースPDBとトランザクション的に一貫した状態です。

たとえば、pdb1_prodという名前の本番PDBがオープンして使用中の場合は、pdb1_test_masterという名前のリフレッシュ可能なクローンを作成します。次に、スナップショットを毎日自動作成するようにpdb1_test_masterを構成します。テスト用に新しいPDBが必要な場合は、CREATE PLUGGABLE DATABASE ... SNAPSHOT COPYを使用して、スナップショットの完全クローンを作成し、次にスパース・クローンを作成します。

次の図は、4月5日に取得したPDBスナップショットからクローンのpdb1_test_full1を作成する手順を示しています。図には、pdb1_test_full1から作成された3つのスナップショット・コピーPDBが示されています。

図16-1 リフレッシュ可能なクローンPDBの自動スナップショット

図16-1の説明が続きます
「図16-1 リフレッシュ可能なクローンPDBの自動スナップショット」の説明

PDBスナップショット・カルーセルを使用したPoint-in-Timeリストア

毎日同じ時間にPDBのスナップショットを取得するのが一般的な方法です。データ・ロード前にスナップショットを手動で取得する方法もあります。いずれの場合も、PDBスナップショット・カルーセルを使用すると、使用可能な任意のスナップショットを使用してPDBをリストアできます。

たとえば、pdb1_prodという名前の販売履歴PDBは、毎日午前12時1分に自動スナップショットを生成します。4月9日月曜日の午後に実行した日次データ・ロード時に、誤ったデータをロードしてPDBが破損しました。4月9日月曜日のスナップショットに基づいて新しい本番PDBを作成し、破損したPDBを削除して、データ・ロードを再試行できます。

図16-2 スナップショットを使用した本番PDBのリストア

図16-2の説明が続きます
「図16-2 スナップショットを使用した本番PDBのリストア」の説明

関連項目:

PDBスナップショット・カルーセルの仕組み

特定のPDBのカルーセルは、このPDBのコピーの循環ライブラリです。

データベースでは、必要に応じてまたは自動的に、カルーセル内に連続してコピーを作成します。スナップショット制限に達すると、データベースでは最も古いスナップショットが上書きされます。

この項には次のトピックが含まれます:

PDBスナップショットの内容

PDBスナップショットのデータファイルは、ファイル・システムのアーカイブ・ファイルに存在します。

アーカイブREDOログ・ファイルは含まれません。通常、アーカイブはPDBのデータファイルと同じディレクトリに格納されます。システム生成のスナップショット名の場合は、スナップショットSCNを含む一意の識別子にsnap_という接頭辞が付きます。アーカイブにはファイル拡張子.pdbが付いています。

データベースでは、暗黙的なUSING SNAPSHOT句を使用してスナップショットを取得します。CREATE PLUGGABLE DATABASE SNAPSHOTを使用してスナップショットを取得する場合、SNAPSHOT COPY句は指定できません。

ノート:

USING SNAPSHOT句を使用して作成されたPDBスナップショットと、SNAPSHOT COPY句を使用して作成されたスナップショット・コピーPDBは、2つの異なるタイプのスナップショットです。USING SNAPSHOT句では、マテリアライズが不要な完全なPDBが作成されます。SNAPSHOT COPY句では、基になる記憶域スナップショットを削除する場合に、マテリアライズが必要なスパースPDBが作成されます。

PDBスナップショット・カルーセル内のスナップショットは常に完全PDBですが、カルーセル内のスナップショットのスナップショット・コピーを取得できます。この場合、スナップショット・コピーはスパース・クローンです。

PDBスナップショット・カルーセルの内容

PDBスナップショット・カルーセルは、PDBのすべての既存のスナップショットのセットです。

MAX_PDB_SNAPSHOTSプロパティは、カルーセルで許可されるスナップショットの最大数を指定します。現在の設定は、CDB_PROPERTIESビューに表示されます。

次の図は、cdb1_pdb1のカルーセルを示しています。この例では、データベースはPDBスナップショットを毎日自動的に取得して、8個のスナップショットのセットを維持します。最初の8個のスナップショットが作成された後は、最新のスナップショットが作成されるたびに最も古いスナップショットと置き換えられます。たとえば、4月10日火曜日のスナップショットは4月2日月曜日のスナップショットと置き換えられ、4月11日水曜日のスナップショットは4月3日火曜日のスナップショットと置き換えられます。

図16-3 PDBスナップショット・カルーセル

図16-3の説明が続きます
「図16-3 PDBスナップショット・カルーセル」の説明

Oracle Database 19c以降、カルーセル内のPDBスナップショットは最初のスナップショット除いてすべてスパースにすることが可能であり、ソースPDBは読取り/書込みモードを維持できます。この機能により、カルーセルによって消費される記憶領域が大幅に削減されます。

関連項目:

各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照

PDBスナップショット・カルーセルのユーザー・インタフェース

SNAPSHOT MODE句を使用してスナップショットの作成を制御し、作成が手動、自動または無効かを決定します。

CREATE PLUGGABLE DATABASE文

PDBのスナップショット・モードを設定するには、ALTER PLUGGABLE DATABASEまたはCREATE PLUGGABLE DATABASESNAPSHOT MODE句で次のいずれかの値を使用します。

  • MANUAL

    この句(デフォルト)は、PDBの手動スナップショットの作成を有効にします。必要に応じてスナップショットを作成するには、ALTER PLUGGABLE DATABASEまたはCREATE PLUGGABLE DATABASE文でSNAPSHOT snapshot_name句を指定します。

  • EVERY snapshot_interval [MINUTES|HOURS]

    この句は、時間間隔ごとのスナップショットの自動作成を有効にします。指定する間隔には次の制限があります。

    • 分の値は3000より小さくする必要があります。

    • 時間の値は2000より小さくする必要があります。

    データベースでは、各自動スナップショットにシステム生成の名前が割り当てられます。EVERYが指定されている場合は、PDBに対して手動スナップショットもサポートされていることに注意してください。

  • NONE

    この句は、PDBのスナップショット作成を無効にします。

関連項目:

MAX_PDB_SNAPSHOTSデータベース・プロパティ

PDBのスナップショットの最大数を設定するには、ALTER PLUGGABLE DATABASEまたはCREATE PLUGGABLE DATABASEMAX_PDB_SNAPSHOTSプロパティを指定します。プロパティのデフォルトは8で、これは最大値でもあります。スナップショットの最大許容数がすでに作成されている場合、データベースでは最も古いスナップショットが削除されます。CDB_PROPERTIESビューに、MAX_PDB_SNAPSHOTSの設定が表示されます。

関連項目:

ALTER PLUGGABLE DATABASE文の構文については、『Oracle Database SQL言語リファレンス』を参照してください

DBA_PDB_SNAPSHOTSおよびDBA_PDBS

次のデータ・ディクショナリ・ビューは、スナップショット情報を提供します。

  • DBA_PDB_SNAPSHOTSビューには、名前、作成SCN、作成時間およびファイル名を含む、スナップショットに関するメタデータが表示されます。

  • DBA_PDBSビューには、SNAPSHOT_MODEおよびSNAPSHOT_INTERVAL列があります。

関連項目:

DBA_PDB_SNAPSHOTSおよびDBA_PDBSについて学習するには、『Oracle Databaseリファレンス』を参照してください

PDBスナップショット・カルーセル内のスナップショットの最大数の設定

PDBのPDBスナップショットの最大数を設定できます。

MAX_PDB_SNAPSHOTSデータベース・プロパティは、PDBスナップショット・カルーセルでの各PDBのスナップショットの最大数を設定します。デフォルトの最大値は8です。プロパティには8より大きい数値を設定できません。

前提条件

PDBが読取り/書込みモードでオープンしている必要があります。

PDBのPDBスナップショットの最大数を設定するには:

  1. SQL*Plusで、現在のコンテナが制限を設定するPDBであることを確認します。

  2. 必要に応じて、SET MAX_PDB_SNAPSHOTSプロパティの現在の設定に対してCDB_PROPERTIESを問い合せます。

  3. SET MAX_PDB_SNAPSHOTS句を指定して、ALTER PLUGGABLE DATABASEまたはALTER DATABASE文を実行します。

例16-1 PDBのPDBスナップショットの最大数の設定

次の問合せは、cdb1_pdb1のカルーセル内の最大値を示しています(出力例も示します)。

SET LINESIZE 150
COL CON_ID FORMAT 99999
COL PROPERTY_NAME FORMAT a17
COL PDB_NAME FORMAT a9
COL VALUE FORMAT a3
COL DESCRIPTION FORMAT a43

SELECT r.CON_ID, p.PDB_NAME, PROPERTY_NAME, 
       PROPERTY_VALUE AS value, DESCRIPTION 
FROM   CDB_PROPERTIES r, CDB_PDBS p 
WHERE  r.CON_ID = p.CON_ID 
AND    PROPERTY_NAME LIKE 'MAX_PDB%' 
ORDER BY PROPERTY_NAME;

CON_ID PDB_NAME  PROPERTY_NAME     VAL DESCRIPTION
------ --------- ----------------- --- -------------------------------------------
     3 CDB1_PDB1 MAX_PDB_SNAPSHOTS 8   maximum number of snapshots for a given PDB

次のSQL文は、現在のPDBのPDBスナップショットの最大数を7に設定します。

ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=7;

例16-2 PDBスナップショット・カルーセル内のすべてのスナップショットの削除

PDBスナップショット・カルーセル内のすべてのスナップショットを削除するには、次の文に示すように、MAX_PDB_SNAPSHOTSデータベース・プロパティを0 (ゼロ)に設定します。

ALTER PLUGGABLE DATABASE SET MAX_PDB_SNAPSHOTS=0;

この手法は、スナップショットごとにALTER PLUGGABLE DATABASE ... DROP SNAPSHOT snapshot_nameを実行するよりも高速です。

自動PDBスナップショットの構成

PDBを作成または変更する際にSNAPSHOT MODE EVERY句を使用して、自動スナップショットのPDBを構成します。

デフォルトでは、PDBは手動スナップショットに構成されています。

前提条件

ALTER PLUGGABLE DATABASE SNAPSHOT文の次の前提条件に注意してください。

  • CDBはローカルUNDOモードである必要があります。

  • 管理者はPDBを作成および削除する権限を持っている必要があります。

PDBの変更時に自動スナップショットを構成するには:

  1. SQL*Plusで、スナップショット・モードを構成するPDBに管理者としてログインしていることを確認します。

  2. 必要に応じて、DBA_PDBSを問い合せて、現在のスナップショット・モードを確認します。

  3. SNAPSHOT MODE EVERY interval句にMINUTESまたはHOURSを指定して、ALTER PLUGGABLE DATABASEを実行します。

PDBの作成時に自動スナップショットを構成するには:

  1. SQL*Plusで、CDBルートまたはアプリケーション・ルートに管理者としてログインしていることを確認します。

  2. 必要に応じて、DBA_PDBSを問い合せて、現在のスナップショット・モードを確認します。

  3. SNAPSHOT MODE EVERY interval句にMINUTESまたはHOURSを指定して、CREATE PLUGGABLE DATABASEを実行します。

例16-3 既存のPDBに対する毎日の自動スナップショットの構成

この例では、スナップショット・モードを変更するPDBにログインしていることを想定しています。データ・ディクショナリを問い合せて、現在、PDBがMANUALモードであることを確認します(出力例も示します)。

SELECT SNAPSHOT_MODE "S_MODE", SNAPSHOT_INTERVAL/60 "SNAP_INT_HRS" FROM DBA_PDBS;

S_MODE SNAP_INT_HRS
------ ------------
MANUAL

スナップショット・モードを24時間ごとに変更します。

ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 24 HOURS;

自動モードへの変更を確認します。

SELECT SNAPSHOT_MODE "S_MODE", SNAPSHOT_INTERVAL/60 "SNAP_INT_HRS" FROM DBA_PDBS;

S_MODE SNAP_INT_HRS
------ ------------
AUTO             24

例16-4 2時間ごとにスナップショットを取得するPDBの作成

この例では、CDBルートにログインしていることを想定しています。次の文は、cdb1_pdb1という名前の既存のPDBからのcdb1_pdb3を作成し、2時間ごとにスナップショットを自動的に取得するように構成します。

CREATE PLUGGABLE DATABASE cdb1_pdb3 FROM cdb1_pdb1
  FILE_NAME_CONVERT=('cdb1_pdb1','cdb1_pdb3')
  SNAPSHOT MODE EVERY 120 MINUTES;

PDBスナップショットの手動作成

PDBスナップショットを手動で作成するには、ALTER PLUGGABLE DATABASEまたはCREATE PLUGGABLE DATABASESNAPSHOT snapshot_name句を指定します。

前提条件

ALTER PLUGGABLE DATABASE SNAPSHOT文の次の前提条件に注意してください。

  • CDBはローカルUNDOモードである必要があります。次の問合せを使用すると、モードを確認できます。ローカルUNDOが有効な場合、この問合せはTRUEを返します。

    SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='LOCAL_UNDO_ENABLED';
  • データベース管理者はPDBを作成および削除する権限を持っている必要があります。

PDBスナップショットを作成するには:

  1. SQL*Plusで、スナップショット・モードを作成するPDBに管理者としてログインしていることを確認します。

  2. 必要に応じて、DBA_PDBS.SNAPSHOT_MODEを問い合せて、スナップショットのモードがNONEに設定されていないことを確認します。

  3. SNAPSHOT句を指定してALTER PLUGGABLE DATABASE文を実行します。

例16-5 ユーザー指定の名前を使用したスナップショットの作成

次のSQL文は、cdb1_pdb1の2つのPDBスナップショット(水曜日のデータ・ロードの前と後に1つずつ)を作成します。

ALTER PLUGGABLE DATABASE SNAPSHOT cdb1_pdb1_b4wedload;
-- data load
ALTER PLUGGABLE DATABASE SNAPSHOT cdb1_pdb1_afwedload;

DBA_PDB_SNAPSHOTSの次の問合せは、cdb1_pdb1という名前のPDBの2つのスナップショットの場所を示しています(出力例も示します)。

SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a20
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a45

SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, 
       SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATH 
FROM   DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;

 CON_ID CON_NAME   SNAPSHOT_NAME        SNAP_SCN FULL_SNAPSHOT_PATH
------- ---------- -------------------- -------- ---------------------------------------------
      3 CDB1_PDB1  CDB1_PDB1_B4WEDLOAD   2962078 /disk1/oracle/dbs/snap_3489077498_2962078.pdb
      3 CDB1_PDB1  CDB1_PDB1_AFWEDLOAD   2962938 /disk1/oracle/dbs/snap_3489077498_2962938.pdb

PDBスナップショット名を指定しない場合、データベースでは一意の名前が生成されます。

例16-6 システム指定の名前を使用するスナップショットの作成

次のSQL文は、スナップショットは作成されますが、名前が指定されていません。

ALTER PLUGGABLE DATABASE SNAPSHOT;

次の問合せ例は、データベースでSNAP_という接頭辞が付いた名前をスナップショットに割り当てることを示しています。

SET LINESIZE 150
COL CON_NAME FORMAT a10
COL SNAPSHOT_NAME FORMAT a25
COL SNAP_SCN FORMAT 9999999
COL FULL_SNAPSHOT_PATH FORMAT a45

SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, 
       SNAPSHOT_SCN AS snap_scn, FULL_SNAPSHOT_PATH 
FROM   DBA_PDB_SNAPSHOTS
ORDER BY SNAP_SCN;

 CON_ID CON_NAME   SNAPSHOT_NAME             SNAP_SCN FULL_SNAPSHOT_PATH
------- ---------- ------------------------- -------- ---------------------------------------------
      3 CDB1_PDB1  CDB1_PDB1_B4WEDLOAD        2962078 /disk1/oracle/dbs/snap_3489077498_2962078.pdb
      3 CDB1_PDB1  CDB1_PDB1_AFWEDLOAD        2962938 /disk1/oracle/dbs/snap_3489077498_2962938.pdb
      3 CDB1_PDB1  SNAP_3489077498_960130367  2993525 /disk1/oracle/dbs/snap_3489077498_2993525.pdb

PDBスナップショットの削除

DROP SNAPSHOT句を指定したALTER PLUGGABLE DATABASE文を実行して、PDBスナップショットを削除できます。

PDBに基づくPDBスナップショットをすべて削除するには、PDBのMAX_PDB_SNAPSHOTSプロパティを0 (ゼロ)に設定します。

PDBスナップショットを削除するには:

  1. SQL*Plusで、現在のコンテナがPDBスナップショットを作成したPDBであることを確認します。

  2. DROP SNAPSHOT句を指定してALTER PLUGGABLE DATABASE文を実行します。

例16-7 PDBスナップショットの削除

次のSQL文は、sales_snapという名前のPDBスナップショットを削除します。

ALTER PLUGGABLE DATABASE DROP SNAPSHOT sales_snap;