このトピックでは、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) のCIDRブロックを、接続するOracleデータベースのIPアドレスホワイトリストに追加する必要があります。 CIDRブロックの例:
172.xx. xx.xx/16
説明 ApsaraDB RDSコンソールの [データベース接続] ページで、RDSインスタンスが存在するVPCのCIDRブロックを表示できます。
背景情報
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
- 回線
- Polygon
- マルチポイント
- マルチライン
- MultiPolygon
手順
- 次のステートメントを実行して、oracle_fdwプラグインを作成します。
拡張の作成oracle_fdw;
- 次のいずれかのステートメントを実行して、Oracleデータベース・マッピングを作成します。
CREATE SERVER <サーバー名> 外国データラッパーoracle_fdw オプション (dbserver '// <Oracleデータベースへの接続に使用される内部エンドポイント >:< Oracleデータベースへの接続に使用される内部ポート>/<接続するOracleデータベースの名前>');
サーバーの作成oradb 外国データラッパーoracle_fdw オプション (ホスト '<Oracleデータベースへの接続に使用される内部エンドポイント>' 、ポート '<Oracleデータベースへの接続に使用される内部ポート>' 、dbname '<接続するOracleデータベースの名前>');
- 次のステートメントを実行して、ユーザーマッピングを作成します。
ユーザーマッピングを作成する FOR <PostgreSQLデータベースへのログインに使用されるユーザー名> SERVER <ユーザーマッピングの名前> オプション (ユーザー '<Oracleデータベースへのログインに使用されるユーザー名>' 、パスワード '<Oracleデータベースへのログインに使用されるパスワード>');
説明 Oracleユーザー資格情報をPostgreSQLデータベースに格納しない場合は、ユーザーパラメーターを空の文字列に設定し、外部権限付与資格情報を指定します。例:
ユーザーマッピングを作成する pguserのサーバーoradbのため オプション (ユーザー 'orauser' 、パスワード 'orapwd');
- 次のステートメントを実行して、外部テーブルを作成します。
FOREIGN TABLE oratabを作成 ( id整数OPTIONS (キー 'true') NOT NULL、 テキスト文字の変化 (30) 、 浮動倍精度NOT NULL ) サーバーoradbオプション (テーブル 'ORATAB' 、 スキーマ 'ORAUSER' 、 max_long '32767' 、 読み取り専用の「偽」、 sample_percent '100' 、 プリフェッチ '200');
説明 外部テーブルのスキーマは、マップされたOracleテーブルのスキーマと一致している必要があります。次の表に、OPTIONSのパラメーターを示します。
パラメーター 説明 キー 列を主キー列として設定するかどうかを指定します。 有効な値は、true および false です。 デフォルト値:false UPDATEおよびDELETEステートメントを実行する場合は、すべての主キー列に対して値をtrueに設定する必要があります。 table 必須。 Oracleテーブルの名前。 値は大文字でなければなりません。 Oracle SQL文を使用して、テーブル・パラメータの値を定義することもできます。 例: OPTIONS (テーブル '(SELECT col FROM tab WHERE val = ''string'')')
この場合、schemaパラメーターは使用しないでください。schema 現在接続されているユーザーに属していないテーブルにアクセスするためのOracleユーザー名。 値は大文字でなければなりません。 max_long OracleテーブルのLONG、LONG RAW、またはXMLTYPEデータ型を持つ列の最大長。 有効な値: 1 ~ 1073741823 デフォルト値: 32767 読み取り専用 Oracleテーブルが読み取り専用かどうかを指定します。 値がtrueの場合、INSERT、UPDATE、またはDELETEステートメントは実行できません。 sample_percent PostgreSQLテーブル統計を計算するためにランダムに選択されたOracleテーブルブロックの割合。 有効な値: 0.000001〜100。 デフォルト値:100 プリフェッチ 外部テーブルスキャン中にPostgreSQLとOracle間の1回の往復送信でフェッチされる行数。 有効値: 0~1024。 デフォルト値:200 値0は、プリフェッチ機能が無効であることを示します。
外部テーブルを作成した後、外部テーブルを使用してOracleテーブルに対する操作を実行できます。 DELETE、INSERT、UPDATE、SELECTなどの基本的なSQL文がサポートされています。 外部テーブル定義をインポートできます。 例:
インポート外国スキーマ <ora_schema_name>
サーバーから <server_name>
INTO <schema_name>
オプション (ケース 'lower ');
説明 caseパラメーターは、次のいずれかの有効な値に設定できます。
- keep: Oracleと同じオブジェクト名を使用します。 ほとんどの場合、名前は大文字です。
- lower: すべてのオブジェクト名を小文字に変換します。
- smart: すべて大文字のオブジェクト名のみを小文字に変換します。
oracle_fdwプラグインの削除
次のSQL文を実行して, oracle_fdw部品を削除します。
ドロップ拡張oracle_fdw;