1. ホーム
  2. データベース
  3. ポストグレスキュー

oracle_fdwを介してOracleデータにアクセスするためのPostgreSQLの手順

2022-01-21 06:55:01

背景

同じプロジェクトの2つのシステムは、PGライブラリとOracleライブラリを使用し、Oracleは、生産ライブラリ、データを動的に更新され、今PGライブラリでは、統計のリアルタイムでの更新データを取得する必要があるような方法に基づいて、ETLツールを介して実現することができますが、定期的にメンテナンスなどの必要性と考え、それはOracleデータベースと同様にすることができますかDBLINKインターネットで情報を探してから、私はこれを達成するために、Oracle_FDW使用できることを発見した。

テスト環境です。

以下の基本構成で、ローカルにテスト環境を構築します。

Oracleデータベーステストサーバ(IP:192.168.1.110)。WIN10オペレーティングシステム、Oracleデータベースバージョン11.2.0.4、インスタンス名orcl、32ビットクライアントがインストールされています。

PGライブラリテストサーバ(仮想マシン、IP:192.168.30.128、NATモード)。WIN10オペレーティングシステム、PGデータベースバージョン11.11.1。

実装の手順

1. 最初のネットワークは、通常、PGのライブラリサーバでOracleのライブラリサーバにアクセスできることを確認します。

2. PG ライブラリをインストールします(手順省略)。ここで注意ですが、インストールしたPGライブラリはリモートアクセスが有効になっていないので、リモートアクセスが必要な場合は、まずpg_hba.confファイルを修正して、以下の内容を追加する必要があります。

ホストすべてすべて0.0.0.0/0 md5

3. 3. oracle_fdwをダウンロードします。ダウンロードの際、PGライブラリのバージョンと合わせる必要があることに注意してください。

ダウンロードはこちら リリース - laurenz/oracle_fdw - GitHub

PG11に合わせ、Windows 64ロケーションのOSを選択するため、こちらからダウンロードしています。

注意:fdwのバージョンは、PGライブラリのバージョンとOSのバージョンに対応していないと、後で問題が発生します。

3. oracle_fdw を解凍し、[lib] フォルダと [share/extension] フォルダ内のファイルを、PG ライブラリのインストール パス下の対応する [lib] フォルダと [share/extension] フォルダにコピーしてくださ い。

コピー後、sql文はoracle_fdwに問い合わせることができ、ファイルが正常にコピーされ配置されたが、まだインストールされていない(isstalled_versionが空)ことを示すことができます。

select * from pg_available_extensions;

4. Oracleクライアントのインストール (手順省略)

Oracleクライアントのサポートも必要なので、慌てて最初にoracle_fdwをインストールする必要はありません(うまくいきません)。Oracleクライアントをインストールしない場合、以下のようなエラーメッセージが表示されます。

Oracleクライアントは、接続されたOracleサーバーと同じバージョンを使用することをお勧めします(テストは、小さなバージョンの違いは影響しませんが、大きなバージョンがテストされていません)、オンライン情報を見てに加えて、代わりに軽量Oracleインスタントクライアントに従うことができます、ここで私は試していない、興味がそれを試すことができます。

インストールが完了したら、まず接続テストを行い、正常に動作していることを確認してください。

注:クライアントのバージョンはPGライブラリと同じでなければなりません。例えば、私は64ビットのPGライブラリをインストールしたので、64ビットのOracleクライアントをインストールしなければなりません。以前は32ビットのクライアントをインストールしていましたが、外部テーブルを作成した後に開くことができず、以下のエラーが発生しました。

それでも問題がある場合は、Path変数を一番上に移動することで、インストールパスが書き込まれているかどうかを確認することができます。

5. oracle_fdwのインストールを作成します。

-- create oracle_fdw
create extension oracle_fdw;

以下の前文により、インストールが正常に行われることが確認されました。

select * from pg_available_extensions;

installed_versionにはすでにインストールされたバージョンが表示されており、インストールが正常に行われたことが確認できます。

注:インストールに何度も失敗する場合は、PGサービスまたはサーバーを再起動して再試行することをお勧めします。

6. オラクルライブラリでのテストデータ作成

データベースの接続情報は以下の通りです。192.168.1.110/orcl ユーザー名/パスワード: GIS/GIS

-- Create test table
create table ORACLEDATA_TEST
 (
   ID NUMBER(10) not null,
   XZQMC NVARCHAR2(50),
   XZQDM NVARCHAR2(30)
 )

-- insert test data
insert into oracledata_test values(1,'City South','370202');
insert into oracledata_test values(2,'City North','370203');

テストデータを追加した後のコミット操作に注目してください。

7. Oracle 接続を作成するための PG ライブラリ

-- Create an Oracle external connection, where oradb_110 is the connection name
create server oradb_110 foreign data wrapper oracle_fdw options(dbserver '192.168.1.110/orcl');

作成すると、接続によりOracleデータベースのデータを取得できるようになります。

8. ユーザー認証のためのPGライブラリ

--authorization
grant usage on foreign server oradb_110 to postgres;

認証は必要に応じて行われます。

9. Oracleへのマッピングを作成する

--create mapping to oracle
create user mapping for postgres server oradb_110 options(user 'GIS',password 'GIS');

oradb_110 は、以前に作成したデータベース接続の名前、GIS は Oracle に接続するためのユーザー名とパスワードです。

10. 10.Oracleにアクセスする必要がある対応するテーブルを作成します。

ここで作成する際には、フィールドタイプの変換に注意する必要があります、OracleとPGライブラリは、フィールドタイプがまだ異なっていることに注意してください。oradb_110は上で作成したデータベース接続の名前、GISはその接続です。

-- Create the structure of the corresponding table in oracle that needs to be accessed
create foreign table ORACLEDATA_TEST_PG
 (
   ID numeric(10) not null,
   XZQMC VARCHAR(50),
   XZQDM VARCHAR(30)
 ) server oradb_110 options(schema 'GIS',table 'ORACLEDATA_TEST');

注:ここで作成されたテーブルは、ビューのようにoracleが指定したテーブルのフィールドを取得するのではなく、シーケンシャルマッピングによって取得します。これは、後で説明するためにテストします。

11. これで、Oracleから来るデータを外部テーブルを通して見ることができるようになりました。

作成したコンテンツを削除する必要がある場合は、以下のような記述が可能です。

DROP FOREIGN TABLE table_name;
DROP USER MAPPING FOR user_name SERVER server_name;
DROP SERVER server_name;

11. データ同期テスト。

オラクルデータベースにリアルタイムでレコードを挿入する

-- insert test data
insert into oracledata_test values(3,'LPC','370203');

データを挿入し、コミットを記録し、確認のためにクエリを実行します。

PGライブラリのクエリで確認しました。

ご覧のように、データをリアルタイムに同期させることができます。

12. テーブルマッピングのテスト。

例えば、今テストテーブルに3つのフィールドがあり、PGライブラリでは1番目と3番目のフィールドしか使わない場合、外部テーブルは次のようにビルドされます。

-- Create the structure of the corresponding table in the oracle that needs to be accessed
create foreign table ORACLEDATA_TEST_PG_2
 (
   ID numeric(10) not null,
   XZQDM VARCHAR(30)
 ) server oradb_110 options(schema 'GIS',table 'ORACLEDATA_TEST');

次に、データを問い合わせる。

結果からわかるように、今回選んだxzqdmの値ではなく、フィールド名ではなく順序に従ってマッピングされたxzqmcの値を取得することができます。

13. パフォーマンス

初期テストでは、大容量のデータに対してまだ比較的低いパフォーマンスであり、この部分は厳密なテストをしていませんので、後で機会があれば追加します。

参考にしてください。

PostgreSQLのインストールに成功したoracle_fdwメソッドの詳細 指定されたプロシージャが見つかりませんでした error_ljinxinのブログ - CSDN Blog

PostgreSQLのOracle_fdwのインストールと使用 - Kevin_zheng - Blogspot (cnblogs.com)

この記事は、PostgreSQLがoracle_fdwを介してOracleデータにアクセスすることに関するものです。PostgreSQLがOracleデータにアクセスすることについては、Script Houseの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください。