Linux とその他の UNIX での ODBC ドライバーの構成

Denodo Platform は、ODBC PostgreSQL ドライバーをベースとした ODBC ドライバーを提供しています。unixODBC ドライバーマネージャー用と iODBC ドライバーマネージャー用にそれぞれ 1 つのバージョンがあります。

Denodo ODBC ドライバーは、 クライアントアプリケーションが実行されるマシン にインストールする必要があります。インストールするには、以下の手順に従って実施してください。

  1. 適切な ODBC ドライバーの取得

  2. unixODBC のインストール

  3. unixODBC への ODBC ドライバーの登録

  4. Denodo を参照するデータソース (DSN) の登録

適切な ODBC ドライバーの取得

Denodo ODBC ドライバーには複数の種類があります。ここでは、どの種類を選択する必要があるかについて説明します。

  1. パッケージ denodo-vdp-odbcdriver-linux.zip を取得します。そのためには、以下の手順に従います。

    1. インストール (<DENODO_HOME>/tools/client-drivers/odbc/denodo-vdp-odbcdriver-linux.zip) からコピーします。

    2. または、Denodo Community の ODBC ページ からダウンロードします。

      このページで、Linux 用のドライバー (名前は -linux で終わります) をダウンロードします。接続する Denodo サーバー 以前の バージョンのパッケージを選択してください。たとえば、Denodo サーバーに更新プログラム 7.0 20181011 が適用されている場合、パッケージ denodo-vdp-odbcdriver-7.0-update-20190312-linux はこれより新しいため、ダウンロード しないでください

      このドライバーの下位互換性に関するポリシーについては、「 ODBC 経由でのアクセス 」を参照してください。

  2. denodo-vdp-odbcdriver-linux.tar.gz ファイルの内容を展開します。

    tar -xzf denodo-vdp-odbcdriver-linux.tar.gz --directory /opt
    

    これにより、/opt/denodo-vdp-odbcdriver-linux フォルダーが作成されます。

  3. 該当する種類のドライバーを選択し、そのすべてのファイルを、クライアントアプリケーションが実行されるホストにコピーします。以下のオプションを選択できます。

    • unixodbc_x86: 32 ビットクライアント用の ODBC ドライバーと unixODBC ドライバーマネージャー

    • unixodbc_x64: 64 ビットクライアント用の ODBC ドライバーと unixODBC ドライバーマネージャー

    • iodbc_x86: 32 ビットクライアント用の ODBC ドライバーと iODBC ドライバーマネージャー

    • iodbc_x64: 64 ビットクライアント用の ODBC ドライバーと iODBC ドライバーマネージャー

    たとえば、unixODBC ドライバーマネージャーを使用して 32 ビットアプリケーションに接続するには、 unixodbc_x86 フォルダーをクライアントアプリケーションが実行されるホストにコピーします。

    Denodo は、各ドライバーの ANSI バージョンも提供しています。これらは、「a」で終わる名前のファイルです (unixodbc_x86/denodoodbca.so など)。ANSI バージョンは、ご使用の環境で Unicode エンコードが有効でない場合にのみ使用してください。

unixODBC のインストール

Linux にはデフォルトでは ODBC ドライバーマネージャーが付属していないため、ユーザーがインストールする必要があります。ここでは、 unixODBC をインストールして構成する方法について説明します。また、Denodo は、iODBC で使用するコンパイル済みの ODBC ドライバーも提供しています。

重要

unixODBC および Denodo ODBC ドライバーは、クライアントアプリケーションが実行されるホストにインストールします。

unixODBC がインストール済みかどうかを確認するには、以下の一連のコマンドを実行します。これらは、コマンドラインユーティリティの odbcinstisql がインストール済みかどうかをチェックします。

which isql

which odbcinst

両方のコマンドがファイルのパスを返した場合は、次のセクションに進みます。

unixODBC がインストールされていない場合は、以下の手順を実行します。

  1. RPM パッケージングシステムを使用する Linux ディストリビューション (Red Hat、CentOS など) の場合は以下のコマンドを実行します。

    sudo yum install unixODBC
    

    Debian ベースの Linux ディストリビューション (Ubuntu など) の場合は以下のコマンドを実行します。

    sudo apt-get install unixodbc
    
  2. 以下のコマンドを実行して、unixODBC が正しくインストールされていることを確認します。

    odbcinst -j
    

unixODBC への Denodo ODBC ドライバーの登録

unixODBC をインストールしたら、ODBC ドライバーを登録します。以下の手順に従って実施してください。

  1. 次の内容が含まれている denodoODBCDriver.template ファイルを作成します。

    1
    2
    3
    4
    [DenodoODBCDriver]
    Description=ODBC driver of Denodo
    Driver=/opt/denodo-odbc-driver/unixodbc_x86/denodoodbc.so
    UsageCount=1
    

    3 行目を変更して、使用する種類の ODBC ドライバーを指定します (unixodbc_x86、unixodbc_x64 など)。

  2. 次のコマンドを実行して、Denodo ドライバーを ODBC ドライバーマネージャーに登録します。

    sudo odbcinst -install -driver -file denodoODBCDriver.template
    

ドライバーマネージャーに登録されている ODBC ドライバーのリストを確認するには、次のコマンドを実行します。

sudo odbcinst -query -driver

返される結果には、新しいドライバー DenodoODBCDriver が表示されます。

ドライバーをアンインストールするには、次のコマンドを実行します。

sudo odbcinst -uninstall -driver -name DenodoODBCDriver

unixODBC へのデータソース (DSN) の登録

ここでは、DSN を unixODBC に登録する方法について説明します。

  1. 次の内容が含まれている denodoDSN.template ファイルを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[Denodo_DSN]
Description = Denodo connection
Driver = DenodoODBCDriver
Servername = <host name>
Port = <Virtual DataPort ODBC port. Default is 9996>
UserName = <Virtual DataPort user name>
Password = <Password>
Database = <Virtual DataPort database>
UserAgent = <name of the application that will use the DSN>
Protocol = 7.4
BoolsAsChar = 0
ByteaAsLongVarBinary= 1
ConnSettings = SET QUERYTIMEOUT TO 3600000; SET I18N TO us_pst; /*krbsrvname=HTTP*/
Debug = 0
Commlog = 0
FakeOidIndex = 0
Fetch = 1000
Ksqo = 0
LFConversion = 1
Optimizer = 0
ReadOnly = 0
RowVersioning = 0
ShowOidColumn = 0
ShowSystemTables = 0
# Uncomment the "Sslmode" property if SSL is enabled in the Virtual DataPort Server
# Sslmode = require
UniqueIndex = 1
UpdatableCursors = 0
UseDeclareFetch = 1
UseServerSidePrepare= 0

8 行目 (Database) で、データベースの名前に非 ASCII 文字が含まれている場合、これらを URL エンコードする必要があります。たとえば、データベースの名前が「テスト」の場合、このプロパティを %E3%83%86%E3%82%B9%E3%83%88 に設定します。

30 行目 (UseDeclareFetch) で、値が 1 の場合、DSN は DECLARE CURSOR/FETCH を使用して SELECT ステートメントを処理します。これにより、DSN は結果の行を一度にすべてではなくブロック単位で取得します。 Fetch プロパティは、各ブロックの行数を設定します。このプロパティは、JDBC コネクションの「Fetch size」に相当するものです。

14 行目と 15 行目 (DebugCommlog) で、値が 1 の場合、ドライバーは、 /tmp ディレクトリに作成されたファイルに詳細な ODBC 情報のログを記録します。本番環境では、このプロパティの値を 0 に設定することをお勧めします。これは、すべてのリクエストのログを記録するとドライバーのパフォーマンスが低下し、ログファイルのサイズが非常に大きくなる場合があるためです。

13 行目 (ConnSettings) で、以下のステートメントを追加することで、Virtual DataPort に対して確立されたコネクションのプロパティを設定できます。

  1. SET QUERYTIMEOUT TO <value> は、クエリのタイムアウトを変更します (値はミリ秒単位)。

  2. SET i18n TO <i18n> は、コネクションのロケールを変更します。

たとえば、クエリのデフォルトのタイムアウトを 1 時間に設定するには、 ConnSettings プロパティの値を次のように設定します。

ConnSettings=SET QUERYTIMEOUT TO 3600000; SET I18N TO us_pst

各ステートメント間の ; に注意してください。

これらのプロパティの機能とそのデフォルト値については、「 ODBC ドライバーのパラメーターとそのデフォルト値 」を参照してください。

通信を保護するために Virtual DataPort サーバーで SSL を有効にした場合は、次のプロパティをこの構成ファイルに追加します。

Sslmode=require
  1. Kerberos 認証を使用して Virtual DataPort に接続するには、次の ConnSettings プロパティを追加します。

    /*krbsrvname=HTTP*/
    

    重要

    この行は、 ConnSettings プロパティの最後に追加する必要があります。

    接続している Denodo データベースで Kerberos 認証が有効になっている場合、ドライバーはプロパティ「UserName」および「Password」の値を無視します。代わりに、システムキャッシュから Kerberos チケットを取得します。

    Kerberos 認証を使用できるようにするには、DSN の構成が以下の条件を満たしている必要があります。

    1. DSN が接続するデータベースの構成で、[ODBC/ADDO.net authentication type] オプションが [Kerberos] に設定されている。

    2. クライアントが Windows ドメインに属している。これは、ODBC ドライバーがオペレーティングシステムのチケットキャッシュを使用して「チケット保証チケット」(TGT) を取得するためです。

    3. Servername プロパティに、Denodo サーバーの完全修飾ドメイン名を入力する。つまり、Denodo サーバーの Kerberos 構成の [Server principal] フィールドが HTTP/denodo-prod.subnet1.contoso.com@CONTOSO.COM の場合、「 denodo-prod.subnet1.contoso.com 」と入力します。

  2. UserAgent プロパティはオプションですが、これをすべての DSN に追加することをお勧めします。その理由は、ユーザーエージェントを使用することで、各コネクションを開くアプリケーションと、各アプリケーションが送信するリクエストを識別できるためです。これは、特定のクライアントが原因で発生した問題のデバッグやログのために役立ちます。

  1. 次のコマンドを実行して新しい DSN を登録します。

sudo odbcinst -install -s -l -f denodoDSN.template

パラメーター -l は、DSN を「システム DSN」として登録します。「システム DSN」は、すべてのユーザーが使用できます。

「システム DSN」を登録するための十分な権限がない場合は、 -l-h に置き換えて、代わりに DSN を「ユーザー DSN」として登録します。これを行う場合、この DSN にアクセスする必要があるクライアントアプリケーションを実行するユーザーと同じ名前でこのコマンドを実行します。「ユーザー DSN」はその DSN を登録したユーザーのみが使用できるためです。

ODBC ドライバーマネージャーに登録されている DSN のリストを確認するには、次のコマンドを実行します。

sudo odbcinst -query -s

返される結果には、新しい DSN Denodo_DSN が表示されます。

  1. unixODBC に付属のコマンドラインユーティリティ「isql」を使用し、次のコマンドを実行して DSN をテストします。

isql -v Denodo_DSN

以下のようなテキストが出力されます。

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

任意のクエリ (SELECT 1 など) を実行してから「 quit 」と入力してこのシェルを終了します。

DSN をセットアップしたら、「 サードパーティアプリケーションとの統合 」を参照することをお勧めします。

UnixODBC のコンパイル

ご使用のオペレーティングシステムのパッケージマネージャーを使用して unixODBC をインストールできない場合は、unixODBC をダウンロードしてコンパイルします。そのためには、以下の手順に従って実施してください。

  1. http://www.unixodbc.org/download.html からソースコードの最新バージョンをダウンロードします。

  2. 以下のコマンドを実行して、ソースコードを展開してコンパイルします。

    tar -zxf unixODBC*.tar.gz
    cd unixODBC
    ./configure.sh
    make
    
  1. 次のコマンドを実行します。

    sudo make install
    

問題のトラブルシューティング

この DSN を使用しようとしたときに、アプリケーションが次のようなエラーを返す場合があります。

[unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)

この場合は、以下の手順に従います。

  1. DSN を作成したホストに接続します。

  2. 以下の各ファイルが存在することを確認します。

    /usr/local/lib64/libodbc.so
    /usr/local/lib64/libodbcinst.so
    

    または

    /usr/local/lib/libodbc.so
    /usr/local/lib/libodbcinst.so
    

    これらのファイルの場所は、Linux/Unix ディストリビューションによって異なる可能性があります。

  3. ~/.bash_profile ファイルを編集して、以下のテキストを末尾に追加します。

export LD_PRELOAD=/usr/local/lib/libodbc.so:/usr/local/lib/libodbcinst.so:$LD_PRELOAD

LD_PRELOAD 変数をこのように変更することによって、他のライブラリによって提供されるものではなく、unixODBC によって提供される libodbc.so ファイルと libodbcinst.so ファイルがアプリケーションによって必ず読み込まれるようにします。

注釈

上記の 2 つのファイルが、 lib ではなく lib64 に存在する場合は、それに合わせて適宜変更してください。

  1. このユーザーアカウントからいったんログアウトして再度ログインすると、ファイル .bash_profile に対する変更が適用されます。