4 Oracle Database ODBC Driverの使用

この章は、Oracle Database ODBCドライバのユーザーにOracle Database ODBCドライバの構成と使用に関する情報を提供することを目的としています。

トピック:

4.1 TLS (Azure AD用に事前構成済)を使用したOracle Databaseへの接続

この例では、Azure ADを使用するように事前構成されたTLSを使用して、Microsoft ExcelからOracle Databaseに接続する方法を示します。

4.1.1 概要

Oracle Database ODBCドライバを使用すると、Microsoft Entra ID (以前のAzure AD) SSO資格証明を使用して、Microsoft Excelおよびその他のツールからOracle Databaseにアクセスできます。次の例で、Microsoft ExcelからOracle Databaseにアクセスする方法を示します。

4.1.2 ExcelでOracle ODBCを使用するための前提条件のステップ

ノート:

Oracle Database 19.16以上、およびOracle Database 23ai (Oracle Database 21cは含まれません)のみがEntra ID統合をサポートしています。

4.1.3 ODBCドライバのインストール

32または64ビットのODBCドライバの適切なバージョン(19または23)をダウンロードしてインストールします。次のステップを実行します。

  1. https://www.oracle.com/database/technologies/instant-client/microsoft-windows-32-downloads.htmlまたはhttps://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.htmlに移動します
  2. Instant Client Basicパッケージをダウンロードします。
  3. ODBCパッケージをダウンロードします。
  4. Instant Clientフォルダ(instantclient_xx_yy)を目的の場所に解凍します。例: C:\Oracle\SQLPlus\
  5. ODBCパッケージを解凍し、instantclient_xx_yyというzipファイルの内容をInstant Clientフォルダに配置します(ファイルにはodbc_install.exeodbc_licenseおよびodbc_readmeが含まれます)。
  6. odbc_installを実行します。

    これにより、ODBCドライバが「ODBC データ ソース」GUIに登録されます。

4.1.4 tnsnames.ora、TNS_ADMINおよびPATHの構成

  1. tnsnames.oraフォルダを指すようにTNS_ADMIN環境変数を設定します。
  2. ODBCドライバのパスをPATH環境変数に追加します。
    • ODBCドライバの名前は、32ビット・ドライバと64ビット・ドライバの両方ともodbcad32.exeです。

    • 矛盾するようですが、64ビット版Windowsオペレーティング・システム(OS)では、32ビットのodbcad32.exeC:\Windows\sysWOW64にインストールされ、64ビットのodbcad32.exeC:\Windows\system32にインストールされます。

    • 64ビット版Windows OSを使用している場合は、パスの先頭近くにC:\Windows\system32を、必ずsysWOW64の前に配置して、64ビット・バージョンが最初に表示されるようにします。

  3. Entra ID用に構成されたOracle Databaseの接続文字列をtnsnames.oraに追加します。
    次に、例を示します。
    azuredb = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)
    (host=adb.us-ashburn-1.oraclecloud.com))(connect_data=(service_name=xxx123_azuredb_high.adb.oraclecloud.com))
    (security=(ssl_server_dn_match=yes)(TOKEN_AUTH=OAUTH)(TOKEN_LOCATION="C:\USERS\PETERFI\Oracle\azuredb\token")))

    関連項目:

    Oracle DatabaseとのEntra IDの統合の詳細は、『Oracle Databaseセキュリティ・ガイド』Microsoft Entra ID (Azure AD)ユーザーの認証および認可に関する項を参照してください。

4.1.5 OAuth 2トークンの取得

  1. 次の項の「ODBC データ ソース アドミニストレーター」GUIで作成する新しいデータソース名(DSN)をテストするためにトークンが必要なため、この時点でOAuth 2トークンを取得する必要があります(まだ取得していない場合)。

4.1.6 DSNの構成

  1. 正しいビット(32ビットまたは64ビット)の「ODBC データ ソース アドミニストレーター」を開きます。

    「ODBC データ ソース アドミニストレーター」は、コマンドラインから開くことも、「検索」または「開く」を使用して開くこともできます。

  2. 「ドライバー」タブに、インストールしたOracle Database ODBCドライバが表示されていることを確認します。

    図4-1 ODBC データ ソース アドミニストレーター (32 ビット)

    ODBC データ ソース アドミニストレーター (32 ビット)
  3. 「ユーザー DSN」タブを開きます。
  4. 追加をクリックします。
  5. 「データ ソースの新規作成」ダイアログ・ボックスで、適切なOracle Database ODBCドライバを選択します。

    図4-2 データ ソースの新規作成

    「データ ソースの新規作成」ウィンドウ
  6. 終了を選択します。
    「Oracle ODBC ドライバー構成」ダイアログ・ボックスが表示されます。
  7. 「Oracle ODBC ドライバー構成」ダイアログ・ボックスで、次のようにします。

    図4-3 Oracle ODBC ドライバー構成

    「Oracle ODBC ドライバー構成」ウィンドウ
    1. 「データ ソース名」に、データソース名を入力します。
    2. 「TNS サービス名」に、TNSサービス名のデータベースを選択します。

      選択した名前は、tnsnames.oraファイルの記述を反映している必要があります。

    3. 「ユーザー ID」は空白のままにします。
    4. 「接続テスト」ボタンをクリックします。

      接続成功メッセージが表示されます(有効なトークンがあることを確認してください)。

      TOKEN_LOCATIONに配置したトークンはデータベースに送信されます。データベースにアクセスする権限がある場合は、次のように接続成功メッセージが表示されます。

      図4-4 Oracle ODBC ドライバー構成 - 接続成功メッセージ

      Oracle ODBC ドライバー構成 - 接続成功メッセージ
    5. 「OK」をクリックして、メッセージを閉じます。
  8. 「Oracle ODBC ドライバー構成」ダイアログ・ボックスで「OK」をクリックします。

    「ODBC データ ソース アドミニストレーター」ダイアログ・ボックスの「ユーザー データ ソース」リストに、新しいユーザー・データソースが表示されます。

    図4-5 ODBC データ ソース アドミニストレーター (32 ビット)

    ODBC データ ソース アドミニストレーター (32 ビット)

4.1.7 Excelの構成

  1. Excelの新しいシートを開きます。
  2. 「データ」タブを選択します。
  3. 「データ」タブの「データの取得と変換」セクションで、「既存の接続」をクリックします。
  4. 「既存の接続」ダイアログ・ボックスで、「参照」をクリックします。
  5. 「データ ファイルの選択」ダイアログ・ボックスで、「新しいソース」をクリックします。
  6. 「データ接続ウィザード」ダイアログ・ボックスで、データソースの種類のリストから「ODBC DSN」を選択し、「次へ」をクリックします。

    新しいDSNが表示されます。

  7. 「データ接続ウィザード - ODBC データ ソースに接続」ダイアログ・ボックスで、新しいDSNを選択し、「次へ」をクリックします。

    図4-6 データ接続ウィザード - ODBC データ ソースに接続

    データ接続ウィザード - ODBC データ ソースに接続

    「次へ」をクリックすると、Excelはトークンを使用してデータベースにアクセスします。

    ノート:

    トークンが引き続き有効であることを確認します。

    「データ接続ウィザード - データベースとテーブルを選択」ダイアログ・ボックスが表示されます。

    図4-7 データ接続ウィザード - データベースとテーブルを選択

    データ接続ウィザード - データベースとテーブルを選択
  8. 「データ接続ウィザード - データベースとテーブルを選択」ダイアログ・ボックスで、Excelにインポートするデータを含むデータベースを選択し、「次へ」をクリックします。
  9. 次のフォームにファイル名と説明、および必要に応じてその他の詳細を入力し、「完了」をクリックします。
  10. データ・インポート・フォームで、インポートする必要なデータを選択します。

    Excelシートにデータが表示されます。

    図4-8 データがインポートされたExcelシート

    データがインポートされたExcelシート

    これで、Microsoft ExcelでのOracle Database ODBCドライバの設定は終了です。

4.2 Oracle Database ODBCドライバのTNSサービス名の作成

Oracle Net Servicesを使用してOracle Database ODBCドライバのTNSサービス名を作成するには、Oracle Net Servicesのインストールと同時にインストールされるOracle Net Configuration Assistant (NETCA)を使用します。NETCAによって、Oracle Database ODBCドライバのTNSサービス名のエントリがtnsnames.oraファイルに作成されます。

4.3 SQL文

Oracle Database ODBCドライバは、SQL-92のエントリ・レベル仕様のスーパーセットであるSQL-99のコア仕様と広く互換性があります。Oracleの文法に加えて、ODBC仕様の付録Cで概要を説明しているベンダー固有のエスケープ・シーケンスもサポートしています。ODBCの設計に従って、Oracle Database ODBCドライバは固有のSQL構文をOracle Databaseに渡します。

関連項目:

4.4 データ型

Oracle Databaseのデータ型は、Oracle Database ODBCドライバによってODBC SQLのデータ型にマップされます。

ノート:

Microsoft ODBC 3.52 Software Development Kit and Programmers ReferenceのAppendix Dにあるすべての変換は、適切な情報型を指定したSQLGetInfoのコールでリストされるODBC SQLデータ型についてサポートされています。

4.5 データ型の実装

トピック:

BOOLEANデータ型

Oracle Database 23ai以降、Oracle DatabaseではISO SQL標準に準拠したネイティブのBOOLEANデータ型をサポートしています。ネイティブのブール型を使用すると、表の列は、値がtrue、falseまたはnullであるSQLブール・データ型として定義できます。

SQLブール・データ型を使用すると、コーディングの明瞭性、一貫性および迅速性が向上します。ブール・データ型を使用すると、ブールの状態がより明確になり、コードの読みやすさの向上につながります。

ネイティブのブール・データ型のサポートを使用すると、ODBC準拠アプリケーションでは次のことができます。

  • BOOLEAN列データのフェッチまたは変更

  • BOOLEAN列に関するメタデータのフェッチ

ブール・データ型は、外部ではSQLT_BOLデータ型として表されます。SQLT_BOLデータ型は、BOOLEAN列のSQL型識別子として使用されます。APIコールのバインドと定義により、ODBCベースのアプリケーションのホスト変数にSQLT_BOLデータ型を関連付けることができます。

ODBCインタフェースは、Cデータ型識別子であるSQL_C_BITでブール型を表します。SQL_C_BITは、アプリケーションでブール型を表す符号なし文字(UCHAR)です。SQL_C_BITは0または1の値のみを受け入れるため、データベースからブール・データを取得するときに、このデータ値は0または1として表されます。

BOOLEAN列を使用してブール型データをバインドおよびフェッチ(または変更)するには、アプリケーションでバインドと定義の関数をコールして、次のものでCデータ型SQL_C_BITを指定します。

  • SQLBindCol()関数とSQLGetData()関数のTargetType引数。

  • SQLBindParameter()関数のValueType引数。

SQLBindCol()関数は、BOOLEAN列をフェッチの前にアプリケーション変数にバインドし、SQLGetData()関数はフェッチしたデータをフェッチ後に変数にバインドします。SQLBindParameter()関数では、SQL文のパラメータをアプリケーション変数にバインドします。

TargetType引数がSQL_C_BITデータ型の場合、Oracle Database ODBCドライバは、パラメータのバインドと定義を処理するときにSQLT_BOLSQL_C_BITにマップします。その後、ドライバはBOOLEAN列からデータをフェッチ(または変更)および取得するときに必要な変換を実行します。

データ・ソースでブール・データ型がサポートされているかどうかを判断するために、アプリケーションではSQLGetTypeInfo関数をコールできます。

SQLT_BOLデータ型で外部的に定義されている表の列のメタデータを取得するために、アプリケーションではSQLDescribeCol()関数をコールできます。

下位互換性確保のために、23aiより前のOracle Databaseリリースでは、内部的なデータ型変換を使用してOracle Database ODBCドライバのブール値をサポートします。

関連項目:

  • ブール・データ型の詳細は、『Oracle Database SQL言語リファレンス』ブール・データ型に関する項を参照してください。

  • ODBCのバインドと定義の関数およびサポートされるデータ型の詳細は、Microsoft ODBC API仕様を参照してください。

DATEおよびTIMESTAMP

OracleのDATEおよびTIMESTAMPデータ型のセマンティクスは、同名のODBCデータ型と必ずしも正確に対応していません。OracleのDATEデータ型には日付情報および時間情報の両方が、SQL_DATEデータ型には日付情報のみが含まれます。OracleのTIMESTAMPデータ型にも日付と時間の情報が格納されていますが、その小数秒の精度は他方に比較して高くなります。ODBCドライバでは、OracleのDATE列とTIMESTAMP列の両方のデータ型がSQL_TIMESTAMPとしてレポートされ、情報の紛失が回避されています。また、ODBCドライバにより、SQL_TIMESTAMPパラメータがOracleのTIMESTAMP値としてバインドされます。

浮動小数点データ型

10.1以降のOracleサーバーに接続すると、ODBCドライバにより、Oracleの浮動小数点のデータ型であるBINARY_FLOATおよびBINARY_DOUBLEが、ODBCデータ型であるSQL_REALおよびSQL_DOUBLEにそれぞれマップされます。以前のリリースでは、SQL_REALおよびSQL_DOUBLEがOracleの汎用数値データ型にマップされていました。

VECTORデータ型

Oracle Database 23ai以降、Oracle Database ODBCドライバではVECTORデータ型がサポートされています。ドライバは、SQL_CHARを使用してVECTORデータ型にマップします。

関連項目:

ベクトル・データ型の詳細は、『Oracle Database SQL言語リファレンス』ベクトル・データ型に関する項を参照してください

4.6 エラー・メッセージ

エラーが発生すると、Oracle Database ODBCドライバは、固有のエラー番号、SQLSTATE (ODBCエラー・コード)およびエラー・メッセージを返します。ドライバが検出したエラーとOracleサーバーが戻したエラーの両方から、この情報を導出します。

固有のエラー

データソースでエラーが発生した場合、Oracle Database ODBCドライバは、Oracleサーバーから戻された固有のエラーを返します。Oracle Database ODBCドライバまたはドライバ・マネージャがエラーを検出した場合、Oracle Database ODBCドライバは、0 (ゼロ)という固有のエラーを返します。

SQLSTATE

データソースでエラーが発生した場合、Oracle Database ODBCドライバは、戻された固有のエラーを適切なSQLSTATEにマップします。Oracle Database ODBCドライバがエラーを検出した場合は、適切なSQLSTATEを生成します。ドライバ・マネージャがエラーを検出した場合は、ドライバ・マネージャが適切なSQLSTATEを生成します。

エラー・メッセージ

データソースでエラーが発生した場合、Oracle Database ODBCドライバは、Oracleサーバーから戻されたメッセージに基づいてエラー・メッセージを返します。Oracle Database ODBCドライバまたはドライバ・マネージャでエラーが発生した場合、Oracle Database ODBCドライバは、SQLSTATEに関連するテキストに基づいてエラー・メッセージを返します。

エラー・メッセージの書式は次のとおりです。

[vendor] [ODBC-component] [data-source] error-message

大カッコ([ ])内の接頭辞によってエラーのソースが識別されます。次の表に、Oracle Database ODBCドライバから返される接頭辞の値を示します。エラーがデータソースで発生したときは、[vendor]および[ODBC-component]という接頭辞によって、ベンダーと、データソースからエラーを受け取るODBCコンポーネントの名前が識別されます。

表4-1 Oracle Database ODBCドライバが戻す接頭辞のエラー・メッセージ値

エラー・ソース 接頭辞

ドライバ・マネージャ

[vendor][ODBC-component][data-source]

[Microsoft/unixODBC][ODBC Driver Manager]N/A

Oracle ODBCドライバ

[vendor][ODBC-component][data-source]

[ORACLE][ODBC Driver]N/A

Oracleサーバー

[vendor][ODBC-component][data-source]

[ORACLE][ODBC Driver]N/A

たとえば、次に示すフォーマットのようにエラー・メッセージに[Ora]という接頭辞が含まれない場合、そのエラーはOracle ODBC Driverのエラーであり、自明であるために接頭辞が省略されています。

[Oracle][ODBC]Error message text here

次に示すフォーマットのようにエラー・メッセージに[Ora]という接頭辞が含まれる場合、Oracle ODBC Driverのエラーではありません。

ノート:

エラー・メッセージに[Ora]接頭辞が付いている場合でも、実際のエラーは複数のソースのいずれかで発生している可能性があります。

[Oracle][ODBC][Ora]Error message text here

エラー・メッセージのテキストが次に示す接頭辞で始まる場合は、そのエラーについての詳しい情報がOracleサーバーのマニュアルに記載されています。

ORA-

Oracle Net Servicesエラーおよびトレース・ロギングは、OCIソフトウェアがインストールされたWindowsシステムのORACLE_HOME\NETWORKディレクトリまたはUNIXシステムのORACLE_HOME/NETWORKディレクトリの下、具体的にはそれぞれlogディレクトリとtraceディレクトリにあります。データベース・ロギングは、Oracleサーバー・ソフトウェアがインストールされたWindowsシステムのORACLE_HOME\RDBMSディレクトリまたはUNIXシステムのORACLE_HOME/rdbmsディレクトリにあります。

サーバーのエラー・メッセージの詳細は、Oracleサーバーのマニュアルを参照してください。