16 PDBスナップショット・カルーセルの管理
指定したPDBのPDBスナップショット・カルーセルを構成し、スナップショットを手動または自動的に作成して、スナップショットの最大数を設定できます。
この項では、次の項目について説明します。
- PDBスナップショット・カルーセルについて
PDBスナップショットはPDBのPoint-in-Timeコピーです。スナップショットは、CREATE PLUGGABLE DATABASE
(またはALTER PLUGGABLE DATABASE
)のSNAPSHOT
句を使用して手動で作成するか、またはEVERY間隔
句を使用して自動的に作成できます。PDBスナップショット・カルーセルとは、PDBスナップショットのライブラリのことです。 - PDBスナップショット・カルーセル内のスナップショットの最大数の設定
PDBのPDBスナップショットの最大数を設定できます。 - 自動PDBスナップショットの構成
PDBを作成または変更する際にSNAPSHOT MODE EVERY
句を使用して、自動スナップショットのPDBを構成します。 - PDBスナップショットの手動作成
PDBスナップショットを手動で作成するには、ALTER PLUGGABLE DATABASE
またはCREATE PLUGGABLE DATABASE
でSNAPSHOT snapshot_name
句を指定します。 - PDBスナップショットの削除
DROP SNAPSHOT
句を指定したALTER PLUGGABLE DATABASE
文を実行して、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のカルーセルは、このPDBのコピーの循環ライブラリです。 - PDBスナップショット・カルーセルのユーザー・インタフェース
SNAPSHOT MODE
句を使用してスナップショットの作成を制御し、作成が手動、自動または無効かを決定します。
親トピック: 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が示されています。
PDBスナップショット・カルーセルを使用したPoint-in-Timeリストア
毎日同じ時間にPDBのスナップショットを取得するのが一般的な方法です。データ・ロード前にスナップショットを手動で取得する方法もあります。いずれの場合も、PDBスナップショット・カルーセルを使用すると、使用可能な任意のスナップショットを使用してPDBをリストアできます。
たとえば、pdb1_prod
という名前の販売履歴PDBは、毎日午前12時1分に自動スナップショットを生成します。4月9日月曜日の午後に実行した日次データ・ロード時に、誤ったデータをロードしてPDBが破損しました。4月9日月曜日のスナップショットに基づいて新しい本番PDBを作成し、破損したPDBを削除して、データ・ロードを再試行できます。
関連項目:
-
CREATE PLUGGABLE DATABASE
の構文およびセマンティクスについては、『Oracle Database SQL言語リファレンス』を参照してください
親トピック: PDBスナップショット・カルーセルについて
PDBスナップショット・カルーセルの仕組み
特定のPDBのカルーセルは、このPDBのコピーの循環ライブラリです。
データベースでは、必要に応じてまたは自動的に、カルーセル内に連続してコピーを作成します。スナップショット制限に達すると、データベースでは最も古いスナップショットが上書きされます。
この項には次のトピックが含まれます:
- PDBスナップショットの内容
PDBスナップショットのデータファイルは、ファイル・システムのアーカイブ・ファイルに存在します。 - 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スナップショット・カルーセルは、PDBのすべての既存のスナップショットのセットです。
MAX_PDB_SNAPSHOTS
プロパティは、カルーセルで許可されるスナップショットの最大数を指定します。現在の設定は、CDB_PROPERTIES
ビューに表示されます。
次の図は、cdb1_pdb1
のカルーセルを示しています。この例では、データベースはPDBスナップショットを毎日自動的に取得して、8個のスナップショットのセットを維持します。最初の8個のスナップショットが作成された後は、最新のスナップショットが作成されるたびに最も古いスナップショットと置き換えられます。たとえば、4月10日火曜日のスナップショットは4月2日月曜日のスナップショットと置き換えられ、4月11日水曜日のスナップショットは4月3日火曜日のスナップショットと置き換えられます。
Oracle Database 19c以降、カルーセル内のPDBスナップショットは最初のスナップショット除いてすべてスパースにすることが可能であり、ソースPDBは読取り/書込みモードを維持できます。この機能により、カルーセルによって消費される記憶領域が大幅に削減されます。
関連項目:
各種エディションおよびサービスでサポートされる機能の詳細は、『Oracle Databaseライセンス情報ユーザー・マニュアル』を参照
親トピック: PDBスナップショット・カルーセルの仕組み
PDBスナップショット・カルーセルのユーザー・インタフェース
SNAPSHOT MODE
句を使用してスナップショットの作成を制御し、作成が手動、自動または無効かを決定します。
CREATE PLUGGABLE DATABASE文
PDBのスナップショット・モードを設定するには、ALTER PLUGGABLE DATABASE
またはCREATE PLUGGABLE DATABASE
のSNAPSHOT MODE
句で次のいずれかの値を使用します。
-
MANUAL
この句(デフォルト)は、PDBの手動スナップショットの作成を有効にします。必要に応じてスナップショットを作成するには、
ALTER PLUGGABLE DATABASE
またはCREATE PLUGGABLE DATABASE
文でSNAPSHOT snapshot_name
句を指定します。 -
EVERY snapshot_interval [MINUTES|HOURS]
この句は、時間間隔ごとのスナップショットの自動作成を有効にします。指定する間隔には次の制限があります。
-
分の値は
3000
より小さくする必要があります。 -
時間の値は
2000
より小さくする必要があります。
データベースでは、各自動スナップショットにシステム生成の名前が割り当てられます。
EVERY
が指定されている場合は、PDBに対して手動スナップショットもサポートされていることに注意してください。 -
-
NONE
この句は、PDBのスナップショット作成を無効にします。
関連項目:
-
SNAPSHOT
句の構文およびセマンティクスについては、『Oracle Database SQL言語リファレンス』を参照してください
MAX_PDB_SNAPSHOTSデータベース・プロパティ
PDBのスナップショットの最大数を設定するには、ALTER PLUGGABLE DATABASE
またはCREATE PLUGGABLE DATABASE
でMAX_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のPDBスナップショットの最大数を設定できます。
MAX_PDB_SNAPSHOTS
データベース・プロパティは、PDBスナップショット・カルーセルでの各PDBのスナップショットの最大数を設定します。デフォルトの最大値は8
です。プロパティには8
より大きい数値を設定できません。
前提条件
PDBが読取り/書込みモードでオープンしている必要があります。
PDBのPDBスナップショットの最大数を設定するには:
-
SQL*Plusで、現在のコンテナが制限を設定するPDBであることを確認します。
-
必要に応じて、
SET MAX_PDB_SNAPSHOTS
プロパティの現在の設定に対してCDB_PROPERTIES
を問い合せます。 -
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スナップショットの構成
PDBを作成または変更する際にSNAPSHOT MODE EVERY
句を使用して、自動スナップショットのPDBを構成します。
前提条件
ALTER PLUGGABLE DATABASE SNAPSHOT
文の次の前提条件に注意してください。
-
CDBはローカルUNDOモードである必要があります。
-
管理者はPDBを作成および削除する権限を持っている必要があります。
PDBの変更時に自動スナップショットを構成するには:
-
SQL*Plusで、スナップショット・モードを構成するPDBに管理者としてログインしていることを確認します。
-
必要に応じて、
DBA_PDBS
を問い合せて、現在のスナップショット・モードを確認します。 -
SNAPSHOT MODE EVERY interval
句にMINUTES
またはHOURS
を指定して、ALTER PLUGGABLE DATABASE
を実行します。
PDBの作成時に自動スナップショットを構成するには:
-
SQL*Plusで、CDBルートまたはアプリケーション・ルートに管理者としてログインしていることを確認します。
-
必要に応じて、
DBA_PDBS
を問い合せて、現在のスナップショット・モードを確認します。 -
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 DATABASE
でSNAPSHOT snapshot_name
句を指定します。
前提条件
ALTER PLUGGABLE DATABASE SNAPSHOT
文の次の前提条件に注意してください。
-
CDBはローカルUNDOモードである必要があります。次の問合せを使用すると、モードを確認できます。ローカルUNDOが有効な場合、この問合せは
TRUE
を返します。SELECT * FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME='LOCAL_UNDO_ENABLED';
-
データベース管理者はPDBを作成および削除する権限を持っている必要があります。
PDBスナップショットを作成するには:
-
SQL*Plusで、スナップショット・モードを作成するPDBに管理者としてログインしていることを確認します。
-
必要に応じて、
DBA_PDBS.SNAPSHOT_MODE
を問い合せて、スナップショットのモードがNONE
に設定されていないことを確認します。 -
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スナップショットを削除するには:
-
SQL*Plusで、現在のコンテナがPDBスナップショットを作成したPDBであることを確認します。
-
DROP SNAPSHOT
句を指定してALTER PLUGGABLE DATABASE
文を実行します。
例16-7 PDBスナップショットの削除
次のSQL文は、sales_snap
という名前のPDBスナップショットを削除します。
ALTER PLUGGABLE DATABASE DROP SNAPSHOT sales_snap;
関連項目:
親トピック: PDBスナップショット・カルーセルの管理