Oracle Database 12c Release 2 (12.2) の新機能 リフレッシュ可能なクローンPDB (Refreshable PDB Clone) は、ソースPDBと定期的に同期できる読取り専用クローンです。
・ 同期
クローンPDBをリフレッシュすると、最後のREDOログの適用以降に蓄積されたREDOでクローンPDBが更新されます。
REFRESH MODE句で指定した値に応じて、同期は自動または手動で行われます。
・ アップグレード時間短縮
リリース・バージョンが異なる CDB 間で リフレッシュ可能な PDB を作成し、最後の瞬間まで同期を保ち、最後に移行するPDBをアップグレードすることでバージョンアップのダウンタイム時間を短縮することができます。
・ 可用性とロードバランシング(18c新機能)
リフレッシュ可能なクローンは、読取り専用でOPENでき、ソースPDBとそのリフレッシュ可能なクローンのロールを切り替えることができます。このスイッチオーバーは、CDB 間のロードバランシングや、ソース PDB に障害が発生した場合に役立ちます。
ということで、リフレッシュ可能なクローン (Refreshable Clone) PDBを作成してみてみます。
■ 環境
今回は、同一バージョンで Refreshable Clone PDBを作成してみてみます。
Source | Target | |
---|---|---|
Database version | 23.3.0.23.09 | 23.3.0.23.09 |
Host Name | basedb23c-tokyo | basedb23c-shibuya |
PDB Name | PDB_TOKYO | REFRESHABLE_CLONE_PDB |
■ 前提条件
次の前提条件を満たしている必要があります。
・ リモートPDBのクローニング前提条件
・ リフレッシュ可能なクローンPDBの要件
■ Oracle Database 作成
今回は、Oracle Cloud の Base Database Service を使用します。作成手順は次を参考にできます。
■ Source DB 設定
● CDB へ Refreshable Clone用 USER作成
1) CDB へ Login
[oracle@basedb23c-tokyo ~]$ sql / as sysdba
SQLcl: Release 23.2 Production on Sat Feb 17 10:33:45 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23c EE High Perf Release 23.0.0.0.0 - Production
Version 23.3.0.23.09
SQL>
2) Create User
データベース リンクが接続するリモート データベースのユーザーは、CREATE PLUGGABLE DATABASE権限が必要です。
SQL> CREATE USER c##refresh IDENTIFIED BY <Password> CONTAINER=ALL;
User C##REFRESH created.
SQL> GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO c##refresh CONTAINER=ALL;
Grant succeeded.
● Source PDB環境確認
1) Local UNDO 確認
Local UNDO は、クローン作成プロセス中にソースが読み取り/書き込み状態を維持できるようにするために必要です。
SQL> SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE
_____________________ _________________
LOCAL_UNDO_ENABLED TRUE
2) 既存 PDB確認
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ____________ _____________ _____________
2 PDB$SEED READ ONLY NO
4 PDB_TOKYO READ WRITE NO
● 既存 PDBへテスト・データ作成
SQL> alter session set container=PDB_TOKYO;
Session altered.
SQL> CREATE TABLE test_table1 (id NUMBER(8), now DATE) TABLESPACE USERS;
Table TEST_TABLE1 created.
SQL> INSERT INTO test_table1 VALUES (1,SYSDATE);
1 row inserted.
SQL> commit;
Commit complete.
SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';
Session altered.
SQL> select * from test_table1;
ID NOW
_____ ______________________
1 2024/02/17 10:58:26
■ Target DB 設定
● SQL*NET設定
Oracle Cloud の場合、OCIコンソールから 接続文字列を確認し、tnsnames.ora を編集して Sorce CDB 接続文字列を追加します
1) ソースPDB画面
PDB画面で [PDB connection]をクリック
2) Pluggable Database Connection(接続文字列)確認
Connection Strings から Long Format をコピー
3) tnsnames.ora 編集
コピーしたソース PDB の接続文字列 をターゲット データベースの tnsnames.ora に追加します。
[oracle@basedb23c-shibuya ~]$ vi $ORACLE_HOME/network/admin/tnsnames.ora
[oracle@basedb23c-shibuya ~]$ cat $ORACLE_HOME/network/admin/tnsnames.ora
PDB_TOKYO =
(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.0.2)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=PDB_Tokyo.publicsubnet.vcnexatokyo.oraclevcn.com)))
● Create dblink
ターゲット DB 上に ソース DB への DBLink を作成します。
1) SQLcl 接続
[oracle@basedb19c-shibuya ~]$ sql / as sysdba
SQLcl: Release 23.2 Production on Sat Feb 17 11:14:45 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23c EE Extreme Perf Release 23.0.0.0.0 - Production
Version 23.3.0.23.09
SQL>
2) Public DBLink 作成
SQL> create public database link refresh_pdb connect to c##refresh identified by <Password> using 'PDB_TOKYO';
Database link REFRESH_PDB created.
3) Public DBLink 作成確認
データベースリンクがターゲットデータベースで機能しているかどうかを確認します
SQL> alter session set global_names=false;
Session altered.
SQL> select * from dual@refresh_pdb;
DUMMY
________
X
● Refreshable Clone PDB作成
1) 既存PDB確認
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ______________ _____________ _____________
2 PDB$SEED READ ONLY NO
3 PDB_SHIBUYA READ WRITE NO
2) Refreshable Clone PDB作成
SQL> CREATE PLUGGABLE DATABASE Refreshable_Clone_PDB FROM PDB_TOKYO@refresh_pdb REFRESH MODE EVERY 30 MINUTES KEYSTORE IDENTIFIED BY ・・・;
Pluggable database REFRESHABLE_CLONE_PDB created.
-- Alert LOG確認
2024-02-17T11:16:36.808932+00:00
Opatch validation is skipped for PDB REFRESHABLE_CLONE_PDB (con_id=4)
2024-02-17T11:16:40.192589+00:00
****************************************************************
Pluggable Database REFRESHABLE_CLONE_PDB 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-0x000000000000011a
****************************************************************
2024-02-17T11:16:43.201120+00:00
Recovering pdb-4099 from SCN 78504552 to SCN 78504581 trc /u01/app/oracle/diag/rdbms/cdb_shibuya/CDB23c/trace/CDB23c_ora_69906.trc
REFRESHABLE_CLONE_PDB(4):Media Recovery Start
REFRESHABLE_CLONE_PDB(4): Started logmerger process under PDB 4
2024-02-17T11:16:43.279602+00:00
REFRESHABLE_CLONE_PDB(4):Parallel Media Recovery started with 4 slaves
2024-02-17T11:16:43.558736+00:00
REFRESHABLE_CLONE_PDB(4):Incomplete Recovery applied until change 78504581 time 02/17/2024 11:16:40
2024-02-17T11:16:43.561349+00:00
REFRESHABLE_CLONE_PDB(4):.... (PID:69906): Media Recovery Complete [dbsdrv.c:15698]
2024-02-17T11:16:43.678720+00:00
alter pluggable database REFRESHABLE_CLONE_PDB refresh
2024-02-17T11:16:46.162368+00:00
Recovering pdb-4099 from SCN 78504581 to SCN 78504601 trc /u01/app/oracle/diag/rdbms/cdb_shibuya/CDB23c/trace/CDB23c_j000_64390.trc
REFRESHABLE_CLONE_PDB(4):Media Recovery Start
REFRESHABLE_CLONE_PDB(4): Started logmerger process under PDB 4
2024-02-17T11:16:46.241525+00:00
REFRESHABLE_CLONE_PDB(4):Parallel Media Recovery started with 4 slaves
2024-02-17T11:16:46.479791+00:00
REFRESHABLE_CLONE_PDB(4):Incomplete Recovery applied until change 78504601 time 02/17/2024 11:16:43
2024-02-17T11:16:46.482680+00:00
REFRESHABLE_CLONE_PDB(4):.... (PID:64390): Media Recovery Complete [dbsdrv.c:15698]
Completed: alter pluggable database REFRESHABLE_CLONE_PDB refresh
3) Refreshable Clone PDB作成確認
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ________________________ _____________ _____________
2 PDB$SEED READ ONLY NO
3 PDB_SHIBUYA READ WRITE NO
4 REFRESHABLE_CLONE_PDB MOUNTED
4) Refreshable Clone PDB Read
SQL> alter pluggable database REFRESHABLE_CLONE_PDB open read only;
Pluggable database REFRESHABLE_CLONE_PDB altered.
-- Alert LOG確認
REFRESHABLE_CLONE_PDB(4):Autotune of undo retention is turned on.
2024-02-17T11:19:32.828729+00:00
REFRESHABLE_CLONE_PDB(4):Pluggable database REFRESHABLE_CLONE_PDB dictionary check beginning
REFRESHABLE_CLONE_PDB(4):Pluggable Database REFRESHABLE_CLONE_PDB Dictionary check complete
2024-02-17T11:19:34.502683+00:00
REFRESHABLE_CLONE_PDB(4):Opening pdb with no Resource Manager plan active
Completed: Pluggable database REFRESHABLE_CLONE_PDB opened read only
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ________________________ _____________ _____________
2 PDB$SEED READ ONLY NO
3 PDB_SHIBUYA READ WRITE NO
4 REFRESHABLE_CLONE_PDB READ ONLY NO
5) テストデータ確認
SQL> alter session set container=REFRESHABLE_CLONE_PDB;
Session altered.
SQL> select * from test_table1;
ID NOW
_____ ______________________
1 2024/02/17 10:58:26
■ 手動 Refresh確認
RefreshするにはPDBをCLOSEする必要があります。
● Source PDB更新
1) Source PDB接続
[oracle@basedb23c-tokyo ~]$ sql / as sysdba
SQLcl: Release 23.2 Production on Sat Feb 17 11:23:26 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23c EE High Perf Release 23.0.0.0.0 - Production
Version 23.3.0.23.09
SQL> alter session set container=PDB_TOKYO;
Session altered.
2) テスト・データINSERT
SQL> INSERT INTO test_table1 VALUES (2,SYSDATE);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_table1;
ID NOW
_____ ______________________
1 2024/02/17 10:58:26
2 2024/02/17 11:24:30
● Target PDB確認
1) Target PDB接続
[oracle@basedb23c-shibuya ~]$ sql / as sysdba
SQLcl: Release 23.2 Production on Sat Feb 17 11:25:09 2024
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Connected to:
Oracle Database 23c EE Extreme Perf Release 23.0.0.0.0 - Production
Version 23.3.0.23.09
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ________________________ _____________ _____________
2 PDB$SEED READ ONLY NO
3 PDB_SHIBUYA READ WRITE NO
4 REFRESHABLE_CLONE_PDB READ ONLY NO
2) Target PDB CLOSE
SQL> ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB CLOSE IMMEDIATE;
Pluggable database REFRESHABLE_CLONE_PDB altered.
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
_________ ________________________ _____________ _____________
2 PDB$SEED READ ONLY NO
3 PDB_SHIBUYA READ WRITE NO
4 REFRESHABLE_CLONE_PDB MOUNTED
3) 手動リフレッシュ
SQL> ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB REFRESH;
Pluggable database REFRESHABLE_CLONE_PDB altered.
-- Alert Log
2024-02-17T11:26:37.463827+00:00
Recovering pdb-4099 from SCN 78504601 to SCN 78504939 trc /u01/app/oracle/diag/rdbms/cdb_shibuya/CDB23c/trace/CDB23c_ora_77694.trc
REFRESHABLE_CLONE_PDB(4):Media Recovery Start
REFRESHABLE_CLONE_PDB(4): Started logmerger process under PDB 4
2024-02-17T11:26:37.545713+00:00
REFRESHABLE_CLONE_PDB(4):Parallel Media Recovery started with 4 slaves
2024-02-17T11:26:37.917640+00:00
REFRESHABLE_CLONE_PDB(4):Incomplete Recovery applied until change 78504939 time 02/17/2024 11:26:37
2024-02-17T11:26:37.920303+00:00
REFRESHABLE_CLONE_PDB(4):.... (PID:77694): Media Recovery Complete [dbsdrv.c:15698]
4) Target PDB Open Read Only
SQL> alter pluggable database REFRESHABLE_CLONE_PDB open read only;
Pluggable database REFRESHABLE_CLONE_PDB altered.
--Alert Log
REFRESHABLE_CLONE_PDB(4):Autotune of undo retention is turned on.
2024-02-17T11:27:19.029916+00:00
REFRESHABLE_CLONE_PDB(4):Pluggable database REFRESHABLE_CLONE_PDB dictionary check beginning
REFRESHABLE_CLONE_PDB(4):Pluggable Database REFRESHABLE_CLONE_PDB Dictionary check complete
2024-02-17T11:27:20.614695+00:00
REFRESHABLE_CLONE_PDB(4):Opening pdb with no Resource Manager plan active
Completed: Pluggable database REFRESHABLE_CLONE_PDB opened read only
5) refreshable PDB に データ同期(リフレッシュ)されたことを確認
SQL> alter session set container=REFRESHABLE_CLONE_PDB;
Session altered.
SQL> select * from test_table1;
ID NOW
_____ ______________________
1 2024/02/17 10:58:26
2 2024/02/17 11:24:30
■ 自動および手動リフレッシュ・モード設定
● 手動リフレッシュ・モード
SQL> ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB REFRESH MODE MANUAL;
Pluggable database REFRESHABLE_CLONE_PDB altered.
● 自動リフレッシュ・モード
指定した時間(分単位)の経過後に自動的にリフレッシュします
このリフレッシュ・モード句では、リフレッシュ可能なPDBが1時間(60分)おきに自動的にリフレッシュされることを指定します。
SQL> ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB REFRESH MODE EVERY 60 MINUTES;
Pluggable database REFRESHABLE_CLONE_PDB altered.
● リフレッシュ可能でないPDBへ変換
ALTER PLUGGABLE DATABASE文にREFRESH MODE NONE句を含め、PDBを読取り/書込みモードでオープンすることにより、リフレッシュ可能なクローンPDBを通常のPDBに変更できます。
通常のPDBはリフレッシュ可能なクローンPDBに変更できません。リフレッシュ可能なクローンPDBが通常のPDBに変換された後は、リフレッシュ可能なクローンPDBに戻すことができません。
SQL> ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB REFRESH MODE NONE;
Pluggable database REFRESHABLE_CLONE_PDB altered.
■ 時間指定の リフレッシュ
時間指定して更新するには、手動リフレッシュ・モードで PROCEDUREを作成し、それをDBMS_SCHEDULERへ登録します。
ここでは、3AM にRefresh するよう設定してみてみます。
1) Create The refresh procedure
SQL> CREATE OR REPLACE PROCEDURE SYS.REFRESHABLE_CLONE_PDB_REFRESH
AS BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB CLOSE IMMEDIATE';
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB REFRESH';
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE REFRESHABLE_CLONE_PDB OPEN READ ONLY';
END;
/
Procedure REFRESHABLE_CLONE_PDB_REFRESH compiled
2) Create the refresh JOB
SQL> BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'REFRESHABLE_CLONE_PDB',
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.REFRESHABLE_CLONE_PDB_REFRESH',
repeat_interval => 'freq=daily;byday=mon,tue,wed,thu,fri;BYHOUR=3; BYMINUTE=1',
auto_drop => FALSE,
enabled => TRUE,
comments => 'Automatic refresh of the prod PDB clone');
END;
/
PL/SQL procedure successfully completed.
SQL> SELECT JOB_NAME, START_DATE, STATE, NEXT_RUN_DATE
from DBA_SCHEDULER_JOBS
WHERE JOB_NAME = 'REFRESHABLE_CLONE_PDB';
JOB_NAME START_DATE STATE NEXT_RUN_DATE
_____________________ ______________________________________ ____________ ______________________________________
REFRESHABLE_CLONE_PDB 17-FEB-24 02.46.23.608544000 PM UTC SCHEDULED 19-FEB-24 03.01.23.608544000 AM UTC
■ 参考
・ リフレッシュ可能なクローンPDBについて
・ Refreshable Clone PDB
・ Minimal Downtime Migration and Upgrade using Refreshable PDB Clones
・ Upgrade Testing with a Refreshable PDB – does this work?
・ Oracle Database 19c の複数のリリースに渡る変更、サポート終了および非推奨リスト
・ Oracle Database 23ai の複数のリリースに渡る変更、サポート終了および非推奨リスト