6 Oracle用MySQLクライアント・ライブラリ・ドライバ
Oracle DatabaseのMySQLクライアント・ライブラリ・ドライバと、MySQLからOracleへのアプリケーションの移行におけるその使用について詳しく見ていきます。
関連項目:
MySQLプログラムのサポートの詳細は、「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください
6.1 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 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アダプタに移行するには、アプリケーション・コードを大幅に変更する必要が多くなります。
                  
6.2 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ディレクトリにインストールされます。
                  
6.3 Oracle用MySQLクライアント・ライブラリ・ドライバを使用した移行の概要
Oracle DatabaseにCベースのMySQLアプリケーションを移行するには、次の手順を行う必要があります。
6.4 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ドライバを使用して、古いバージョンに接続します。
                  
6.4.1 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ライブラリ内のデータ構造とのバイナリ互換性が保証されます。
                        
6.4.2 Oracleデータベースへの接続
liboramysqlライブラリを使用してOracle Databaseに接続するには、接続呼出しのhostパラメータでOracle簡易接続構文またはtnsnames.ora接続識別子を使用します。
                        
mysql_real_connect(c, "localhost/pdborcl", "myun", "mypw", NULL, 0, NULL, 0);
6.4.3 サポートされているプラットフォーム
Oracle用MySQLクライアント・ライブラリ・ドライバは、Oracle Instant Clientがサポートされているプラットフォームで使用できます。
サポート対象プラットフォームのリストについては、Oracleサポートの動作保証のサイト(https://support.oracle.com)を参照してください。
6.4.4 エラー処理
OCIクライアント・コードまたはOracleサーバーで生成されるすべてのエラーは、エラー後にmysql_errno()メソッドまたはmysql_error()メソッドが呼び出されると、アプリケーションに渡されます。
                        
6.4.5 グローバリゼーション
アプリケーションで想定される日付形式は、Oracle DatabaseのNLS_DATE_FORMAT環境変数を使用して設定されるか、同等のALTER SESSIONコマンドで接続後に変更されます。NLS_LANGも環境で設定される場合、NLS_DATE_FORMAT環境変数のみが使用されます。
                        
6.4.6 予想される相違
liboramysqlライブラリの一部のAPIは、MySQLデータベースとOracle Databaseとの間の根本的な違いから、必然的に異なる結果を返します。これらのAPIを使用する既存のアプリケーションはロジックの変更が必要な可能性があります。これらの違いの詳細は、「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください。