はじめに
東京リージョンにある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に反映されていることが確認できました。