LoginSignup
8
3

More than 3 years have passed since last update.

[Oracle DB] ホットクローンでリフレッシュ可能PDBを作成する手順

Last updated at Posted at 2020-01-09

はじめに

停止できないDBをある断面にて複製し、定期的に差分を反映させたい要件があったためOracle Database 12.2の新機能であるリフレッシュ可能PDBのホットクローンによる作成手順を確認しました。

その際の備忘メモです。ローカルCDB内にてPDBをクローンしてます。
18c新機能であるPDBスナップショット・カルーセルは動作するエディションに制限(Exadata等エンジニアドシステムかクラウドのみ動作)があったため、ホットクローンにしました。

参考:Oracle Database製品で許可される機能、オプションおよびManagement Pack

PDBホットクローンとは

クローン元のPDBが READ/WRITE状態のままクローンPDBを作成することができる機能です。
ホットクローン作成後も手動または自動でクローン元の更新分をクローン先に反映させることが可能です。以下のような用途で使えます。
image.png
出典:Oracle Database 12.2 CoreTech Seminer Multitenant

リフレッシュ可能PDBとは

ソースPDBの変更を反映させることができるPDBです。PDBをクローニングする際に REFRESH MODE 句を指定することで設定できます。差分を任意のタイミングで手動で反映させることも、定期的に10分間隔等で反映させることも可能です。

実施手順

確認環境

  • Oracle Cloud Infrastructure (OCI)上に作成した Oracle Database 19.4 Enterprise Edition High Performance

ホットクローンの前提条件

  • CDBがARCHIVELOGモードおよびローカルUNDOモード

手順

ホットクローン対象のPDBがREAD/WRITEであることを確認。

[oracle@db01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 12 03:28:51 2019
Version 19.4.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.4.0.0.0

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO ★←read/write

PDB側のsystemユーザーに"create pluggable database"権限を付与。

SQL> grant create pluggable database to system container=all;

Grant succeeded.

クローン元のPDBにアクセスするDBリンクを作成。

SQL> create public database link link_to1 connect to system identified by xxx using 'PDB01';

Database link created.

リフレッシュ可能PDBをホットクローンで作成。Oracle Cloudはデフォルトで表領域暗号化されているため、"keystore"句でパスワードを入力しています。このコマンドによりPDBのデータファイルが複製されます。

SQL> create pluggable database pdb02 from pdb01@link_to1 keystore identified by xxx refresh mode every 3 minutes;

Pluggable database created.

以下、ホットクローン実行時のメッセージ。アラートログより抜粋。

PDB02(4):Endian type of dictionary set to little
\****************************************************************
Pluggable Database PDB02 with pdb id - 4 is created as UNUSABLE.
If any errors are encountered before the pdb is marked as NEW,
then the pdb must be dropped
local undo-1, localundoscn-0x000000000000012c
\****************************************************************
(略)

ホットクローン実行後は "MOUNTED" でPDBが作成されています。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED ★←ホットクローンで作成したPDB

以下は自動リフレッシュ時のメッセージ。アラートログより抜粋。内部で alter pluggable database refresh が実行されています。更新差分はDataGuardのスタンバイ機のようにリカバリされていることが分かります。

2019-12-12T05:35:14.601356+00:00
PDB02(4):alter pluggable database refresh
・・・
PDB02(4):Media Recovery Start
・・・
PDB02(4):Media Recovery Complete (cdb01)
・・・
PDB02(4):Completed: alter pluggable database refresh

リフレッシュ可能PDBを起動する際はリフレッシュモードを停止する必要があります。一度リフレッシュモードを停止すると再度リフレッシュモードにすることはできません。

SQL> alter pluggable database pdb02 open;
alter pluggable database pdb02 open
*
ERROR at line 1:
ORA-65341: cannot open pluggable database in read/write mode
★↑リフレッシュ可能PDBのためopen不可

SQL> alter pluggable database pdb02 refresh mode none;

Pluggable database altered.
★↑リフレッシュモードを停止

SQL> alter pluggable database pdb02 open;

Pluggable database altered.
★↑リフレッシュモードを停止するとOPENできることを確認

直面したエラー

DBリンクがない場合

リフレッシュ可能PDBの場合はDBリンクが必要。

SQL> create pluggable database pdb03 from pdb01 keystore identified by WElcome##01 refresh mode every 3 minutes;
create pluggable database pdb03 from pdb01 keystore identified by WElcome##01 refresh mode every 3 minutes
                                                                                           *
ERROR at line 1:
ORA-00922: missing or invalid option
PDB側のユーザーに"create pluggable database"権限がない場合
SQL> create pluggable database pdb02 from pdb01@link_to1 keystore identified by WElcome##01 refresh mode every 3 minutes;
create pluggable database pdb02 from pdb01@link_to1 keystore identified by WElcome##01 refresh mode every 3 minutes
*
ERROR at line 1:
ORA-17628: Oracle error 1031 returned by remote Oracle server
ORA-01031: insufficient privileges
DBリンクを"sys"で張った場合
SQL> create public database link link_to1 connect to sys identified by WElcome##01 using 'PDB01';

Database link created.

SQL> create pluggable database pdb02 from pdb01@link_to1 keystore identified by WElcome##01 refresh mode every 3 minutes;
create pluggable database pdb02 from pdb01@link_to1 keystore identified by WElcome##01 refresh mode every 3 minutes
*
ERROR at line 1:
ORA-17627: ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
ORA-17629: Cannot connect to the remote database server

リファレンス

Oracle Database 19c SQL言語リファレンス - CREATE PLUGGABLE DATABASE

8
3
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
8
3