sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLでOracleデータベースにアクセスする方法

    今日、組織はさまざまなデータベースシステムに情報(データ)を保存しています。各データベースシステムには、それに対して実行される一連のアプリケーションがあります。このデータはファイルシステム上の単なるビットとバイトであり、データベースだけがデータのビットとバイトをビジネス情報に変換できます。このような情報(データ)を1つのデータベースシステムに統合および統合することは、多くの場合困難です。あるデータベースに対して実行されるアプリケーションの多くには、別のデータベースに対して実行される同等のアプリケーションがない場合があるためです。情報を1つのデータベースシステムに統合するには、異種データベース接続が必要です。この投稿では、さまざまな方法を使用してPostgreSQLを異種データベースOracleの1つに接続する方法についてデモします。

    以下は、PostgreSQLでOracleデータベースに接続するためのいくつかの方法です。

    • ODBCドライバーの使用
    • 外部データラッパーの使用
    • Oracle Call Interface(OCI)ドライバーの使用
    デモで使用されるソフトウェア(ダウンロードリンクを含む)– CentOS 7 64ビット、PostgreSQL 9.5、EDB Postgres Advanced Server 9.5、ODBC-Link 1.0.4、unixODBC-2.3.4、Oracle InstantClient11.xドライバーおよびOracle_FDWODBCの使用ドライバー

    Open DataBase Connectivity(ODBC)は、DBMSを使用するための標準ソフトウェアAPIです。 ODBCドライバー/ODBCデータソース(API)は、アプリケーションがODBCドライバーを使用できる任意のデータベースに接続できるようにするライブラリです。これは、アプリケーションのデータクエリをDBMSが理解できるコマンドに変換する中間層です。この方法を使用するには、オープンソースのunixODBCおよびOracle ODBCドライバー(Basic / ODBC / Devel)パッケージが必要です。 unixODBCおよびOracleODBCドライバーを使用して作成されたDSNと通信できるPostgreSQLのモジュールとともに。数年前、Cyber​​Tecはモジュール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ドキュメントから参照できるすべての関数。

    上記のすべての方法は、移行プロジェクトで作業している場合に非常に便利です。お役に立てば幸いです。ありがとう


    1. MySQLクエリのシングルクォート、ダブルクォート、およびバックティック

    2. PostgreSQL8.3以降の全文検索

    3. ORDERBY句を使用してビューを作成します

    4. PDOでパスワードハッシュを使用してコードをより安全にするにはどうすればよいですか?