はじめに
CDBにおいて物理的なデータフ・ァイルはCDB全体(CDB$ROOT配下)で共有されるものと、PDBに依存するものに分かれます。前者は制御ファイルやオンラインREDOログやアーカイブファイルなど、後者はPDB上のユーザデータやそれに伴うディクショナリなどです。
21c 以降では、PDB単位での Data Guard が構成されるなど、PDBを軸に機能の改良・改善がなされている様に見受けられるので、特にオンラインREDOの内容を確認してみます。
PDBのUIDについて確認
今回の環境はOracle Database 19c Version 19.25.0.0.0 で実施しています。
- V$CONTAINERS から PDBのUID(CON_UID)を確認
SYS@ORCL19C> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SYS@ORCL19C> SELECT NAME, CON_ID, DBID, CON_UID, GUID FROM V$CONTAINERS;
NAME CON_ID DBID CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT 1 1668855281 1 86B637B62FDF7A65E053F706E80A27CA
PDB$SEED 2 847153043 847153043 2BB9F24A3E6B3E3EE0635F97B90AEC22
PDB 3 2912448633 2912448633👈 2BBA3AE39C32589EE0635F97B90AB301
- PDBに対し、DMLを実行(今回は SCOTT スキーマおよびサンプルオブジェクトを作成)
- CDB$ROOTからオンラインREDOログのダンプを生成する
SYS@ORCL19C> ALTER SYSTEM DUMP REDO
ダンプの結果はトレース・ファイルに出力されるため、その一部でCON_UIDを確認する
REDO RECORD - Thread:1 RBA: 0x00001b.0001d15e.010c LEN: 0x0064 VLD: 0x01 CON_UID: 1
SCN: 0x0000000000356415 SUBSCN: 2 01/27/2025 00:55:35
CHANGE #1 CON_ID:1 TYP:0 CLS:8 AFN:3 DBA:0x00c1ae28 OBJ:75684 SCN:0x00000000003562b7 SEQ:1 OP:13.22 ENC:0 RBL:0 FLG:0x0000
Redo on Level1 Bitmap Block
Redo to mark block free
offset: 4 length:1 xidslot:0 state:3
ncmt:0
Commit Slot list
locking transaction: 0x0000.000.00000000
…… (中略)
REDO RECORD - Thread:1 RBA: 0x00001b.0004c59e.0038 LEN: 0x0134 VLD: 0x01 CON_UID: 2912448633👈
SCN: 0x00000000003607f1 SUBSCN: 32 01/27/2025 12:53:41
CHANGE #1 CON_ID:3 TYP:0 CLS:32 AFN:11 DBA:0x02403ee8 OBJ:4294967295 SCN:0x00000000003607f1 SEQ:31 OP:5.1 ENC:0 RBL:0 FLG:0x0000
ktudb redo: siz: 100 spc: 1270 flg: 0x0022 seq: 0x0136 rec: 0x49
xid: 0x0008.014.000003c6
ktubu redo: slt: 20 wrp: 966 flg: 0x0000 prev dba: 0x00000000 rci: 72 opc: 10.22 [objn: 718 objd: 718 tsn: 0]
[Undo type ] Regular undo [User undo done ] No [Last buffer split] No
1つのREDOログに CDB$ROOTおよび PDBのそれぞれが変更履歴を書き込んでいる事が確認できた。
最後に
マルチテナント・アーキテクチャは12cから導入され、21cからはCDB構成のみがサポート対象となりました。従来の non-CDB構成を可能な限り継承する目的でシングル・テナント(1つのPDBのみ)で実装・運用されるケースも複数の(多いと100を超える) PDBを実装するケースもあるようです。
オンラインREDOやアーカイブ・ログはCDB (CDB$ROOT)の管理下というイメージが強かったのですが、複数のPDBから共有されている感覚に変わりつつあるようです。