LinuxでTerminal生活を行っていると、
Windows上でもCommandLineで何でもできないものかと考えてしまうものです。
ODBCのDSN名をコマンド一発で作成できないかと調べてみました。
odbcconfというプログラムが秘かに存在するようです。
マイナーDBの設定の引数が分からない
SQL Serverでのodbcconfの指定方法は良く見つかります。
PostgreSQLやMySQLのodbcconfの指定方法はStack Overflowあたりで転がっていますが、
マイナーDBはガン無視されてとってもかわいそうでした。
informixも例外ではなくodbcconfでの引数はマニュアル等に書かれていないようです。
ファイルDSNから探り出す
ファイルDSNというものがあります。
ODBC データソースアドミニストレーターで作成できます。
元々はODBCの設定を持ち運ぶために存在するようです。
File DSNの中身はただのテキストです。
odbcconfはコマンドラインでDSNを設定するツールです。
File DSNの中身の変数をodbcconfで使えるのではないかと考えました。
ファイルDSNを作成
-
ODBCデータソースアドミニストレーターを開く
[コントロールパネル] > [管理ツール] > [データ ソース (ODBC)] -
ファイルDSNタブを選択
-
[追加]を押す
-
データソースの新規作成
INFORMIX ODBC DRIVER(x64)を選択し[次へ] -
参照を押して保存先を選びます。
今回はマイドキュメントにします。
ファイル名「ifxa.dsn」と入力して[保存]
[次へ]
[完了]を押す -
IBM Informix ODBC Driver Setup画面
Connectionタブ
必要な項目を入力
Enviromentタブ
必要な項目を入力
Advancedタブ
必要な項目にチェック
Connectionタブの
[Test Connection]を押して接続できるか確認
[OK]を押す -
Save File DSN
マイドキュメントが指定されていることを確認し、
ファイル名「ifxb.dsn」と入力して保存
作成したファイルDSNを見てみる
ドキュメントに保存されているifxa.dsnをメモ帳で開いてみましょう。
[ODBC]
DRIVER=IBM INFORMIX ODBC DRIVER (64-bit)
UID=db_user
DDFP=1
DLOC=ja_JP.932
CLOC=ja_JP.932
PRO=onsoctcp
SERV=1526
SRVR=myserver
HOST=192.168.0.1
DATABASE=mydb
もう一つifxb.dsnも見てみます。
[ODBC]
DRIVER={IBM INFORMIX ODBC DRIVER (64-bit)}
UID=db_user
PWD=EP 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
DATABASE=mydb
HOST=192.168.0.1
SERVER=myserver
SERVICE=1526
PROTOCOL=onsoctcp
CLIENT_LOCALE=ja_JP.932
DB_LOCALE=ja_JP.932
DESCRIBEDECIMALFLOATPOINT=1
ifxa.dsnの方が文字数が少ないですが、
ifxb.dsnの方はPWD、Passwordが設定されています。
そこで、二つのいいとこ取りをして、
こんなコマンドにします。
完成したコマンド
僕の環境で下記のコマンドが動くことを確認しました。
odbcconf /A {CONFIGDSN "IBM INFORMIX ODBC DRIVER (64-bit)”
“DSN=informix|DRIVER=IBM INFORMIX ODBC DRIVER|UID=id|
PWD=pass|DDFP=1|DLOC=ja_JP.932|CLOC=ja_JP.932|PRO=onsoctcp
|SERV=1526|SRVR=myserver|HOST=192.168.0.1|DATABASE=mydb”}
マイナーDBでodbcconfのDSNに追加する方法が分からない方は一度お試しあれ。