2007年05月26日

Beta 7

Informix Dynamic Server Cheetahのオープンベータ実施中ですが、公開されているバイナリーが更新されています。現在のバージョンは、version 11.10.TB7TL ( Windows版: Unix版では、UB7TL, FB7TL...)です。

IDSAdminの方は最近更新されてませんね。

ダウンロードはいつもどおりこちらから出来ます。

http://ibm.com/informix/new

  
タグ :cheetah

2007年05月26日

sqexplain.out and GLS

SET EXPLAIN ON を使ってSQLのアクセス・プランを調べている途中で、不思議なことに気づきました。

sqexplain.outに出力される内容のエンコーディング ( encoding ) が、場所により異なるGLS環境変数によって決定されているようです。



1.SQL識別子
表名や列名に含まれる文字は、oninitを起動した時の環境変数SERVER_LOCALEに従ってエンコードされています。表名や列名は、それらが含まれるデータベースのDB_LOCALEによってエンコーディングされてシステムカタログに格納されていますが、必要に応じてDB_LOCALEとSERVER_LOCALEとの間のコードセット変換をしているようです。


2.ユーザー・インターフェース文字列
sqexplain.outファイルには、"Estimated Cost" (見積もりコスト)など、内容を見やすくするための決まり文句(ここではユーザー・インターフェース文字列と呼んでいます)が含まれています。ユーザー・インターフェース文字列の言語やエンコーディングは、oninitを起動した時の環境変数DBLANG(もし設定されていなければ、同CLIENT_LOCALE)によって決定されているようです。


確認した限りでは、クライアント側で設定したCLIENT_LOCALE, SERVER_LOCALEなどの値には左右されないようでした。sqexplain.outファイルはデータベース・サーバー・コンピューター上に生成されるので、これで問題ないとは思います。しかし同一データベース・インスタンス上に複数のコードセットや言語でデータベースを作成しているような場合には、それぞれのデータベースのDB_LOCALEと、oninit起動時のSERVER_LOCALEとの間でのコード変換がサポートされているか、注意が必要ですね。また、DBLANGとSERVER_LOCALEの値が違っていると、言語によってはsqexplain.outファイルの一部が文字化けして判読できない、というケースも発生します(特に日本語、中国語、韓国語でUTF-8とそれ以外のコードセットを混在している場合)。sqexplain.outのエンコーディングに使用されるDBLANGやSERVER_LOCALEを変更する場合、一度インスタンスを止めてから環境変数を設定しなおす必要があるようなので、それも注意してください。
----------------------------------------
Codesets used in sqexplain.out:
* SQL identifiers
- Table names, Column names, Index names, ...
- Codeset determined by SERVER_LOCALE value of "oninit" (note1)
* User Interface strings
- Translation of "QUERY", "Estimated cost", ...
- Codeset determined by DBLANG values (note2)

note2: Priority1: "oninit"'s DBLANG
Priority2: "oninit"'s CLIENT_LOCALE
Prioirty3: client's DBLANG
:

What I learned..:
* Changing codesets for sqexplain.out file
- You can not control them per session
- oninit needs to be restarted with new environment values

* SQL Identifier names
- oninit does codeset conversion from DB_LOCALE to DBLANG
--------------------------------------------------
  
続きを読む
タグ :sqlgls

2007年05月23日

ESQL/C "Callback Function"

Updated: 2007/09/28 - ESQL/C 3.0日本語マニュアルのPDFを掲載

INFORMIX ESQL/C version 2.9ESQL/C 3.0の日本語マニュアル PDFに、コールバック関数という機能が紹介されています。これを使うと、例えば、指定した制限時間を越えても実行が終わらないSQLを強制的に終了させる、というような操作が可能になります。

使い方はだいたいこんな感じです。

1.制限時間を超過した時のチェック処理を行う関数 (コールバック関数) を用意する。

この関数は、ESQL/Cの組み込み関数で登録しておくと、制限時間を超過した時にESQL/Cライブラリーから呼び出されるようになります(これが「コールバック関数」という名前の由来です)。コールバック関数の中では、主に、以下の処理のためのコードを用意しておきます。

* 現在のデータベース・サーバー側の処理状況を調べる
ESQL/Cの組み込み関数 sqldone() を使います。本当にまだSQLの処理中だったような時には、sqldoneの戻り値に-439 が返ってきます。なお、コールバック関数の中でSQLを実行したりすることは許可されていません。もし、SQLを実行した場合、エラーになりますが、そのときのエラー番号も -439です。ちょっと混乱します。


* 処理状況により、必要に応じてデータベース・サーバー側に処理の中断を指示する。
サーバー処理の中断には、ESQL/Cの組み込み関数 sqlbreak() を使います。


* その他必要な後処理を行う。
処理が中断されたことをアプリケーションコードに知らせるためのフラグがあればそれを立てる、など。


2. コールバック関数を、制限時間とともに ESQL/C実行時ライブラリー内に登録する。

ESQL/Cのソースコード内で、組み込み関数sqlbreakcallback() を呼び出して登録します。

後は、ESQL/C ソースコードをコンパイルして実行するだけですね。

詳しくは、$INFORMIXDIR/demo/esqlc/timeout.ec を見てください。  
続きを読む
タグ :csdkesqlc

2007年05月10日

SSJE 6.1 を日本語環境で...

...使ってみました。SolarisとWindows XP それぞれの IDS V10.00.xC6に接続してみました。以下、気づいたことをまとめました。



1. Command Conosle を使う場合の注意事項

Command Console 実行前に、必ず Connect しておくこと。そうしないと、なぜかCommand Console内でINFORMIXDIR, INFORMIXSERVER などの環境変数が正しく設定されません。

2. Command Console でIDS on Windows に接続する場合の注意事項

- あらかじめWindows上で telnet サービスをセットアップしておくこと:詳しくはWindowsのヘルプを参照してください。
- Database タブの Server ( INFORMIXSERVER ) を正しく設定(名前を間違えないこと)。
- Host Access タブの INFORMIXDIR, ONCONFIG を正しく設定。
- Windows のCUI フルスクリーン系のアプリケーションは Command Console 上では使用できないようです。dbaccess のフルスクリーン画面は表示されませんでした。キー入力は受け付けているので、間違って実行してしまったら、e を入力すれば終了できます。
- コントロールキーの入力が出来ないようです。( ctrl-j など一部のみ可能 ) dbaccess をラインモード ( for example ... dbaccess - - ) で実行すると終了できなくなりますよ。
- 備考:GUI画面でのDB_LOCALEやCLIENT_LOCALEは、"Connection"を "Edit" する画面で、"Database"タブの "Advanced" ボタンをクリックし、環境変数設定画面で入力できます。



ここで入力したCLIENT_LOCALEやDB_LOCALEは、GUI画面での操作時に使用されます。Command Console内の操作で正しく日本語文字を扱えるようにする方法については、下記 "4. Command Console を UNIX の日本語環境で使う場合の注意事項"を参照してください。ただし、Windows版だと、「変数名=xxxx; export 変数名」ではなく、「set 変数名=xxxx」と書いた方が良いと思います。

3. Command Console を一般的なUNIX環境で使う場合の注意事項

- login shell は、bourne shell または互換のものを..Command Consoleでの環境変数設定機能は、bsh 用に出来ています。login shell に csh を使っていると環境変数の設定が失敗します。

4. Command Console を UNIX の日本語環境で使う場合の注意事項

- 日本語Windows上では、SHIFT-JIS のみ使用可能。従って、UNIX 側で、
export CLIENT_LOCALE=ja_jp.sjis-s
export LANG=ja_JP.PCK
export DBLANG=ja_jp.sjis-s もしくは en_us.8859-1 または en_us.CP1252
(以上、KSH での設定例。bsh なら、変数の値をセットしたあと、その変数をexportする必要があります。)

にする必要があります。DB_LOCALEは、アクセスするデータベースに合わせてその場で設定した方が良いでしょう。LANGについては、OSによって異なります。上記の例は、Solaris 8/9/10で利用可能 ( OS にja_JP.PCKロケールがインストールされている必要がある )です。以下のように、Host Access タブの、Login Automationボタンを押して、"Advanced Host Access Options" 画面を呼び出し、ここに設定しておくと良いでしょう。なお、以下の画面は、Solaris の Bourne shell を使うための設定になっています。

(上の画面では、環境変数の値をセットした後、exportする行が表示されていませんが、実際には必要です)  
続きを読む
タグ :ssjegls

2007年05月07日

4GL V7.32.UC4 on RHFC(gcc4)

Infomrix 4GL Compiler version 7.32.UC3 を gcc v4 で使おうとすると、 gcc が -fwritable-strings オプションをサポートしていないため、アプリケーションの コンパイルが出来ませんでした。また、$INFORMIXDIR/bin/c4gl を書き換えて無理にコンパイルすると、出来上がったアプリケーションが正しく動作しませんでした。
( フォームの実行時などに、「セグメントエラー」 ( Segmentation Error ) が発生 )



Informix 4GL Compiler version 7.32.UC4 では、GCC4 との組み合わせでも動作するようですね。リリースノートに、gcc 4 での問題を修正した旨の記述があります。

_________________________________________________________

RELEASE NOTES FOR IBM INFORMIX TOOLS 7.32.xC4
DATE: November 2006
________________________________________________________


II. Bugs addressed in the 7.32.xC4 release

00128321 When compiling 4GL.7.32.UC3 application the option
-fwritable-strings will not be accepted by GNU
compiler GCC.4.


試しに RedHat Fedora Core 4 で i4gldemo を動かしてみましたが、demo4.4geのコンパイルと実行が特に問題なく出来ているようです。なお、machine note には、 GCC 4 について何も記載がありませんでした。残念ながら現在のところ GCC4やRHFC4 などでの利用は自己責任でお願いします。

ただし、この話とは別に、RHFC4 などの、一部の SELINUX 環境では、4GL アプリケーションを実行しようとした時に、エラーが出て実行できない場合があります。

c4gl d4_load.4gl
./a.out
./a.out: error while loading shared libraries: /usr/ifxtooluc4/lib/tools/lib4gsh.so: cannot restore segment prot after reloc: Permission denied

上記のようなエラーが発生した場合、次のコマンドを試してみると問題が解決する場合があるようです。

chcon -t texrel_shlib_t $INFORMIXDIR/lib/tools/*.so*
( 多分、chcon -t texrel_shlib_t $INFORMIXDIR/lib/esql/*.so* も必要ですね )

以下のURLにある情報が参考になりました。
http://www.querix.com/support/support/knowledge-base/platform/faq_linux_redhat  
タグ :4glgcclinux

2007年05月07日

Cheetah で追加されたSQL予約語

IDS Cheetahで新しく追加された予約語の一覧が掲載されています。

http://www-03.ibm.com/developerworks/blogs/page/idsteam?entry=new_reserved_words

Informix のデータベース・サーバー自体は、予約語を識別子として使用することを許していますが、組み合わせて使用するアプリケーションやAPI ( ODBC, OLEDB など ) が持つ制限や、記述したSQLの読みやすさを考えると、予約語を識別子として使用することは避けた方が良いですね。  
タグ :cheetahsql

2007年05月03日

Windows上での複数バージョン使用

Windows版のInformix Dynamic Server の複数のバージョンを同じPC上で共存させられるかが話題になっています。

http://www-128.ibm.com/developerworks/forums/dw_thread.jsp?forum=1071&thread=160162&cat=19
これを読むと、別々のディレクトリーにインストールし、それぞれのインスタンスに間違いなく別々の TCP サービス番号を割り当てれば問題ないらしいです。

私はこれまで試したこともありませんでした。当然駄目だと思っていました。試してみたら、ちゃん動きますね。

画面は、IDS version 10.00.TC6を c:\win32app\informix10に、そして Cheetah ( 11.10.TB6TL )をc:\win32app\informixにインストールして、それぞれのインスタンスを起動させたところです。



UnixでもWindowsでも、同一サーバー機上の複数のインスタンスの状況を表示させるには、

onstat -g dis


を使います。

IBM Informix Dynamic Server Version 11.10.TB6TL -- On-Line -- ( 行末省略 )
There are 2 servers found
Server : ol_xxxxpc06
Server Number : 0
Server Type : IDS
Server Status : Up
Server Version: IBM Informix Dynamic Server Version 11.10.TB6TL
Shared Memory : 0xc000000
INFORMIXDIR : c:\win32app\informix
ONCONFIG : c:\win32app\informix/etc/ONCONFIG.ol_xxxxpc06
SQLHOSTS : c:\win32app\informix/etc/sqlhosts
Host : xxxxpc06

Server : ol_xxxxpc06x
Server Number : 1
Server Type : IDS
Server Status : Up
Server Version: IBM Informix Dynamic Server Version 10.00.TC6
Shared Memory : 0xc000000
INFORMIXDIR : c:\win32app\INFORM~1
ONCONFIG : c:\win32app\INFORM~1/etc/ONCONFIG.ol_xxxxpc06x
SQLHOSTS : c:\win32app\INFORM~1/etc/sqlhosts
Host : xxxxpc06

私の経験では、32bit版のインスタンスの onstat では、64bit版のインスタンスについての情報は完全には表示されませんでした。(逆も同様 ) 同一マシン上で 32bit版と64bit版をインストールして同時に起動している場合には、それぞれの onstat を使って一覧を出力した方が良いですね。今はUnix版だけの注意事項ですが、CheetahではWindows上の64bit版 (AMD64/EM64T) もクローズド・ベータが計画されています。
  
タグ :windows