Oracle Database 18c 新機能: PDB スナップショット・カルーセル
*以下は、サポート契約締結中のお客様に毎月配信しているサポートレターより一部抜粋して掲載しています。
はじめに
これまで Cloud 向け、Engineered Systems 向けにのみリリースされていた Oracle Database 18c ですが、オンプレミス版 Database 18c (18.3) が Linux x86-64 上でダウンロード用にリリースされました。現在は下記の OTN ページからダウンロードすることができるようになっています。
-
Oracle Database Software Downloads - Oracle Database 18c (18.3)
https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
他のプラットフォームについては今後リリースされていく予定ですが、リリース・スケジュールの詳細については Doc 2413744.1 [日本語] を参照してください。
これまでは実際にお試しいただくことが難しかった 18c ですが、オンプレミス版のリリースに伴い、いっそう検証などが行いやすい環境になってきました。さて今号では、この 18c の新機能のうち PDB スナップショット・カルーセルをピックアップしてご紹介いたします。
18c 新機能: PDB スナップショット・カルーセル
18c で新たに導入された PDB スナップショット・カルーセルは、PDB に容易な Point-in-Time リカバリを提供するスナップショット機能の拡張です。ある一時点の PDB スナップショットを複数世代取得することができ、また、それらをリカバリ可能にするためのリポジトリを提供します。
スナップショットは手動によるコマンドで取得できますが、定期的に自動取得するように設定することも可能です。あらかじめ決められた世代数を保持することができ、保持数(デフォルトで 8 世代)を超えた場合は新たなスナップショットのために、古いスナップショットから削除されていきます。カルーセル(回転木馬)というネーミングはこのような保持スロットを循環して使用している様子から採用されているようです。
また、スナップショットを使った PDB のクローンを作成することができるため、例えば、開発環境の過去のある時点のデータベース断面を使ったテストに使うという用途にも採用することができます。従来リリースでも、過去にさかのぼった PDB の複製を生成する機能自体は存在しており、PDB のクローンとアンプラグを利用すれば同様な複製環境の作成を実現できましたが操作手順は複雑で容易とは言い難いものでした。一方、今回追加された PDB スナップショット・カルーセルではこれらをより簡易に管理しやすく実施することができます。
PDB スナップショットの取得
それでは PDB スナップショット関連の動きを簡単に追ってみます。
まず、PDB でスナップショットが作成可能なようにスナップショット・モードが構成されていることを確認する必要があります。スナップショット・モードの構成は CREATE PLUGGABLE DATABASE 文、または ALTER PLUGGABLE DATABASE 文の SNAPSHOT MODE 句で指定し、この値がデフォルトの設定として動作します。
SNAPSHOT MODE 句で指定する各スナップショット・モードは次のような意味を持ちます:
- MANUAL (無指定時のデフォルト)
- 手動でスナップショットを取得
- EVERY <スナップショット間隔> [ 分 | 時間 ]
- 指定した間隔で自動でスナップショットを取得
指定できる間隔 最大(分:3000分, 時間:2000時間) - NONE
- スナップショットの取得を無効化
デフォルトのモードでスナップショットを取得するには、以下のように ALTER PLUGGABLE DATABASE SNAPSHOT 文を実行します。
--------------------------------------------------------------------------- SQL> ALTER PLUGGABLE DATABASE SNAPSHOT; Pluggable database altered. ---------------------------------------------------------------------------
DBA_PDB_SNAPSHOTS ビューで取得したスナップショットを確認することができます。
--------------------------------------------------------------------------- SQL> SELECT CON_ID, CON_NAME, SNAPSHOT_NAME, 1> FULL_SNAPSHOT_PATH 2> FROM DBA_PDB_SNAPSHOTS 3> ORDER BY SNAP_SCN; CON_ID CON_NAME SNAPSHOT_NAME FULL_SNAPSHOT_PATH ------- ---------- -------------------- --------------------------------------------- 3 SALESPDB SNAP_3044096399_9749 /u02/app/oracle/oradata/snap_3044096399_2856096.pdb ---------------------------------------------------------------------------
PDB スナップショット取得の自動化
前述のように、PDB スナップショットは定期的に自動取得することもできます。スナップショットの自動取得を行うには ALTER PLUGGABLE DATABASE 文で SNAPSHOT MODE 句に EVERY を指定します。24時間毎に取得することにした場合は下記のように指定します。
--------------------------------------------------------------------------- SQL> ALTER PLUGGABLE DATABASE SNAPSHOT MODE EVERY 24 HOURS; Pluggable database altered. ---------------------------------------------------------------------------
DBA_PDBS ビューから設定値を確認することができます。
--------------------------------------------------------------------------- SQL> SELECT SNAPSHOT_MODE "S_MODE", SNAPSHOT_INTERVAL/60 "SNAP_INT_HRS" FROM DBA_PDBS; S_MODE SNAP_INT_HRS ------ ------------ AUTO 24 ---------------------------------------------------------------------------
PDB スナップショットを使った PDB クローンの作成
取得したスナップショットはそのままでは保持されるだけです。スナップショット上のデータを使用できるようにするには、スナップショットを元に PDB クローンを作成します。
下記の例では、先ほど取得したスナップショットから PDB クローンを作成しています。
--------------------------------------------------------------------------- SQL> CREATE PLUGGABLE DATABASE SALESPDB2 FROM SALESPDB USING SNAPSHOT SNAP_3044096399_9749; Pluggable database created. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ---------------- ---------- ---------- 2 PDB$SEED READ ONLY NO 3 SALESPDB READ WRITE NO 4 SALESPDB2 MOUNTED ---------------------------------------------------------------------------
制限事項
現時点での制限事項としては、PDB が TDE 暗号化表領域を含む場合には使用することができません。このため、クラウド環境では暗号化がデフォルトであるため、実質的にはオンプレミス環境でのみ使用できる機能になっています。
まとめ
今号では、18c 新機能である PDB スナップショット・カルーセルについて紹介させていただきましたが、如何でしたでしょうか。新しくリリースされているオンプレミス版 18c と併せてご確認いただければ幸いです。
(オラクル事業部 サポート・サービス担当 河﨑)