今日、組織はさまざまなデータベースシステムに情報(データ)を保存しています。各データベースシステムには、それに対して実行される一連のアプリケーションがあります。このデータはファイルシステム上の単なるビットとバイトであり、データベースだけがデータのビットとバイトをビジネス情報に変換できます。このような情報(データ)を1つのデータベースシステムに統合および統合することは、多くの場合困難です。あるデータベースに対して実行されるアプリケーションの多くには、別のデータベースに対して実行される同等のアプリケーションがない場合があるためです。情報を1つのデータベースシステムに統合するには、異種データベース接続が必要です。この投稿では、さまざまな方法を使用してPostgreSQLを異種データベースOracleの1つに接続する方法についてデモします。
以下は、PostgreSQLでOracleデータベースに接続するためのいくつかの方法です。
- ODBCドライバーの使用
- 外部データラッパーの使用
- Oracle Call Interface(OCI)ドライバーの使用
Open DataBase Connectivity(ODBC)は、DBMSを使用するための標準ソフトウェアAPIです。 ODBCドライバー/ODBCデータソース(API)は、アプリケーションがODBCドライバーを使用できる任意のデータベースに接続できるようにするライブラリです。これは、アプリケーションのデータクエリをDBMSが理解できるコマンドに変換する中間層です。この方法を使用するには、オープンソースのunixODBCおよびOracle ODBCドライバー(Basic / ODBC / Devel)パッケージが必要です。 unixODBCおよびOracleODBCドライバーを使用して作成されたDSNと通信できるPostgreSQLのモジュールとともに。数年前、CyberTecはモジュールODBC-Linkをリリースしましたが、現在は廃止されていますが、PostgreSQLが他のODBC準拠データベースに接続するためのdblinkスタイルの実装があります。このモジュールは、Oracleへの基本的な接続に使用できます。見てみましょう。
unixODBCをインストールするtar -xvf unixODBC-2.3.4.tar.gz cd unixODBC-2.3.4/ ./configure --sysconfdir=/etc make make install
バイナリ/ライブラリ/構成ファイルの場所:/usr/local/bin,/usr/local/lib,/etc(odbc.ini,odbcinst.ini)
> OracleODBCドライバーのインストール
rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
バイナリ/ライブラリの場所:/usr/lib/oracle/11.2/client64
ODBC-Linkのインストールtar -zxvf ODBC-Link-1.0.4.tar.gz cd ODBC-Link-1.0.4 export PATH=/opt/PostgreSQL/9.5/bin:$PATH which pg_config make USE_PGXS=1 make USE_PGXS=1 install
ライブラリとSQLファイルの場所:/opt/PostgreSQL/9.5/share/postgresql/contrib
インストールにより、ODBC-LinkモジュールのSQLファイルが$ PGHOME/contribディレクトリに作成されます。 SQLファイルをロードします。これにより、必要な関数を含む「odbclink」という名前のスキーマが作成されます。
psql -p 5432 -d oratest -U postgres -f /opt/PostgreSQL/9.5/share/postgresql/contrib/odbclink.sql
この時点で、unixODBC Drirver、Oracle ODBCドライバー、およびPostgreSQL用のODBC-Linkモジュールをインストールしました。最初のステップとして、OracleODBCを使用してDSNを作成する必要があります。
/etc/odbcinst.iniファイルを編集して、ドライバーの定義を渡します
## Driver for Oracle [MyOracle] Description =ODBC for oracle Driver =/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 UsageCount=1 FileUsage = 1 Driver Logging = 7
/etc/odbc.iniファイルを編集し、/ etd / odbcinst.ini
に記載されているドライバーを使用してDSNを作成します。## Host: pg.raghav-node1.com, PORT: 1521 ## Oracle Instance Name: ORA11G, Username: mmruser, Password: mmruser ## ODBC Data source: Ora
[Ora]
Description =myoracledb database
Driver =MyOracle
Trace =yes
TraceFile =/tmp/odbc_oracle.log
Database =//pg.raghav-node1 .com:1521 / ORA11G
UserID =mmruser
Password =mmruser
Port =1521
DSNを作成したら、環境変数を設定してすべてのOracleおよびunix ODBCドライバーライブラリをロードし、OSコマンドラインツール「dltest」および「iSQL」を使用して接続をテストします
[[email protected] ~]# export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]# export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]# export ODBCINI=/etc/odbc.ini [[email protected] ~]# export ODBCSYSINI=/etc/ [[email protected] ~]# export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]# dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]# isql ora -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
ここで、postgresユーザーにライブラリをロードするための同じ環境変数を設定し、PostgreSQLクラスターを再起動して有効にします。 PostgreSQLに接続し、odbclink関数を呼び出してOracleデータベースに接続します。
[[email protected] ~]#su - postgres [[email protected] ~]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64 [[email protected] ~]$ export LD_LIBRARY_PATH=/usr/local/unixODBC-2.3.4/lib:/usr/lib/oracle/11.2/client64/lib [[email protected] ~]$ export ODBCINI=/etc/odbc.ini [[email protected] ~]$ export ODBCSYSINI=/etc/ [[email protected] ~]$ export TWO_TASK=//pg.raghav-node1.com:1521/ORA11G [[email protected] ~]$ dltest /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 SUCCESS: Loaded /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] ~]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] ~]$ psql psql.bin (9.5.2) Type "help" for help.
postgres =#select odbclink.connect(‘DSN =Ora’);
connect
———
1
(1行)
かっこいい…!!!。データの取得と操作については、ODBC-LinkREADMEファイルを参照してください。
外部データラッパーの使用
SQLStandardのSQL/MED(SQL Management of External Data)拡張機能を使用すると、データベースの外部に格納されている外部データを管理できます。 SQL / MEDは、外部データラッパーとデータリンクの2つのコンポーネントを提供します。 PostgreSQLは、読み取り専用をサポートする9.1バージョンとこのSQL標準の9.3バージョンの書き込みサポートでForeign Data Wrapper(FDW)を導入しました。現在、最新バージョンには多くの機能があり、さまざまなリモートSQLデータベースにアクセスするためにさまざまな種類のFDWを利用できます。
Oracle_fdwは、Oracleデータベースにアクセスするための簡単で効率的な方法を提供します。 IMOは、リモートデータベースにアクセスするための最もクールな方法の1つです。 Oracle_FDWをPostgreSQL9.5でコンパイルするには、OracleInstantClientライブラリとpg_configをPATHに設定する必要があります。 ODBC-Linkに使用されるのと同じOracleInstantClientライブラリを使用できます。それがどのように機能するか見てみましょう。
まず、OICライブラリとpg_configを使用して環境変数を設定します
export PATH=/opt/PostgreSQL/9.5/bin:$PATH export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
oracle_fdwモジュールを解凍し、PostgreSQL9.5でコンパイルします
unzip oracle_fdw-1.4.0.zip cd oracle_fdw-1.4.0/ make make install
次に、「postgres」ユーザーとして切り替え、oracle_fdw拡張機能に必要なOracle Instant Clientライブラリをロードしてクラスタを再起動し、データベース内に拡張機能を作成します。
[[email protected] 9.5]$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib [[email protected] 9.5]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$LD_LIBRARY_PATH [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ stop -mf [[email protected] 9.5]$ /opt/PostgreSQL/9.5/bin/pg_ctl -D /opt/PostgreSQL/9.5/data/ start [[email protected] 9.5]$ psql Password: psql.bin (9.5.2) Type "help" for help.
postgres =#create Extension oracle_fdw;
CREATE EXTENSION
これで、Oracleデータベースにアクセスできます。
postgres=# CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//pg.raghav-node1.com/ORA11G'); CREATE SERVER postgres=# GRANT USAGE ON FOREIGN SERVER oradb TO postgres; GRANT postgres=# CREATE USER MAPPING FOR postgres SERVER oradb OPTIONS (user 'scott', password 'tiger'); CREATE USER MAPPING postgres=# postgres=# CREATE FOREIGN TABLE oratab (ecode integer,name char(30)) SERVER oradb OPTIONS(schema 'SCOTT',table 'EMP'); CREATE FOREIGN TABLE postgres=# select * from oratab limit 3; ecode | name -------+-------------------------------- 7369 | SMITH 7499 | ALLEN 7521 | WARD (3 rows)
Oracle Call Interface(OCI)ドライバーの使用
Oracle Call Interface(OCI)は、クライアントがOracleデータベースに接続できるようにするOracleサイトで無料で入手できるタイプ2ドライバーです。 EDB Postgres Advanced Server(EPASとも呼ばれる)独自の製品には、dblink_oraと呼ばれるOCIベースのデータベースリンクモジュールが組み込まれており、OracleOCIドライバーを使用してOracleデータベースに接続します。 dblink_oraモジュールを使用し、EPASをインストールし(インストールは対象外)、OracleOCIドライバライブラリの場所をEPASに通知するだけです。 LD_LIBRARY_PATH環境変数でライブラリの場所を指定することで同じOracleInstantClientを利用し、EPASクラスタを有効に再起動できます。
まず、「enterprisedb」ユーザーとして切り替え、ライブラリをロードして、クラスターを再起動します。以上で、Oracleデータベースにアクセスできます。
[[email protected] ~]$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib [[email protected] bin]$ /opt/PostgresPlus/9.5AS/bin/pg_ctl -D /opt/PostgresPlus/9.5AS/data/ restart [[email protected] bin]$ psql psql.bin (9.5.0.5) Type "help" for help.
edb =#select dblink_ora_connect('oraconn'、'localhost'、'edbora'、'edbuser'、'edbuser'、1521);
dblink_ora_connect
——————–
OK
(1行)
注:EPASは、OracleInstantClientライブラリ「libclntsh.so」を使用してOracleデータベースに接続します。 Oracle Client Libraryの場所にライブラリが見つからない場合は、libclntsh.so.version.numberを指すlibclntsh.soを使用してシンボリックリンクを作成します。ドキュメントを参照してください。
この例では、dblink_ora_connectは、ユーザー指定の接続情報を使用してOracleデータベースへの接続を確立します。後でリンク名(私の場合は「oraconn」)を使用して、dblink_ora *関数を使用してSELECT、INSERT、DELETE、UPDATE、COPYなどの操作を実行できます。こちらのEnterpriseDBドキュメントから参照できるすべての関数。
上記のすべての方法は、移行プロジェクトで作業している場合に非常に便利です。お役に立てば幸いです。ありがとう