6 Oracle用MySQLクライアント・ライブラリ・ドライバ
Oracle DatabaseのMySQLクライアント・ライブラリ・ドライバと、MySQLからOracleへのアプリケーションの移行におけるその使用について詳しく見ていきます。
関連項目:
MySQLプログラムのサポートの詳細は、「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください
Oracle用MySQLクライアント・ライブラリ・ドライバの概要
Oracle Database 12c用MySQLクライアント・ライブラリ・ドライバ(liboramysql
)はMySQL Commercial Connector/C 6.0クライアント・ライブラリに代わるものです。liboramysql
ドライバは類似のAPIを実装しているため、MySQL用に開発されたCベースのアプリケーションとツールはOracle Databaseに接続できます。ドライバを使用すると、最小限のコードの変更でアプリケーションをMySQLからOracle Databaseに移行できます。
liboramysql
ドライバは、Oracle Call Interface(OCI)を使用してOracle Databaseに接続します。
図6-1 MySQLアプリケーション・コードがliboramysqlドライバを使用してOracleに接続する場合
![図6-1の説明が続きます 図6-1の説明が続きます](img/liboramysql_arch.png)
「図6-1 MySQLアプリケーション・コードがliboramysqlドライバを使用してOracleに接続する場合」の説明
例6-1のCコード・スニペットで、MySQLへの接続方法と、表に行を挿入する方法を示します。実行可能ファイルがlibmysqlclient
ライブラリではなくliboramysql
ライブラリを使用してリンクされている場合、接続資格証明の更新後、コードを変更することなくOracle Databaseを対象に実行できます。
データベースのスキーマとデータをOracleに個別に移行する必要があり、liboramysql
ライブラリはSQL文を翻訳しませんが、アプリケーション・コードを変更する必要がないため、Oracle Databaseへの移行時の労力が大幅に軽減されます。
カスタムCアプリケーションは、liboramysql
ライブラリを使用してOracle Databaseに簡単に移行できます。
また、libmysqlclient
ライブラリの使用を抽象化して、MySQL拡張またはアダプタを提供するプログラミング言語を使用したアプリケーションを移行できます。これらの言語には、PHP、Perl,、Python、Rubyなどがあります。Cで実装されたプログラミング言語の多くは、ネイティブOracleアダプタがすでに存在しますが、アプリケーションをネイティブOracleアダプタに移行するには、アプリケーション・コードを大幅に変更する必要が多くなります。
Oracle用MySQLクライアント・ライブラリ・ドライバのインストールと初めての使用
Oracle用MySQLクライアント・ライブラリ・ドライバは、liboramysql.so
共有ライブラリ(Linuxの場合)またはoramysql.dll
動的リンク・ライブラリ(DLL) (Windowsの場合)内のファイルとして提供されます。ドライバは、Oracle Instant Client Basic
およびBasic Lite
パッケージの一部としてパッケージされ、OTNからダウンロードできます。http://www.oracle.com/technetwork/topics/linuxsoft-082809.html
およびhttp://www.oracle.com/technetwork/topics/winsoft-085727.html
を参照してください。
ドライバは、Oracle Client共有ライブラリ(Linuxの場合はlibclntsh.so
、Windowsの場合はoci.dll
)と同じディレクトリにインストールする必要があります。通常、このインストール・ディレクトリを含めるように、オペレーティング・システムの環境変数(Linuxの場合はLD_LIBRARY_PATH
、Windowsの場合はPATH
)を設定する必要があります。
ORACLE_HOME
インストールの場合、ドライバ・ライブラリは、$ORACLE_HOME/lib
ディレクトリ(Linuxの場合)および%ORACLE_HOME%\bin
ディレクトリ(Windowsの場合)にインストールされます。Instant Client ZIPファイルの場合、ライブラリはinstantclient_12_1
ディレクトリにあります。Instant Client RPMインストールの場合、ライブラリは、32ビットLinuxプラットフォームまたは64ビットLinuxプラットフォームでそれぞれ/usr/lib/oracle/12.1/client/lib
ディレクトリまたは/usr/lib/oracle/12.1/client64/lib
ディレクトリにインストールされます。
Oracle用MySQLクライアント・ライブラリ・ドライバの使用
liboramysql
APIはMySQL Commercial Connector/C 6.0と互換性があります。Oracle Database用MySQLドライバであるliboramysqlは、MySQL API呼出しをOracle Call Interface(OCI)呼出しへ翻訳、およびOracleデータ型とMySQLデータ型間での翻訳を行います。
既存のMySQLベースのアプリケーションは、liboramysql
ドライバを使用するように再リンクし、Oracle Databaseを新しいデータ・ソースにすることができます。liboramysql
ドライバでは、Oracle Databaseへの接続のみがサポートされることに注意してください。同じアプリケーション内でMySQLデータベースとOracle Databaseの両方に同時に接続することはできません。
データ型マッピングとAPIの互換性の詳細は、「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください。詳細情報は、『Oracle SQL Developerユーザーズ・ガイド』にも記載されています。
liboramysql
ドライバは、SQL文を翻訳しません。Oracle Databaseに対して無効な文を記述しなおす必要があります。これは、アプリケーションで直接行うか、SQLトランスレータを使用して行います。アプリケーションのスキーマとデータも個別に移行する必要があります。Oracle SQL Developerにより、このプロセスは自動化されます。
古いバージョンのOracle Databaseに対するバージョン間OCI接続が存在する場合、liboramysql
ドライバを使用して、古いバージョンに接続します。
liboramysqlドライバとのアプリケーションの再リンク
liboramysql
ライブラリを使用する基本的な手順として、新しいライブラリを使用するようにアプリケーションを再リンクします。liboramysql
ライブラリは、MySQL Commercial Connector/C 6.0.2パッケージのlibmysqlclient.so
ライブラリと互換性があるため、Oracle Databaseに移行する前に、バージョンの影響を受けるアプリケーションをMySQL Commercial Connector/C 6.0.2を使用してビルドし、検証する必要があります。
ソース・コードからコンパイルされたパブリック・ソフトウェアのインストール・スクリプトでは、通常、MySQLコンポーネントは事前に定義されたシステム・ディレクトリ構造に従うと想定されます。これは、Instant Client SDKのdemo
ディレクトリ内のsetuporamysql.sh
スクリプトを使用して行います。
アプリケーションに応じて次の方法を1つ以上使用し、アプリケーションをliboramysql
ライブラリに再リンクします。
-
直接
liboramysql
ライブラリを使用してビルドします。liboramysql
ライブラリを使用するようビルド・スクリプトを更新し、このOracleライブラリを直接使用するカスタム・アプリケーションをビルドできます。 -
liboramysql
ライブラリを使用してMySQL Commercial Connector/CディレクトリをエミュレートしますInstant Client SDKの
setuporamysql.sh
ライブラリで、MySQL Commercial Connector/Cインストールをエミュレートしたディレクトリ構造の作成方法が示されます。エミュレートされたこのディレクトリを使用してアプリケーションをビルドできます。 -
LD_PRELOAD
環境変数を使用します。事前構成のプログラムで
LD_PRELOAD
環境変数を使用してliboramysql
ライブラリにリンクできます。ただし、プログラムでdlopen()
メソッドを使用している場合、この環境変数の値を変更すると機能しない場合があります。 -
liboramysql
ライブラリを複製します。次の手順に従って、
liboramysql
ライブラリの名前を、アプリケーションで使用されているMySQLクライアント・ライブラリ名に変更します。-
ldd
コマンドを使用して、アプリケーションのリンク先のMySQLライブラリを特定します。$ ldd yourprogram ... libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0x00007f9004e7f000) ...
-
次のシンボリック・リンクをOracleソフトウェア所有者ユーザーとして作成します。
$ ln -s $ORACLE_HOME/lib/liboramysql12.so $ORACLE_HOME/lib/libmysqlclient.so.16
-
libmysqlclient
ライブラリを使用していたアプリケーション用に$ORACLE_HOME/lib
をLD_LIBRARY_PATH
環境変数に追加します。$ export LD_LIBRARY_PATH=$ORACLE_HOME/lib
-
-
システムMySQLクライアント・ライブラリを置き換えます。
ターゲット・システムのMySQLクライアント・ライブラリの名前を変更し、その場所の新しいライブラリにリンクします。このオプションは、MySQLを使用するシステムのすべてのアプリケーションに影響を与えるため、絶対に必要な場合のみ行ってください。
# mv /usr/lib64/libmysqlclient.so.16 /usr/lib64/libmysqlclient.so.16.backup # ln -s $ORACLE_HOME/lib/liboramysql12.so /usr/lib64/libmysqlclient.so.16
MySQLアプリケーションをソース・コードから再ビルドできない場合、まず、MySQL Connector/C 6.0.2パッケージのlibmysqlclient.so
ライブラリに対してアプリケーションをリンクする必要があります。これによって、liboramysql
ライブラリ内のデータ構造とのバイナリ互換性が保証されます。
Oracle Databaseへの接続
liboramysql
ライブラリを使用してOracle Databaseに接続するには、接続呼出しのhost
パラメータでOracle簡易接続構文またはtnsnames.ora
接続識別子を使用します。
mysql_real_connect(c, "localhost/pdborcl", "myun", "mypw", NULL, 0, NULL, 0);
サポート対象のプラットフォーム
Oracle用MySQLクライアント・ライブラリ・ドライバは、Oracle Instant Clientがサポートされているプラットフォームで使用できます。
サポート対象プラットフォームのリストについては、Oracleサポートの動作保証のサイト(https://support.oracle.com
)を参照してください。
エラー処理
OCIクライアント・コードまたはOracleサーバーで生成されるすべてのエラーは、エラー後にmysql_errno()
メソッドまたはmysql_error()
メソッドが呼び出されると、アプリケーションに渡されます。
グローバリゼーション
アプリケーションで想定される日付形式は、Oracle DatabaseのNLS_DATE_FORMAT
環境変数を使用して設定されるか、同等のALTER SESSION
コマンドで接続後に変更されます。NLS_LANG
も環境で設定される場合、NLS_DATE_FORMAT
環境変数のみが使用されます。
予想される相違
liboramysql
ライブラリの一部のAPIは、MySQLデータベースとOracle Databaseとの間の根本的な違いから、必然的に異なる結果を返します。これらのAPIを使用する既存のアプリケーションはロジックの変更が必要な可能性があります。これらの違いの詳細は、「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください。