11
1

[Oracle Database] Refreshable Clone PDBを作成してみてみた

Last updated at Posted at 2024-02-18

Oracle Database 12c Release 2 (12.2) の新機能 リフレッシュ可能なクローンPDB (Refreshable PDB Clone) は、ソースPDBと定期的に同期できる読取り専用クローンです。

mojikyo45_640-2.gif

・ 同期
クローン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]をクリック
Tnsnames_Connection01.jpg

2) Pluggable Database Connection(接続文字列)確認
Connection Strings から Long Format をコピー
Tnsnames_Connection02.jpg

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 の複数のリリースに渡る変更、サポート終了および非推奨リスト

11
1
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
11
1