はじめに
東京リージョンにあるDBCS上のPDBのリフレッシュ可能クローンを大阪リージョンにあるDBCSインスタンス上のCDB内に作成する手順を検証してみました。
おおまかな手順として、以下のような流れになります。
- 東京リージョン、大阪リージョンに仮想クラウドネットワーク(VCN)を構成する
- VCN間をリモート・ピアリングで接続する
- VCN間でプライベートDNSによる名前解決を可能にする
- 東京リージョン、大阪リージョンのVCN内にDBCSインスタンスを作成する
- 大阪リージョンのCDBから東京リージョンのCDBにデータベース・リンクを作成する
- 東京リージョンにあるPDBのリフレッシュ可能クローンを大阪リージョンのCDB内に作成する
- リフレッシュ操作によって東京リージョンのPDBの変更が大阪リージョンのクローンに反映されるか確認する
1. 東京リージョン、大阪リージョンにネットワークを構成する
まずは東京、大阪の各リージョンにVCNを作成し、ネットワークを構成します。

1.VCNの作成
<東京リージョン>
VCN「VCN_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Tokyo |
| IPv4 CIDRブロック | 10.0.0.0/16 |
<大阪リージョン>
VCN「VCN_Osaka」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Osaka |
| IPv4 CIDRブロック | 10.1.0.0/16 |
2.インターネット・ゲートウェイの作成
<東京リージョン>
インターネット・ゲートウェイ「IG_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | IG_Tokyo |
<大阪リージョン>
インターネット・ゲートウェイ「IG_Osaka」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | IG_Osaka |
3.動的ルーティング・ゲートウェイの作成
<東京リージョン>
動的ルーティング・ゲートウェイ「DRG_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | DRG_Tokyo |
<大阪リージョン>
動的ルーティング・ゲートウェイ「DRG_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | DRG_OSaka |
4.DRGアタッチメントの作成
<東京リージョン>
DRGアタッチメント「VCN_Tokyo_DRG」を作成し、DRG「DRG_Tokyo」を「VCN_Tokyo」にアタッチします。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Tokyo_DRG |
| DRGの選択 | DRG_Tokyo |
<大阪リージョン>
DRGアタッチメント「VCN_Osaka_DRG」を作成し、DRG「DRG_Osaka」を「VCN_Osaka」にアタッチします。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Osaka_DRG |
| DRGの選択 | DRG_Osaka |
5.ルート表へのルート・ルールの追加
<東京リージョン>
VCN作成時に作成されたデフォルトのルート表「Default Route Table for VCN_Tokyo」にルート・ルールを追加します。
・インターネット宛のトラフィックをIG_Tokyoにルーティングするルート・ルール
| 入力項目 | 入力値 |
|---|---|
| ターゲット・タイプ | インターネット・ゲートウェイ |
| 宛先CIDRブロック | 0.0.0.0/0 |
| ターゲット・インターネット・ゲートウェイ | IG_Tokyo |
・VCN_Osaka(10.1.0.0/16)宛のトラフィックをDRG_Tokyoにルーティングするルート・ルール
| 入力項目 | 入力値 |
|---|---|
| ターゲット・タイプ | 動的・ルーティング・ゲートウェイ |
| 宛先CIDRブロック | 10.1.0.0/16 |
| ターゲット・動的ルーティング・ゲートウェイ | DRG_Tokyo(変更不可) |
<大阪リージョン>
VCN作成時に作成されたデフォルトのルート表「Default Route Table for VCN_Osaka」にルート・ルールを追加します。
・インターネット宛のトラフィックをIG_Osakaにルーティングするルート・ルール
| 入力項目 | 入力値 |
|---|---|
| ターゲット・タイプ | インターネット・ゲートウェイ |
| 宛先CIDRブロック | 0.0.0.0/0 |
| ターゲット・インターネット・ゲートウェイ | IG_Osaka |
・VCN_Tokyo(10.0.0.0/16)宛のトラフィックをDRG_Osakaにルーティングするルート・ルール
| 入力項目 | 入力値 |
|---|---|
| ターゲット・タイプ | 動的・ルーティング・ゲートウェイ |
| 宛先CIDRブロック | 10.1.0.0/16 |
| ターゲット・動的ルーティング・ゲートウェイ | DRG_Osaka(変更不可) |
6.セキュリティ・リストへのイングレス・ルールの追加
<東京リージョン>
VCN作成時に作成されたデフォルトのセキュリティ・リスト「Default Security List for VCN_Tokyo」にイングレス・ルールを追加します。
・VCN_Osaka(10.1.0.0/16)からのトラフィックを許可するためのイングレス・ルール
| 入力項目 | 入力値 |
|---|---|
| ステートレス | チェックをオフ |
| ソースタイプ | CIDR |
| ソースCIDR | 10.1.0.0/16 |
| IPプロトコル | 全てのプロトコル |
<大阪リージョン>
VCN作成時に作成されたデフォルトのセキュリティ・リスト「Default Security List for VCN_Osaka」にイングレス・ルールを追加します。
・VCN_Tokyo(10.0.0.0/16)からのトラフィックを許可するためのイングレス・ルール
| 入力項目 | 入力値 |
|---|---|
| ステートレス | チェックをオフ |
| ソースタイプ | CIDR |
| ソースCIDR | 10.0.0.0/16 |
| IPプロトコル | 全てのプロトコル |
7.サブネットの作成
<東京リージョン>
VCN_Tokyo内にサブネット「Subnet_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | Subnet_Tokyo |
| サブネット・タイプ | リージョナル(推奨) |
| CIDRブロック | 10.0.1.0/24 |
| ルート表 | Default Route Table for VCN_Tokyo |
| サブネット・アクセス | パブリック・サブネット |
| DNS解決 | チェックをオン |
| DNSラベル | 空欄のまま |
| DHCPオプション | Default DHCP Options for VCN_Tokyo |
| セキュリティ・リスト | Default Security List for VCN_Tokyo |
<大阪リージョン>
VCN_Osaka内にサブネット「Subnet_Osaka」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | Subnet_Osaka |
| サブネット・タイプ | リージョナル(推奨) |
| CIDRブロック | 10.1.1.0/24 |
| ルート表 | Default Route Table for VCN_Osaka |
| サブネット・アクセス | パブリック・サブネット |
| DNS解決 | チェックをオン |
| DNSラベル | 空欄のまま |
| DHCPオプション | Default DHCP Options for VCN_Osaka |
| セキュリティ・リスト | Default Security List for VCN_Osaka |
2. VCN間をリモート・ピアリングで接続する
次に、VCN_TokyoとVCN_Osakaの間で通信を行うためにVCN間をリモート・ピアリングで接続します。

1.リモート・ピアリング接続の作成
<東京リージョン>
DRG「DRG_Tokyo」にリモート・ピアリング接続「VCN_Tokyo to VCN_Osaka」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Tokyo to VCN_Osaka |
<大阪リージョン>
DRG「DRG_Osaka」にリモート・ピアリング接続「VCN_Osaka to VCN_Tokyo」を作成します。
| 入力項目 | 入力値 |
|---|---|
| 名前 | VCN_Osaka to VCN_Tokyo |
2.リモート・ピアリング接続を確立します。
<東京リージョン>
リモート・ピアリング接続「VCN_Tokyo to VCN_Osaka」から「VCN_Osaka to VCN_Tokyo」への接続を確立します。
| 入力項目 | 入力値 |
|---|---|
| リージョン | ap-osaka-1 |
| リモート・ピアリング接続OCID | 「VCN_Osaka to VCN_Tokyo」のOCID |
<大阪リージョン>
リモート・ピアリング接続「VCN_Osaka to VCN_Tokyo」から「VCN_Tokyo to VCN_Osaka」への接続を確立します。
| 入力項目 | 入力値 |
|---|---|
| リージョン | ap-tokyo-1 |
| リモート・ピアリング接続OCID | 「VCN_Tokyo to VCN_Osaka」のOCID |
3. VCN間でプライベートDNSによる名前解決を可能にする
VCNのプライベートDNSリゾルバのエンドポイントを作成し、VCNをまたいだ通信でも名前解決ができるようにします。

1.リスニング用エンドポイントの作成
<東京リージョン>
| 入力項目 | 入力値 |
|---|---|
| 名前 | DNS_EP_VCN_Tokyo_Listen |
| サブネットの選択 | Subnet_Tokyo |
| エンドポイント・タイプ | リスニング |
| リスニングIPアドレス | 10.0.1.254 |
| ネットワーク・セキュリティ・グループを使用してトラフィックを制御 | チェックをオフ |
<大阪リージョン>
| 入力項目 | 入力値 |
|---|---|
| 名前 | DNS_EP_VCN_Osaka_Listen |
| サブネットの選択 | Subnet_Osaka |
| エンドポイント・タイプ | リスニング |
| リスニングIPアドレス | 10.1.1.254 |
| ネットワーク・セキュリティ・グループを使用してトラフィックを制御 | チェックをオフ |
2.転送用エンドポイントの作成
<東京リージョン>
| 入力項目 | 入力値 |
|---|---|
| 名前 | DNS_EP_VCN_Tokyo_Trans |
| サブネットの選択 | Subnet_Tokyo |
| エンドポイント・タイプ | 転送 |
| 転送IPアドレス | 10.0.1.253 |
| ネットワーク・セキュリティ・グループを使用してトラフィックを制御 | チェックをオフ |
<大阪リージョン>
| 入力項目 | 入力値 |
|---|---|
| 名前 | DNS_EP_VCN_Osaka_Trans |
| サブネットの選択 | Subnet_Osaka |
| エンドポイント・タイプ | 転送 |
| 転送IPアドレス | 10.1.1.253 |
| ネットワーク・セキュリティ・グループを使用してトラフィックを制御 | チェックをオフ |
3.問合せルールの作成(追加)
<東京リージョン>
| 入力項目 | 入力値 |
|---|---|
| ルール条件 | ドメイン |
| ドメイン | vcnosaka.oraclevcn.com |
| ルール・アクション | 転送(変更不可) |
| ソース・エンドポイント | DNS_EP_VCN_Tokyo_Trans |
| 宛先IPアドレス | 10.1.1.254 |
<大阪リージョン>
| 入力項目 | 入力値 |
|---|---|
| ルール条件 | ドメイン |
| ドメイン | vcntokyo.oraclevcn.com |
| ルール・アクション | 転送(変更不可) |
| ソース・エンドポイント | DNS_EP_VCN_Osaka_Trans |
| 宛先IPアドレス | 10.0.1.254 |
ここまでの作業で、下の図の状態になりました。
4. 東京リージョン、大阪リージョンのVCN内にDBCSインスタンスを作成する
<東京リージョン>
| 入力項目 | 入力値 |
|---|---|
| DBシステムの名前 | DBSystem_Tokyo |
| 可用性ドメインの選択 | AD-1 |
| シェイプ・タイプの選択 | 仮想マシン |
| シェイプの選択 | 任意のシェイプ |
| 合計ノード数 | 1 |
| Oracle Database エディション | 任意のエディション |
| 使用可能なストレージ(GB) | 任意の容量 |
| SSHキーの追加 | 「SSHキー・ペアの生成」を選択し、秘密キーを保存 |
| ライセンス・タイプの選択 | 含まれるライセンス |
| 仮想クラウド・ネットワーク | VCN_Tokyo |
| クライアントのサブネット | Subnet_Tokyo |
| ホスト名接頭辞 | tokyodb |
| プライベートIPアドレス | 10.0.1.200 |
| タイム・ゾーン | Asia/Tokyo |
| データベース名 | TOKYOCDB |
| 一意のデータベース名の接尾辞 | 空欄のまま |
| データベース・イメージ | Oracle Database 19c |
| PDB名 | TOKYO_PDB |
| 管理者資格証明:パスワード | 任意のパスワード(今回はDemo#1Demo#1) |
| 管理者パスワードをTDEウォレットに使用 | チェックをオン |
| ワークロード・タイプ | 任意 |
| 自動バックアップ構成の有効化 | 任意 |
<大阪リージョン>
| 入力項目 | 入力値 |
|---|---|
| DBシステムの名前 | DBSystem_Osaka |
| 可用性ドメインの選択 | AD-1 |
| シェイプ・タイプの選択 | 仮想マシン |
| シェイプの選択 | 任意のシェイプ |
| 合計ノード数 | 1 |
| Oracle Database エディション | 任意のエディション |
| 使用可能なストレージ(GB) | 任意の容量 |
| SSHキーの追加 | 「SSHキー・ペアの生成」を選択し、秘密キーを保存 |
| ライセンス・タイプの選択 | 含まれるライセンス |
| 仮想クラウド・ネットワーク | VCN_Osaka |
| クライアントのサブネット | Subnet_Osaka |
| ホスト名接頭辞 | osakadb |
| プライベートIPアドレス | 10.1.1.200 |
| タイム・ゾーン | Asia/Tokyo |
| データベース名 | OSAKACDB |
| 一意のデータベース名の接尾辞 | 空欄のまま |
| データベース・イメージ | Oracle Database 19c |
| PDB名 | OSAKA_PDB |
| 管理者資格証明:パスワード | 任意のパスワード(今回はDemo#1Demo#1) |
| 管理者パスワードをTDEウォレットに使用 | チェックをオン |
| ワークロード・タイプ | 任意 |
| 自動バックアップ構成の有効化 | 任意 |
5. 大阪リージョンのCDBから東京リージョンのCDBにデータベース・リンクを作成する
大阪リージョンにあるCDB「OSAKACDB」から、東京リージョンにあるCDB「TOKYOCDB」へのデータベース・リンクを作成します。

<東京リージョン>
1.データベース・リンクで使用する共通ユーザの作成
DBSystem_TokyoにopcユーザでSSH接続します。
sudoコマンドでoracleユーザにスイッチします。
sudo su - oracle
SQL*PlusでTOKYOCDBに管理者ユーザとして接続します。
sqlplus / as sysdba
データベース・リンクで使用する共通ユーザ「c##remote_clone_user」を作成し、必要な権限を付与します。
CREATE USER c##remote_clone_user IDENTIFIED BY Demo#1Demo#1;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##remote_clone_user CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##remote_clone_user CONTAINER=ALL;
GRANT SYSOPER TO c##remote_clone_user CONTAINER=ALL;
SQL*Plusを終了します。
exit
<大阪リージョン>
1.tnsnames.oraの編集
DBSystem_OsakaにopcユーザでSSH接続します。
sudoコマンドでoracleユーザにスイッチします。
sudo su - oracle
TOKYOCDBに接続するためのエイリアスをtnsnames.oraに追加します。
vi $ORACLE_HOME/network/admin/tnsnames.ora
DBSystem_Tokyoのtnsnames.oraを参考にしてTOKYOCDBに接続するためのエイリアスを追加します。
※SERVICE_NAMEのtokyocdb_xxxxのxxxxの部分は環境によって異なります。
TOKYOCDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = tokyodb.subnettokyo.vcntokyo.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = tokyocdb_xxxx.subnettokyo.vcntokyo.oraclevcn.com)
)
)
SQL*PlusでOSAKACDBに管理者ユーザとして接続します。
sqlplus / as sysdba
データベース・リンク「tokyocdb_link」を作成します。
CREATE PUBLIC DATABASE LINK tokyocdb_link CONNECT TO c##remote_clone_user IDENTIFIED BY Demo#1Demo#1 USING 'TOKYOCDB';
6. 東京リージョンにあるPDBのリフレッシュ可能クローンを大阪リージョンのCDB内に作成する
東京リージョンのCDB「TOKYOCDB」内にあるPDB「TOKYO_PDB」のリフレッシュ可能クローン「TOKYO_PDB_CLONE」を大阪リージョンのCDB「OSAKACDB」内に作成します。

<東京リージョン>
1.tnsnames.oraの編集
この後の作業のためにtnsnames.oraにTOKYO_PDBに直接アクセスするためのエイリアスを追加しておきます。
TOKYO_PDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = tokyodb.subnettokyo.vcntokyo.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = tokyo_pdb.subnettokyo.vcntokyo.oraclevcn.com)
)
)
SQL*PlusでTOKYO_PDBに管理者として接続します。
sqlplus sys/Demo#1Demo#1@tokyo_pdb as sysdba
テスト用ユーザ「testuser」を作成し、必要な権限を付与します。
GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO testuser IDENTIFIED BY Demo#1Demo#1;
SQL*Plusを終了します。
exit
SQL*PlusでTOKYO_PDBにtestuserとして接続します。
sqlplus testuser/Demo#1Demo#1@tokyo_pdb
テスト用テーブル「testtable」を作成します。
SQL> CREATE TABLE testtable AS SELECT * FROM user_role_privs;
Table created.
testtableの行数を確認します。
SQL> SELECT count(*) FROM testtable;
COUNT(*)
----------
2
SQL*Plusを終了します。
exit
<大阪リージョン>
SQL*PlusでOSAKACDBに管理者として接続します。
sqlplus / as sysdba
TOKYO_PDBのリフレッシュ可能クローンPDB「TOKYO_PDB_CLONE」を作成します。
SQL> CREATE PLUGGABLE DATABASE tokyo_pdb_clone FROM tokyo_pdb@tokyocdb_link KEYSTORE IDENTIFIED BY Demo#1Demo#1 REFRESH MODE MANUAL;
Pluggable database created.
PDBの状態を確認します。
SQL> col name for a20
SQL> SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
OSAKA_PDB READ WRITE
TOKYO_PDB_CLONE MOUNTED
リフレッシュ可能クローンで作成されたPDB「TOKYO_PDB_CLONE」はマウント状態になります。
TOKYO_PDB_CLONEを読み取り専用でオープンします。
SQL> ALTER PLUGGABLE DATABASE tokyo_pdb_clone OPEN READ ONLY;
Pluggable database altered.
再度、PDBの状態を確認してみます。
SQL> col name for a20
SQL> SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
-------------------- ----------
PDB$SEED READ ONLY
OSAKA_PDB READ WRITE
TOKYO_PDB_CLONE READ ONLY
TOKYO_PDB_CLONEが読み取り専用でオープンされていることが確認できました。
TOKYO_PDB_CLONEに接続してみます。
SQL> ALTER SESSION SET CONTAINER = tokyo_pdb_clone;
Session altered.
testuserスキーマのtesttableのレコード数を確認してみます。
SQL> SELECT count(*) FROM testuser.testtable;
COUNT(*)
----------
2
TOKYO_PDBの内容がクローンされていることが確認できました。
SQL*Plusを終了します。
exit
7. リフレッシュ操作によって東京リージョンのPDBの変更が大阪リージョンのクローンに反映されるか確認する
<東京リージョン>
TOKYO_PDBにtestuserとして接続します。
sqlplus testuser/Demo#1Demo#1@tokyo_pdb
testtableにレコードを追加します。
SQL> INSERT INTO testtable SELECT * FROM user_role_privs;
2 rows created.
SQL> COMMIT;
Commit complete.
testtableのレコード数を確認します。
SQL> SELECT COUNT(*) FROM testtable;
COUNT(*)
----------
4
testtableのレコード数が増えている(2→4)ことが確認できました。
<大阪リージョン>
管理者ユーザでOSAKACDBに接続します。
sqlplus / as sysdba
TOKYO_PDB_CLONEに接続します。
SQL> ALTER SESSION SET CONTAINER = tokyo_pdb_clone;
Session altered.
クローンをリフレッシュする際はPDBがクローズ状態である必要があるため、TOKYO_PDB_CLONEをクローズします。
SQL> ALTER PLUGGABLE DATABASE CLOSE;
Pluggable database altered.
TOKYO_PDB_CLONEをリフレッシュします。
SQL> ALTER PLUGGABLE DATABASE REFRESH;
Pluggable database altered.
TOKYO_PDB_CLONEを読み取り専用でオープンします。
SQL> ALTER PLUGGABLE DATABASE OPEN READ ONLY;
Pluggable database altered.
testuserスキーマのtesttable表のレコード数を確認します。
SQL> SELECT count(*) FROM testuser.testtable;
COUNT(*)
----------
4
東京リージョンのTOKYO_PDBの変更内容が、リフレッシュ操作によって、大阪リージョンのTOKYO_PDB_CLONEに反映されていることが確認できました。

