LoginSignup
5
3

More than 1 year has passed since last update.

[OCI]東京リージョンにあるPDBのリフレッシュ可能クローンを大阪リージョンにあるCDB内に作成してみた

Last updated at Posted at 2021-10-28

はじめに

東京リージョンにあるDBCS上のPDBのリフレッシュ可能クローンを大阪リージョンにあるDBCSインスタンス上のCDB内に作成する手順を検証してみました。

スライド2.jpeg

おおまかな手順として、以下のような流れになります。

  1. 東京リージョン、大阪リージョンに仮想クラウドネットワーク(VCN)を構成する
  2. VCN間をリモート・ピアリングで接続する
  3. VCN間でプライベートDNSによる名前解決を可能にする
  4. 東京リージョン、大阪リージョンのVCN内にDBCSインスタンスを作成する
  5. 大阪リージョンのCDBから東京リージョンのCDBにデータベース・リンクを作成する
  6. 東京リージョンにあるPDBのリフレッシュ可能クローンを大阪リージョンのCDB内に作成する
  7. リフレッシュ操作によって東京リージョンのPDBの変更が大阪リージョンのクローンに反映されるか確認する

1. 東京リージョン、大阪リージョンにネットワークを構成する

まずは東京、大阪の各リージョンにVCNを作成し、ネットワークを構成します。
スライド3.jpeg

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

これまでの作業で、下の図の状態になりました。
スライド3.jpeg

2. VCN間をリモート・ピアリングで接続する

次に、VCN_TokyoとVCN_Osakaの間で通信を行うためにVCN間をリモート・ピアリングで接続します。
スライド4.jpeg

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

スライド4.jpeg

3. VCN間でプライベートDNSによる名前解決を可能にする

VCNのプライベートDNSリゾルバのエンドポイントを作成し、VCNをまたいだ通信でも名前解決ができるようにします。
スライド5.jpeg

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

ここまでの作業で、下の図の状態になりました。

スライド5.jpeg

4. 東京リージョン、大阪リージョンのVCN内にDBCSインスタンスを作成する

各リージョンにDBCSインスタンスを作成します。
スライド6.jpeg

<東京リージョン>

入力項目 入力値
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ウォレットに使用 チェックをオン
ワークロード・タイプ 任意
自動バックアップ構成の有効化 任意

ここまでの作業で、下の図のような構成になりました。
スライド6.jpeg

5. 大阪リージョンのCDBから東京リージョンのCDBにデータベース・リンクを作成する

大阪リージョンにあるCDB「OSAKACDB」から、東京リージョンにあるCDB「TOKYOCDB」へのデータベース・リンクを作成します。
スライド7.jpeg

<東京リージョン>
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'; 

これまでの作業で、下の図のような構成になりました。
スライド7.jpeg

6. 東京リージョンにあるPDBのリフレッシュ可能クローンを大阪リージョンのCDB内に作成する

東京リージョンのCDB「TOKYOCDB」内にあるPDB「TOKYO_PDB」のリフレッシュ可能クローン「TOKYO_PDB_CLONE」を大阪リージョンのCDB「OSAKACDB」内に作成します。
スライド8.jpeg

<東京リージョン>
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

ここまでの作業で、下の図のような構成が完成しました。
スライド8.jpeg

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に反映されていることが確認できました。

5
3
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
5
3