LoginSignup
0
2

More than 3 years have passed since last update.

Autonomous Database間のDBLINKの自分用メモ

Last updated at Posted at 2021-04-21

■この記事で記載すること

Autonomous Database(ADB)を用いた以下2つのパターンのDBLINK接続について、自分用メモとして記載します。
- ADBからADBへのDBLINK接続(Public IPアドレスを利用)
- ADBからADBへのDBLINK接続(VCN:Private IPアドレスを利用)

Oracle DatabaseのDBLINK自分用メモまとめページで記載した、DBLINKの基本接続の内容を前提としてます。必要に応じて参照ください。

■ADBからADBへのDBLINK接続(Public IPアドレスを利用)

● システム構成イメージ

ADB(ローカル)--[TCPS] --> ADB(リモート)

※システム構成図に変更予定

● システム構成説明

  • ADB(ローカル)とADB(リモート)を「指定されたIPおよびVCNからのセキュア・アクセスを許可」ネットワークアクセスで構成(Public IPアドレス構成) image.png ※Public IPアドレス構成だが、ADB間の通信はインターネットを経由せずクラウド内通信となる
  • ADB(ローカル)とADB(リモート)をTPCS接続でDBLINK接続

● 設定例

  • 前提
  • ADB(ローカル)にADB(リモート)接続用ウォレットファイルを登録
  • DBLINK用のクレデンシャルの登録
  • DBLINK作成

- 前提

ここでは、以下を前提として設定例を記載します。

  • ADBが2つ作成されている
    • ローカル:ADB1
    • リモート:ADB2
  • Object Storage/Bucketが作成されている
    • ADB(リモート)接続用のウォレットファイルアップロード用Bucket(bucketA)
  • bucketAへのクレデンシャルがADB1に登録されている

- ADB1にADB2接続用ウォレットファイルを登録

  • ターゲット(テーブルのコピー元)となるAutonomous Databaseのクライアント資格証明のダウンロード
  • ダウンロードしたファイルを展開してcwallet.ssoをbucketにアップロード

上記設定方法は、こちらを参照

- DBLINK用のクレデンシャルの登録

ウォレットファイル格納用ディレクトリ・オブジェクトの作成

ADB1
CREATE DIRECTORY ADB_DBLINK_DIR AS 'ADB_DBLINK_DIR';

ウォレットファイルをディレクトリ・オブジェクトにとりこみ

ADB1
BEGIN 
     DBMS_CLOUD.GET_OBJECT(
    credential_name => 'ADB1_OS_CRED',  
        object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/idqyzd41fwn7/b/bucketA/o/cwallet.sso',
        directory_name => 'ADB_DBLINK_DIR'); 
END;
/

データベースリンクのためのクレデンシャルの作成

ADB1
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'ADB_DBLINK_CRED',
    username => 'ADMIN',
    password => 'WelCome123#123#'
  );
END;
/

- DBLINK作成

DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINKプロシージャを使用して、DBリンクを作成

  • 接続情報の収集 以下情報をADB-Dのウォレットファイル内のtnsnames.oraから収集
項目 情報
hostname adb.us-ashburn-1.oraclecloud.com
port 1522
service_name xxxxxxxxxxx_ADB2_medium.adb.oraclecloud.com
ssl_server_cert_dn CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US
  • データベース・リンクを作成
ADB1
BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name => 'ADB_DBLINK', 
          hostname => 'adb.us-ashburn-1.oraclecloud.com', 
          port => '1522',
          service_name => 'xxxxxxxxxxxx_ADB2_medium.adb.oraclecloud.com',
          ssl_server_cert_dn => 'CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US',
          credential_name => 'ADB_DBLINK_CRED',
          directory_name => 'ADB_DBLINK_DIR');
END;
/
  • 接続確認

ADB-DのTableをADB-SにDBLINK経由(CTAS)で作成

ADB1
CREATE TABLE customer
AS
SELECT * FROM SH.CUSTOMERS@ADB_DBLINK;

SELECT COUNT(*) FROM CUSTOMER;

55500
ADB2
SELECT COUNT(*) FROM SH.CUSTOMERS;

55500

■ADBからADBへのDBLINK接続(VCN:Private IPアドレスを利用)

● システム構成イメージ

ADB(ローカル)--[TCPS] --> 中継サーバ --[TCPS]--> ADB(リモート)

※システム構成図に変更予定

● システム構成説明

  • ADB(ローカル)とADB(リモート)を「仮想クラウド・ネットワーク」ネットワークアクセスで構成(Private IPアドレス構成) image.png
  • ADB(ローカル)とADB(リモート)を中継サーバを介してTPCS接続でDBLINK接続

※ 2021/04/21現在では、ADB(ローカル)とADB(リモート)を「仮想クラウド・ネットワーク」ネットワークアクセスで構成(Private IPアドレス構成)する場合は、中継サーバ経由とする必要があり、将来的に、「Private IP Address同士でDBLINKを確立できる方法」が提供される予定
※ 本手順は一例で、上記中継サーバを経由する方法以外にもCMAN(Oracle Connection Manager)を用いる方法などがある

● 設定例

※ 本設定例では、「ADBからADBへのDBLINK接続(Public IPアドレスを利用)」が完了していることを前提に設定を進めます。

  • 前提
  • ウォレットファイルの作成、配置
  • 「ADBからADBへのDBLINK接続(Public IPアドレスを利用)」で作成したADBのネットワークアクセスをVCN経由に更新
  • 中継サーバのデプロイ
  • DBLINKの作成

- 前提

ここでは、以下を前提として設定例を記載します。

  • 以下の要素を持ったVCNが構成されている
    • Publicサブネット
    • Privateサブネット
    • Internet Gateway
    • NAT Gateway
  • ADBが2ノードデプロイ済み

- 「ADBからADBへのDBLINK接続(Public IPアドレスを利用)」で作成したADBのネットワークアクセスをVCN経由に更新

  • NSG(Network Security Groups)の作成 VCN経由からADBへのアクセスのみを許可 image.png
  • ADBのネットワークを更新 ADB1/ADB2ともに、以下のとおりネットワークを更新

更新前
image.png
更新後
image.png

― 中継サーバ、ターゲットDB(ADB2)のFirewallの更新

中継サーバのFirewall(VCN/Public subnetのセキュリティリスト)を変更
ADB1から中継サーバへの信を許可するイングレスルールを追加
image.png
ADB2のFirewall(VCN/Private subnetのセキュリティリスト)を変更
中継サーバからADB2への通信を許可するイングレスルールを追加
image.png

- 中継サーバのデプロイ

  • 「Oracle Cloud Developer Image」でコンピュートインスタンスを作成 image.png
  • ADB1のOutbound IPアドレスを確認
ADB1
SELECT cloud_identity FROM v$pdbs;
  • 中継サーバのport forwardingを設定

上記で確認したIPアドレスとADB2のPrivate IPアドレスを用いてFirewallを設定

中継サーバ
sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address="(ADB1のOutbound IPアドレス)" forward-port to-addr="(ADB2のPrivate IPアドレス)" to-port="1522" protocol="tcp" port="1522"'
sudo firewall-cmd --add-masquerade
sudo firewall-cmd --runtime-to-permanent

設定内容の確認

中継サーバ
$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="(ADB1のOutbound IPアドレス)" forward-port port="1522" protocol="tcp" to-port="1522" to-addr="10.0.1.173"

- DBLINKの作成

既存DBLINKのクリア

ADB1
SQL> BEGIN
DBMS_CLOUD_ADMIN.DROP_DATABASE_LINK(
  db_link_name => 'ADB_DBLINK' );
END;
/
SQL> SELECT COUNT(*) FROM SH.CUSTOMERS@ADB_DBLINK;

Error starting at line : 1 in command -
SELECT COUNT(*) FROM SH.CUSTOMERS@ADB_DBLINK
Error at Command Line : 1 Column : 35
Error report -
SQL Error: ORA-02019: connection description for remote database not found
02019. 00000 -  "connection description for remote database not found"
*Cause:
*Action:

DBLINKの作成

ADB1
BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name => 'ADB_DBLINK', 
          hostname => '(中継サーバのPublic IPアドレス)', 
          port => '1522',
          service_name => 'xxxxxxxxxxxxx_ADB2_medium.adb.oraclecloud.com',
          ssl_server_cert_dn => 'CN=adwc.uscom-east-1.oraclecloud.com,OU=Oracle BMCS US,O=Oracle Corporation,L=Redwood City,ST=California,C=US',
          credential_name => 'ADB_DBLINK_CRED',
          directory_name => 'ADB_DBLINK_DIR');
END;
/
SQL> SELECT COUNT(*) FROM SH.CUSTOMERS@ADB_DBLINK;

   COUNT(*)
___________
      55500
0
2
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
0
2