すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:Oracle データベースへの接続に oracle_fdw 拡張機能を使用する

最終更新日:Feb 26, 2025

このトピックでは、oracle_fdw 拡張機能を使用して Oracle データベースに接続する方法について説明します。 この拡張機能を使用して、PostgreSQL データベースのテーブルと Oracle データベースのテーブル間でデータを同期することもできます。

前提条件

  • ApsaraDB RDS for PostgreSQL インスタンスで、マイナーエンジンバージョン 20200421 以降の PostgreSQL 12 を実行していること。

    説明

    SHOW rds_supported_extensions; 文を実行して、RDS インスタンスの現在のマイナーエンジンバージョンで oracle_fdw 拡張機能がサポートされているかどうかを確認できます。 現在のマイナーエンジンバージョンで oracle_fdw 拡張機能がサポートされていない場合は、最初にマイナーエンジンバージョンを更新する必要があります。

  • Oracle クライアントのバージョンが 11.2 以降であること。

  • Oracle サーバーのバージョンが Oracle クライアントのバージョンに基づいていること。 詳細については、「Oracle ドキュメント」をご参照ください。

  • RDS インスタンスが存在する VPC (Virtual Private Cloud) の CIDR ブロックを、接続する Oracle データベースの IP アドレス ホワイトリストに追加する必要があります。 CIDR ブロックの例: 172.xx.xx.xx/16

    説明

    RDS インスタンスが存在する VPC の CIDR ブロックは、ApsaraDB RDS コンソールの [データベース接続] ページで確認できます。The CIDR block of the VPC

背景情報

oracle_fdw 拡張機能は、外部テーブルを管理するために PostgreSQL によって開発されました。 この拡張機能は、Oracle データベースへの容易なアクセスを提供し、PostgreSQL データベースと Oracle データベース間でデータを同期できるようにします。

詳細については、「oracle_fdw」をご参照ください。

使用上の注意

  • UPDATE 文または DELETE 文を実行する場合は、外部テーブルの作成時にプライマリキー列の key パラメーターを true に設定する必要があります。 詳細については、このトピックの「外部テーブルを作成する」セクションをご参照ください。

  • 外部テーブルの列のデータ型は、oracle_fdw 拡張機能で識別および変換できる必要があります。 oracle_fdw 拡張機能でサポートされている変換ルールの詳細については、「データ型」をご参照ください。

  • oracle_fdw 拡張機能は、WHERE 句と ORDER BY 句を Oracle データベースにプッシュダウンできます。

  • oracle_fdw 拡張機能は、JOIN 操作を Oracle データベースにプッシュダウンできます。 プッシュダウンには次の制限があります。

    • JOIN 操作の両方のテーブルが同じデータベースマッピングで定義されている必要があります。

    • 3 つ以上のテーブルに対する JOIN 操作はプッシュダウンできません。

    • JOIN 操作は SELECT 文に含める必要があります。

    • JOIN 条件のないクロス JOIN 操作はプッシュダウンできません。

    • JOIN 操作がプッシュダウンされた場合、ORDER BY 句はプッシュダウンされません。

  • PostGIS がインストールされると、oracle_fdw 拡張機能はさらに次の空間データ型をサポートします。

    • Point

    • Line

    • Polygon

    • MultiPoint

    • MultiLine

    • MultiPolygon

oracle_fdw 拡張機能を作成および削除する

重要

oracle_fdw 拡張機能を作成する前に、RDS for PostgreSQL インスタンスのメジャーエンジンバージョンとマイナーエンジンバージョンが「前提条件」で説明されている要件を満たしていることを確認してください。

拡張機能を作成する

CREATE EXTENSION oracle_fdw;

拡張機能を削除する

DROP EXTENSION oracle_fdw;

oracle_fdw 拡張機能を使用する

  1. 次のいずれかの文を実行して、Oracle データベースマッピングを作成します。

    • CREATE SERVER <サーバー名>
      FOREIGN DATA WRAPPER oracle_fdw
      OPTIONS (dbserver '//<Oracle データベースへの接続に使用する内部エンドポイント>:<Oracle データベースへの接続に使用する内部ポート>/<接続する Oracle データベースの名前>');
    • CREATE SERVER oradb
      FOREIGN DATA WRAPPER oracle_fdw
      OPTIONS (host '<Oracle データベースへの接続に使用する内部エンドポイント>', port '<Oracle データベースへの接続に使用する内部ポート>', dbname '<接続する Oracle データベースの名前>');
  2. 次の文を実行して、ユーザーマッピングを作成します。

    CREATE USER MAPPING
    FOR <PostgreSQL データベースへのログオンに使用するユーザー名> SERVER <ユーザーマッピングの名前>
    OPTIONS (user '<Oracle データベースへのログオンに使用するユーザー名>', password '<Oracle データベースへのログオンに使用するパスワード>');
    説明

    Oracle ユーザー資格情報を PostgreSQL データベースに保存しない場合は、user パラメーターを空の文字列に設定し、外部認証資格情報を提供します。

    例:

    CREATE USER MAPPING
    FOR pguser SERVER oradb
    OPTIONS (user 'orauser', password 'orapwd');
  3. 次の文を実行して、外部テーブルを作成します。

    CREATE FOREIGN TABLE oratab (
              id        integer OPTIONS (key 'true')  NOT NULL,
              text      character varying(30),
              floating  double precision  NOT NULL
           ) SERVER oradb OPTIONS (table 'ORATAB',
                                   schema 'ORAUSER',
                                   max_long '32767',
                                   readonly 'false',
                                   sample_percent '100',
                                   prefetch '200');
    説明

    外部テーブルのスキーマは、マップされた Oracle テーブルのスキーマと一致している必要があります。

    次の表に、OPTIONS のパラメーターを示します。

    パラメーター

    説明

    key

    列をプライマリキー列として設定するかどうかを指定します。 有効な値: true および false。 デフォルト値: false。 UPDATE 文と DELETE 文を実行する場合は、すべてのプライマリキー列の値を true に設定する必要があります。

    table

    必須。 Oracle テーブルの名前。 値は大文字にする必要があります。 Oracle SQL 文を使用して、table パラメーターの値を定義することもできます。 例: OPTIONS (table '(SELECT col FROM tab WHERE val = ''string'')')。 この場合は、schema パラメーターを使用しないでください。

    schema

    現在接続しているユーザーに属していないテーブルにアクセスするための Oracle ユーザー名。 値は大文字にする必要があります。

    max_long

    Oracle テーブルで LONG、LONG RAW、または XMLTYPE データ型を持つ列の最大長。 有効な値: 1 ~ 1073741823。 デフォルト値: 32767。

    readonly

    Oracle テーブルが読み取り専用かどうかを指定します。 値が true の場合、INSERT 文、UPDATE 文、または DELETE 文を実行することはできません。

    sample_percent

    PostgreSQL テーブル統計を計算するためにランダムに選択される Oracle テーブルブロックの割合。 有効な値: 0.000001 ~ 100。 デフォルト値: 100。

    prefetch

    外部テーブルのスキャン中に PostgreSQL と Oracle 間の 1 回のラウンドトリップ伝送でフェッチされる行数。 有効な値: 0 ~ 1024。 デフォルト値: 200。 値 0 は、プリフェッチ機能が無効になっていることを示します。

外部テーブルを作成した後、それを使用して Oracle テーブルに対する操作を実行できます。 DELETE、INSERT、UPDATE、SELECT などの基本的な SQL 文がサポートされています。 外部テーブル定義をインポートできます。 文の例:

IMPORT FOREIGN SCHEMA <ora_schema_name>
FROM SERVER <server_name>
INTO <schema_name>
OPTIONS (case 'lower');
説明

case パラメーターには、次の有効な値のいずれかを設定できます。

  • keep: Oracle と同じオブジェクト名を使用します。 ほとんどの場合、名前は大文字です。

  • lower: すべてのオブジェクト名を小文字に変換します。

  • smart: すべて大文字のオブジェクト名のみを小文字に変換します。