ヘッダーをスキップ
Oracle® Database移行ガイド
12cリリース1 (12.1)
B71352-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 Oracle用MySQLクライアント・ライブラリ・ドライバ

この章では、Oracle DatabaseのMySQLクライアント・ライブラリ・ドライバと、MySQLからOracleへのアプリケーションの移行におけるその使用について説明します。

この章の内容は次のとおりです。


関連項目:

MySQLプログラムのサポートの詳細は、第7章「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください。

Oracle用MySQLクライアント・ライブラリ・ドライバの概要

Oracle Database 12cリリース1用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 MySQLアプリケーション・コードがliboramysqlドライバを使用してOracleに接続する場合」の説明

例6-1のCコード・スニペットで、MySQLへの接続方法と、表に行を挿入する方法を示します。実行可能ファイルがlibmysqlclientライブラリではなくliboramysqlライブラリを使用してリンクされている場合、接続資格証明の更新後、コードを変更することなくOracle Databaseを対象に実行できます。

例6-1 MySQLへの接続と新規行の挿入

c = mysql_init(NULL);
mysql_real_connect(c, "myhost", "myun", "mypw", "mydb", 0, NULL, 0);
mysql_query(c, "insert into mytable values (1,2)");
mysql_close(c);

データベースのスキーマとデータをOracleに個別に移行する必要があり、liboramysqlライブラリはSQL文を翻訳しませんが、アプリケーション・コードを変更する必要がないため、Oracle Databaseへの移行時の労力が大幅に軽減されます。

カスタムCアプリケーションは、liboramysqlライブラリを使用してOracle Databaseに簡単に移行できます。

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クライアント・ライブラリ・ドライバを使用した移行の概要

Oracle DatabaseにCベースのMySQLアプリケーションを移行するには、次の手順を行う必要があります。

  1. MySQLデータベースに対してアプリケーションが実行されることを確認します。

    これにより、移行プロセスが、既知の基本的な機能で開始されます。

  2. libmysqlclientライブラリをliboramysqlライブラリに置き換えます

    libmysqlclientライブラリではなくliboramysqlライブラリを使用するようにアプリケーションを再リンクする必要があります。

  3. アプリケーション・スキーマをOracle Databaseに移行します。

    Oracle DDLおよびタイプを使用するようにスキーマを移行する必要があります。このプロセスには、Oracle SQL Developerが役立ちます。

    詳細は、『Oracle SQL Developerユーザーズ・ガイド』を参照してください。

  4. アプリケーションで使用されるすべてのSQL文を確認します。

    必要に応じて、Oracle構文を使用するようにアプリケーションのSQL文を変更するか、アプリケーションの実行時に変換を自動で行うSQLトランスレータを実装します。Oracle DatabaseでサポートされないMySQL機能に依存するロジックを記述しなおします。

    第4章「JDBCアプリケーションとODBCアプリケーションのSQL翻訳」を参照してください。

  5. Oracle Databaseに接続するようアプリケーションの接続文字列を更新します。

    接続呼出しのhostパラメータでOracle簡易接続構文またはtnsnames.ora接続識別子を使用します。

  6. Oracle Databaseでアプリケーションをテストします。

    Oracle Databaseに対してアプリケーションを検証します。

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の互換性の詳細は、第7章「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クライアント・ライブラリ名に変更します。

    1. lddコマンドを使用して、アプリケーションのリンク先のMySQLライブラリを特定します。

      $ ldd yourprogram
      ...
      libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0x00007f9004e7f000)
      ...
      
    2. 次のシンボリック・リンクをOracleソフトウェア所有者ユーザーとして作成します。

      $ ln -s $ORACLE_HOME/lib/liboramysql12.so $ORACLE_HOME/lib/libmysqlclient.so.16
      
    3. libmysqlclientライブラリを使用していたアプリケーション用に$ORACLE_HOME/libLD_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のSupport Certificationサイト(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を使用する既存のアプリケーションはロジックの変更が必要な可能性があります。これらの違いの詳細は、第7章「Oracle MySQLクライアント・ライブラリ・ドライバのAPIリファレンス」を参照してください。