2008年08月05日
MSG_DATE
昨日、こちらのウェブサイトにて、MSG_DATEというONCONFIG パラメータの存在に気づきました。
日本語のマニュアル ( http://publibfp.boulder.ibm.com/epubs/pdf/c8848820.pdf : Admin Ref / 管理者リファレンス )にも記載されている、IDS 11.50の新機能です。このパラメーターを1 にしてエンジンを再起動すると、以下のように、online.log ( MSGPATHパラメータの出力先ファイル )に出力される行に、日付の表示が追加されます。online.log中に記録された特定のイベントが、何月何日に発生したのか調べるのが少し楽になりますね。
14:21:50 IBM Informix Dynamic Server Stopped.
14:23:35 IBM Informix Dynamic Server Started.
14:23:35 Requested shared memory segment size rounded from 54506KB to 54528KB Mon Aug 04 14:23:35 2008
08/04/08 14:23:35 Warning: ONCONFIG dump directory (DUMPDIR) 'C:\win32app\INFORM~1\tmp' has insecure permissions
08/04/08 14:23:35 Booting Language from module <>
08/04/08 14:23:35 Loading Module
08/04/08 14:23:35 Booting Language from module <>
08/04/08 14:23:35 Loading Module
08/04/08 14:23:40 DR: DRAUTO is 0 (Off)
08/04/08 14:23:40 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled)
日本語のマニュアル ( http://publibfp.boulder.ibm.com/epubs/pdf/c8848820.pdf : Admin Ref / 管理者リファレンス )にも記載されている、IDS 11.50の新機能です。このパラメーターを1 にしてエンジンを再起動すると、以下のように、online.log ( MSGPATHパラメータの出力先ファイル )に出力される行に、日付の表示が追加されます。online.log中に記録された特定のイベントが、何月何日に発生したのか調べるのが少し楽になりますね。
14:21:50 IBM Informix Dynamic Server Stopped.
14:23:35 IBM Informix Dynamic Server Started.
14:23:35 Requested shared memory segment size rounded from 54506KB to 54528KB Mon Aug 04 14:23:35 2008
08/04/08 14:23:35 Warning: ONCONFIG dump directory (DUMPDIR) 'C:\win32app\INFORM~1\tmp' has insecure permissions
08/04/08 14:23:35 Booting Language
08/04/08 14:23:35 Loading Module
08/04/08 14:23:35 Booting Language
08/04/08 14:23:35 Loading Module
08/04/08 14:23:40 DR: DRAUTO is 0 (Off)
08/04/08 14:23:40 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled)
2008年07月26日
onmode -ky
こちらのブログで、Informixのデータベースサーバーを停止する方法について書かれています。
"onmode -ky"は確かにデータベースサーバーを停止しますが、「有無を言わさず」停止するので実運用のシステムでやたらと"y"をつけるのはちょっと怖いですね。
私は、後々も使うシステムについては、まず onmode -c でフルチェックポイントを実行してから落とすようにしています。
本来なら、onstat -u などの出力を見ながら慎重に実施するところですが、もし「有無を言わさず」停止するとしたら...
テクニカルサポートの担当者からは、更に現行のセッションをクローズするために onmode -uも事前に実行した方が良い、と教わりました。
# onmode -u
# onmode -c
# onmode -ky
以前受講したInformix関連の研修では、上記と同様ですが、
# onmode -yuck
を薦められました。
Informixでは、本来はonmode -kで、ユーザーセッションの切断やフルチェックポイントも同時に行われるのですが、念には念を入れて、ということでしょう。
でも、私は、onmode -cは別コマンドラインで実行したいですね。
# onmode -c
# onmode -uky
皆さんはどのように停止していますか?
( Windows なら net stop <サーバー名>でも停止できますね )
"onmode -ky"は確かにデータベースサーバーを停止しますが、「有無を言わさず」停止するので実運用のシステムでやたらと"y"をつけるのはちょっと怖いですね。
私は、後々も使うシステムについては、まず onmode -c でフルチェックポイントを実行してから落とすようにしています。
本来なら、onstat -u などの出力を見ながら慎重に実施するところですが、もし「有無を言わさず」停止するとしたら...
テクニカルサポートの担当者からは、更に現行のセッションをクローズするために onmode -uも事前に実行した方が良い、と教わりました。
# onmode -u
# onmode -c
# onmode -ky
以前受講したInformix関連の研修では、上記と同様ですが、
# onmode -yuck
を薦められました。
Informixでは、本来はonmode -kで、ユーザーセッションの切断やフルチェックポイントも同時に行われるのですが、念には念を入れて、ということでしょう。
でも、私は、onmode -cは別コマンドラインで実行したいですね。
# onmode -c
# onmode -uky
皆さんはどのように停止していますか?
( Windows なら net stop <サーバー名>でも停止できますね )
2008年07月12日
Syntax....
最近、下記のような入力間違いが原因の相談を、それぞれ複数受けました。INFORMIXに関連ないものもありますが、皆さん気をつけましょう。
( C-shell 系) setenv INFORMIXDIR=/opt/IBM/informix
これは、INFORMIXDIRに限らず、どんな環境変数でも共通です。setenvが失敗したり、この例だと環境変数 "INFORMIXDIR=" の値に /opt/IBM/informixが設定されたりします。また、過去に私が関わったOSでは、シェルがコアダンプして異常終了したりしました。私自身もこれに嵌った事がありました。.cshrcに setenv TERM=vt100とか書いておいたら、その時のC-Shellは上記のコアダンプするタイプのものだったので、ログインが出来なくなってしまいました。
( B-shell系) set INFORMIXDIR=/opt/IBM/informix; export INFORMIXDIR
setをつけると「シェル変数」もしくは「シェルの設定パラメーター」として扱われます。パラメーターとして扱われる場合、知らないパラメーターの場合にエラーを返すものと返さないものがあります。エラーを返さないタイプのシェルだと、かなり悩みます。
(ONCONFIG) DBSPACETEMP tempdisk1, tempdisk2, tempdisk3, tempdisk4...
tempdisk1とtempdisk2の間の区切りがカンマ ","またはコロン":"だけなら良いのですが、 空白が入っていると予期せぬことが起こります。具体的には、複数の領域が指定してあってもtemp DBSPACEがラウンドロビンして使われず、tempdisk1のみが使用されたりします。マニュアルにも、「空白は使用できない」旨が明記されています。
続きを読む
( C-shell 系) setenv INFORMIXDIR=/opt/IBM/informix
これは、INFORMIXDIRに限らず、どんな環境変数でも共通です。setenvが失敗したり、この例だと環境変数 "INFORMIXDIR=" の値に /opt/IBM/informixが設定されたりします。また、過去に私が関わったOSでは、シェルがコアダンプして異常終了したりしました。私自身もこれに嵌った事がありました。.cshrcに setenv TERM=vt100とか書いておいたら、その時のC-Shellは上記のコアダンプするタイプのものだったので、ログインが出来なくなってしまいました。
( B-shell系) set INFORMIXDIR=/opt/IBM/informix; export INFORMIXDIR
setをつけると「シェル変数」もしくは「シェルの設定パラメーター」として扱われます。パラメーターとして扱われる場合、知らないパラメーターの場合にエラーを返すものと返さないものがあります。エラーを返さないタイプのシェルだと、かなり悩みます。
(ONCONFIG) DBSPACETEMP tempdisk1, tempdisk2, tempdisk3, tempdisk4...
tempdisk1とtempdisk2の間の区切りがカンマ ","またはコロン":"だけなら良いのですが、 空白が入っていると予期せぬことが起こります。具体的には、複数の領域が指定してあってもtemp DBSPACEがラウンドロビンして使われず、tempdisk1のみが使用されたりします。マニュアルにも、「空白は使用できない」旨が明記されています。
続きを読む
タグ :platform
2008年07月02日
onstat -a
Informix Dynamic Serverの稼働状況などを詳しく分析する時など、定期的 (数時間おき)に onstat -a を実行して、出力を後でまとめて調べることがあります。LOCKの数が大きいシステムだと、ロック情報部分 ( onstat -k での出力に相当) だけで数百万行を超えてしまい、この部分だけで、出力の大半 ( 90%以上 ) を占めていたりします。
これくらい大きなファイルだと、一般のテキストエディタでは読み込めないかも知れません。例えば、秀丸は1000万行まで、emacs (32bit版 ) だと、大体256MBが上限です。
数値化・グラフ化が必要な場合にはsedとかで切り出したりもしますが、内容をブラウズしてみたい、という時、私はLESS ( または、その各プラットフォームへの移植版 ) を使っています。
キーアサインは、VI と似ているので、私には使いやすいです。
ctrl-g 現在位置(ファイル上の行番号やバイト単位の位置)を表示
g ファイルの先頭に戻る
z 1ページ進む
b 1ページ戻る
/<検索文字列> 検索
n 検索の繰り返し
q LESSを終了する
ロック情報部分は非常に大きくなっている場合があるので、読み飛ばしたい場合もあるかと思います。ファイル中のロック情報の先頭にジャンプするには、
行の先頭が "Locks"で始まる行
を検索しましょう。LESS の場合、
/^Locks
と入力し、エンターキーを押します。
また、ロック情報の次に続く項目はバッファプールの情報なので、
行の先頭が "Buffers"で始まる行
を検索すると、ロック情報をスキップできます。LESSの場合だと、
/^Buffers
ですね。
更に、Spin locks with waitsのセクションも長いことが多いので、
/^Spin locks with waits
でセクションの先頭に飛び、その次のセクション
/^Locked mutexes
まで読み飛ばしちゃいましょう。
ところで、onstat -a って、どんな情報が含まれているのでしょう?また、それぞれの情報を探し出すにはどうすればよいのでしょう?最近大きなonstat -a 出力を読む機会が何度となく続いたので、手元の Informix を使って中身を調べてみました。以下、IDS 10.00.FC7 での onstat -a 実行結果から、主要なセクションの先頭見出しを抜き出したものです。また、これらのセクションと同等の内容を表示する個別の onstat オプションを、分かる限り調べてみました。
^Message Log File:
( onstat -m )
^Configuration File:
( onstat -c )
^Userthreads
( onstat -u )
^Transactions
( onstat -x )
^Latches with lock or userthread set
( osntat -s )
^Locks
( onstat -k )
^Buffers
( onstat -b )
buffer LRU queue pairs
( osntat -R )
^Tblspaces
( onstat -T )
^Dbspaces
( onstat -d )
^Global Transaction Identifiers
( onstat -G )
^Physical Logging
( onstat -l )
^Distribution of available locks on the lock free lists
^Profile
( onstat -p )
^Optical StageBlob Cache
^MT global info:
( onstat -g glo )
^Virtual processor summary:
^Read/Write Mutexes:
( onstat -g rwm )
^Threads:
( onstat -g ath )
^Spin locks with waits:
( onstat -g spi )
^Locked mutexes:
( onstat -g lmx )
^Number of mutexes on VP free lists:
^Mutexes with waiters:
( onstat -g wmx )
^Number of mutexes on VP free lists:
^Conditions with waiters:
( onstat -g con )
^Pool Summary:
( onstat -g mem )
^Block bitmap for resiedent segment address
( onstat -g rbm )
^Block bitmap for virtual segment address
( onstat -g nbm )
^Dictionary Cache:
( onstat -g cac )
^Distribution Cache:
^UDR Cache
^Extended Type Name Cache:
^Cast Cache:
^Opclass Instance Cache:
^Access Method Cache:
^Statement Cache Summary:
( onstat -g ssc )
^User-defined Aggregate Cache:
^External Directive Cache:
^VP Scheduler Statistics:
( onstat -g sch )
^Thread Migration Statistics:
^Current VP total allocations from cache:
( onstat -g vpcache )
^AIO global info:
( onstat -g iog )
^AIO I/O queues:
( onstat -g ioq )
^AIO I/O vps:
( ontat -g iov )
^AIO global files:
( onstat -g iof )
^AIO big buffer usage summary:
( onstat -g iob )
^global network information:
( onstat -g ntu )
^Individual thread network information (basic):
^Individual thread network information (times):
^Network mailbox information:
( onstat -g ntm )
^IO statistics for each MaxConnect instance:
^Stack usage:
( ontat -g sts )
^session .*#RSAM
( onstat -g ses )
^Data Replication:
( onstat -g dri )
^Partition profiles
( onstat -g ppf )
^Thread profiles
( onstat -g tpf )
^Generic Page Thread profiles
^Generic Page Partition profiles
^Memory Grant Manager (MGM)
( onstat -g mgm )
^Server start-up environment:
( osntat -g env ? )
^Light Scan Info
( onstat -g lsc )
^Light Append Info
( onstat -g lap )
^There are
( onstat -g dis )
^num .*DBSpace
^Tblspace
( onstat -T )
^Dbspaces - Archive Status
^Datablades:
( onstat -g dll )
^Buffers (Access)
^Btree Cleaner Info
( onstat -C)
onstat -a の出力が何百メガバイトもあるようなシステムの解析作業をしている人にはひょっとしたら役に立つかも。お役に立てば幸いです。
先に書いたとおり、これは IDS 10.00.FC7で調べた内容です。最新版の IDS 11.50については...もごもご....
これくらい大きなファイルだと、一般のテキストエディタでは読み込めないかも知れません。例えば、秀丸は1000万行まで、emacs (32bit版 ) だと、大体256MBが上限です。
数値化・グラフ化が必要な場合にはsedとかで切り出したりもしますが、内容をブラウズしてみたい、という時、私はLESS ( または、その各プラットフォームへの移植版 ) を使っています。
キーアサインは、VI と似ているので、私には使いやすいです。
ctrl-g 現在位置(ファイル上の行番号やバイト単位の位置)を表示
g ファイルの先頭に戻る
z 1ページ進む
b 1ページ戻る
/<検索文字列> 検索
n 検索の繰り返し
q LESSを終了する
ロック情報部分は非常に大きくなっている場合があるので、読み飛ばしたい場合もあるかと思います。ファイル中のロック情報の先頭にジャンプするには、
行の先頭が "Locks"で始まる行
を検索しましょう。LESS の場合、
/^Locks
と入力し、エンターキーを押します。
また、ロック情報の次に続く項目はバッファプールの情報なので、
行の先頭が "Buffers"で始まる行
を検索すると、ロック情報をスキップできます。LESSの場合だと、
/^Buffers
ですね。
更に、Spin locks with waitsのセクションも長いことが多いので、
/^Spin locks with waits
でセクションの先頭に飛び、その次のセクション
/^Locked mutexes
まで読み飛ばしちゃいましょう。
ところで、onstat -a って、どんな情報が含まれているのでしょう?また、それぞれの情報を探し出すにはどうすればよいのでしょう?最近大きなonstat -a 出力を読む機会が何度となく続いたので、手元の Informix を使って中身を調べてみました。以下、IDS 10.00.FC7 での onstat -a 実行結果から、主要なセクションの先頭見出しを抜き出したものです。また、これらのセクションと同等の内容を表示する個別の onstat オプションを、分かる限り調べてみました。
^Message Log File:
( onstat -m )
^Configuration File:
( onstat -c )
^Userthreads
( onstat -u )
^Transactions
( onstat -x )
^Latches with lock or userthread set
( osntat -s )
^Locks
( onstat -k )
^Buffers
( onstat -b )
buffer LRU queue pairs
( osntat -R )
^Tblspaces
( onstat -T )
^Dbspaces
( onstat -d )
^Global Transaction Identifiers
( onstat -G )
^Physical Logging
( onstat -l )
^Distribution of available locks on the lock free lists
^Profile
( onstat -p )
^Optical StageBlob Cache
^MT global info:
( onstat -g glo )
^Virtual processor summary:
^Read/Write Mutexes:
( onstat -g rwm )
^Threads:
( onstat -g ath )
^Spin locks with waits:
( onstat -g spi )
^Locked mutexes:
( onstat -g lmx )
^Number of mutexes on VP free lists:
^Mutexes with waiters:
( onstat -g wmx )
^Number of mutexes on VP free lists:
^Conditions with waiters:
( onstat -g con )
^Pool Summary:
( onstat -g mem )
^Block bitmap for resiedent segment address
( onstat -g rbm )
^Block bitmap for virtual segment address
( onstat -g nbm )
^Dictionary Cache:
( onstat -g cac )
^Distribution Cache:
^UDR Cache
^Extended Type Name Cache:
^Cast Cache:
^Opclass Instance Cache:
^Access Method Cache:
^Statement Cache Summary:
( onstat -g ssc )
^User-defined Aggregate Cache:
^External Directive Cache:
^VP Scheduler Statistics:
( onstat -g sch )
^Thread Migration Statistics:
^Current VP total allocations from cache:
( onstat -g vpcache )
^AIO global info:
( onstat -g iog )
^AIO I/O queues:
( onstat -g ioq )
^AIO I/O vps:
( ontat -g iov )
^AIO global files:
( onstat -g iof )
^AIO big buffer usage summary:
( onstat -g iob )
^global network information:
( onstat -g ntu )
^Individual thread network information (basic):
^Individual thread network information (times):
^Network mailbox information:
( onstat -g ntm )
^IO statistics for each MaxConnect instance:
^Stack usage:
( ontat -g sts )
^session .*#RSAM
( onstat -g ses )
^Data Replication:
( onstat -g dri )
^Partition profiles
( onstat -g ppf )
^Thread profiles
( onstat -g tpf )
^Generic Page Thread profiles
^Generic Page Partition profiles
^Memory Grant Manager (MGM)
( onstat -g mgm )
^Server start-up environment:
( osntat -g env ? )
^Light Scan Info
( onstat -g lsc )
^Light Append Info
( onstat -g lap )
^There are
( onstat -g dis )
^num .*DBSpace
^Tblspace
( onstat -T )
^Dbspaces - Archive Status
^Datablades:
( onstat -g dll )
^Buffers (Access)
^Btree Cleaner Info
( onstat -C)
onstat -a の出力が何百メガバイトもあるようなシステムの解析作業をしている人にはひょっとしたら役に立つかも。お役に立てば幸いです。
先に書いたとおり、これは IDS 10.00.FC7で調べた内容です。最新版の IDS 11.50については...もごもご....
2008年02月14日
IDS on MAC OS X のインストール
Macintoshを使う機会があったので、Informix Dynamic Server "Cheetah2"をインストールしてみました。
インストールの基本的な操作は、他の Unix/Linuxプラットフォームと殆ど変わりません。
Mac OSX は、「ターミナル」 ( 「アプリケーション」フォルダ内の、「ユーティリティ」サブフォルダにあります ) を開けば、シェルコマンドを受け付けてくれます。一般的な X Winodw ベースの GUI 環境と似た感じで操作ができますが、普通の Unix/Linux環境に慣れていると、ユーザー、グループの作り方などで戸惑います。私は戸惑いました。Unix/Linux環境だと、/etc/passwd, /etc/group などを修正して何とかしてしまいがちですが、Mac OSX では、アカウントなどの情報はディレクトリ・サービスで管理されています。IDS for Macintosh OS Xのダウンロードファイルに含まれている readme に記されているとおり、dscl というツールを使ってユーザー "informix", グループ "informix" を追加しました。readmeに記載されているとおり、dscl コマンドのコマンドライン上、"n" と表記されている部分は、ユーザー "informix" に割り当てたい未使用のユーザーID ( 100以上の未使用の整数値 )、および同じくグループ "informix" に割り当てる未使用のグループ ID に置き換えて実行してください。
ユーザーinformixをuid=100, グループinformixをgid=100で作成する場合:
更に、インストールを実行する時の "root" アカウントにも要注意です。Mac OSX の初期状態では "root"アカウントはログイン出来ない状態になっています。IDS for Macintosh OS X の readme に英語の手順書へのリンク ( www.apple.com ) がありますが、同じ文書の日本語版が以下にあります。
Macintosh OS X で、"root" ユーザーを使用可能にする方法:
http://docs.info.apple.com/jarticle.html?artnum=106290
概要は次の通り:
詳細は上のURLにある説明をどうぞ。
readmeファイルには、"ids_install.command" をダブルクリックするよう指示があります。ダウンロードされたアーカイブ ( dmg ) 内には、もうひとつ "ids_install" というファイルも含まれています。間違ってこちらをクリックしてもインストールできません。機をつけましょう。私はターミナルから直接 ids_installを起動してインストールしてしまいました。
さて、インストールが終わるといよいよONCONFIGファイルを書き換えて初期化したいところですが、その前にシステムの共有メモリーなどを確保するのを忘れずに。パラメーターの設定をせずにoninit -i すると初期化がうまくいきません。onstat -m を実行するとこんなエラーが・・・
インストールされた IDS のマシンノート ( デフォルトの場所にインストールした場合には、/opt/IBM/informix/release/en_us/0333 の下 ) を読み、カーネルパラメーターを設定しましょう。
マシンノートに書いてある、「テスト時に用いたカーネルパラメーター」を/etc/sysctl.conf ( これは、Mac OSX の場合ですね ) にコピペ(もちろん root で ) して、念のためシステムを再起動。
後は、ONCONFIG ファイルを書き換えて oninit -i すれば、他のUnix/Linux同様普通にInformixが起動します。Mac OSX用のInformixだからといって、特別な GUI は用意されていないようですね。
私は Macを使用する機会がなかなかないので、アカウントの作成など結構大変でした。Informixそのものの方の設定は簡単です。身近にMac ( Core2 Duo などの 64bit環境 ) をお持ちの方は是非試してみてください。
続きを読む
インストールの基本的な操作は、他の Unix/Linuxプラットフォームと殆ど変わりません。
Mac OSX は、「ターミナル」 ( 「アプリケーション」フォルダ内の、「ユーティリティ」サブフォルダにあります ) を開けば、シェルコマンドを受け付けてくれます。一般的な X Winodw ベースの GUI 環境と似た感じで操作ができますが、普通の Unix/Linux環境に慣れていると、ユーザー、グループの作り方などで戸惑います。私は戸惑いました。Unix/Linux環境だと、/etc/passwd, /etc/group などを修正して何とかしてしまいがちですが、Mac OSX では、アカウントなどの情報はディレクトリ・サービスで管理されています。IDS for Macintosh OS Xのダウンロードファイルに含まれている readme に記されているとおり、dscl というツールを使ってユーザー "informix", グループ "informix" を追加しました。readmeに記載されているとおり、dscl コマンドのコマンドライン上、"n" と表記されている部分は、ユーザー "informix" に割り当てたい未使用のユーザーID ( 100以上の未使用の整数値 )、および同じくグループ "informix" に割り当てる未使用のグループ ID に置き換えて実行してください。
ユーザーinformixをuid=100, グループinformixをgid=100で作成する場合:
dscl . -create /groups/informix
dscl . -create /groups/informix name informix
dscl . -create /groups/informix gid 100
dscl . -create /users/informix
dscl . -create /users/informix name informix
dscl . -create /users/informix uid 100
dscl . -create /users/informix gid 100
dscl . -create /users/informix home /Users/informix
dscl . -merge /groups/informix users "informix"
更に、インストールを実行する時の "root" アカウントにも要注意です。Mac OSX の初期状態では "root"アカウントはログイン出来ない状態になっています。IDS for Macintosh OS X の readme に英語の手順書へのリンク ( www.apple.com ) がありますが、同じ文書の日本語版が以下にあります。
Macintosh OS X で、"root" ユーザーを使用可能にする方法:
http://docs.info.apple.com/jarticle.html?artnum=106290
概要は次の通り:
1.Finderの「移動」メニューから「ユーティリティ」を選択。
2.「ディレクトリユーティリティ」を選択。
3.ダイアログボックス上に表示されている、鍵(南京錠の形)をクリック。
4.所有者パスワードを入力。
5.画面上端の「編集」メニューから、「ルートユーザを有効にする」を選択。
詳細は上のURLにある説明をどうぞ。
readmeファイルには、"ids_install.command" をダブルクリックするよう指示があります。ダウンロードされたアーカイブ ( dmg ) 内には、もうひとつ "ids_install" というファイルも含まれています。間違ってこちらをクリックしてもインストールできません。機をつけましょう。私はターミナルから直接 ids_installを起動してインストールしてしまいました。
さて、インストールが終わるといよいよONCONFIGファイルを書き換えて初期化したいところですが、その前にシステムの共有メモリーなどを確保するのを忘れずに。パラメーターの設定をせずにoninit -i すると初期化がうまくいきません。onstat -m を実行するとこんなエラーが・・・
00:20:11 IBM Informix Dynamic Server Started.
00:20:11 shmget: [ENOMEM][12]: key 52574802: The server ran out of memory during an attempt to allocate a new shared
memory segment.
00:20:11 mt_shm_init: can't create resident segment
インストールされた IDS のマシンノート ( デフォルトの場所にインストールした場合には、/opt/IBM/informix/release/en_us/0333 の下 ) を読み、カーネルパラメーターを設定しましょう。
マシンノートに書いてある、「テスト時に用いたカーネルパラメーター」を/etc/sysctl.conf ( これは、Mac OSX の場合ですね ) にコピペ(もちろん root で ) して、念のためシステムを再起動。
後は、ONCONFIG ファイルを書き換えて oninit -i すれば、他のUnix/Linux同様普通にInformixが起動します。Mac OSX用のInformixだからといって、特別な GUI は用意されていないようですね。
私は Macを使用する機会がなかなかないので、アカウントの作成など結構大変でした。Informixそのものの方の設定は簡単です。身近にMac ( Core2 Duo などの 64bit環境 ) をお持ちの方は是非試してみてください。
続きを読む
2007年11月29日
rename chunk
IDS の 9.40 以上では、"rename chunk" という、リストア時にチャンクの名前や場所 ( path ) を変更する機能があります。これについて調べていたら、外部リストア ( external restore ) でもこの機能を使用できることに気がつきました。
注意:以下の例は、Solaris版 IDS 10でのものです。Windows版 V10/11, Solaris 版 V10では思った通りに動作しました。ただ、残念ながらLinux ( x86および x64環境下での IDS 10, 11 UCx, FCx ) では動作しませんでした。ontapeだけでなくonbarでも同様にだめでした。
以下、IDS 11.10.xC2のリリースノートからの抜粋です。
早期に PIDリリースなどで修正されると良いですね。
以下それぞれ ontape と onbar でのコマンドライン例です。/opt/IBM/informix/instance/original/chunkにあるチャンク rootdbs.000を、新しい場所 /new/locationにコピー (外部バックアップ - external backup ) してから、このコマンドラインを実行するとチャンク内の予約ページのつじつまを合わせてくれます。下記のようにルートDB領域を移動した場合、ONCONFIGファイルも書き換わります。(実際に実行する時には、チャンクの外部バックアップ、論理ログのサルベージや、logical recovery などを適宜組み合わせてください。)
ontape -p -e -rename -p /usr/informix/instance/original/chunk/rootdbs.000 -o 0 -n /new/location/rootdbs.000 -o 0
onbar -r -e -rename -p /usr/informix/instance/original/chunk/rootdbs.000 -o 0 -n /new/location/rootdbs.000 -o 0
巨大なDB領域を含むリストアの場合、変更すべきチャンクのパスも数十個、数百個になることが考えられます。移動元、異動先のチャンクのリストをファイルに書いておき、そのファイルの名前をコマンドラインに指定することもできます。詳しくは Backup and Restore Guide をどうぞ。
(UPDATED 2007-12-06: オプション -p, -o で指定した値と、元々のパス名やオフセットが異なっているとエラーになります。ご注意を。)
IDS 9.40でも、9.40.xC8からこの機能をサポートしているらしいです。
http://www.unixadmintalk.com/f49/help-renaming-chunk-ids9-40-a-201233/
上の threadの最後にある、perlで書き換えるのはちょっと怖いですね。
注意:以下の例は、Solaris版 IDS 10でのものです。Windows版 V10/11, Solaris 版 V10では思った通りに動作しました。ただ、残念ながらLinux ( x86および x64環境下での IDS 10, 11 UCx, FCx ) では動作しませんでした。ontapeだけでなくonbarでも同様にだめでした。
以下、IDS 11.10.xC2のリリースノートからの抜粋です。
I. KNOWN ISSUES WITH 11.10.xC2
APAR: Component: Description
IC53659 ONUTILS-ONTAPE ON LINUX EXTERNAL RESTORE ABORTS WHEN USING -RENAME OPTION
早期に PIDリリースなどで修正されると良いですね。
以下それぞれ ontape と onbar でのコマンドライン例です。/opt/IBM/informix/instance/original/chunkにあるチャンク rootdbs.000を、新しい場所 /new/locationにコピー (外部バックアップ - external backup ) してから、このコマンドラインを実行するとチャンク内の予約ページのつじつまを合わせてくれます。下記のようにルートDB領域を移動した場合、ONCONFIGファイルも書き換わります。(実際に実行する時には、チャンクの外部バックアップ、論理ログのサルベージや、logical recovery などを適宜組み合わせてください。)
ontape -p -e -rename -p /usr/informix/instance/original/chunk/rootdbs.000 -o 0 -n /new/location/rootdbs.000 -o 0
onbar -r -e -rename -p /usr/informix/instance/original/chunk/rootdbs.000 -o 0 -n /new/location/rootdbs.000 -o 0
巨大なDB領域を含むリストアの場合、変更すべきチャンクのパスも数十個、数百個になることが考えられます。移動元、異動先のチャンクのリストをファイルに書いておき、そのファイルの名前をコマンドラインに指定することもできます。詳しくは Backup and Restore Guide をどうぞ。
(UPDATED 2007-12-06: オプション -p, -o で指定した値と、元々のパス名やオフセットが異なっているとエラーになります。ご注意を。)
IDS 9.40でも、9.40.xC8からこの機能をサポートしているらしいです。
http://www.unixadmintalk.com/f49/help-renaming-chunk-ids9-40-a-201233/
上の threadの最後にある、perlで書き換えるのはちょっと怖いですね。
2007年11月21日
WindowsでSDS ( VPC2007使用)
Virtual PC 2007 を使ってWindows XP 仮想PCによる SDS 環境を作ってみました。
(UPDATED 2007-11-26: この記事の内容について、Guy Bowerman氏から質問を受けました。再確認したところ、一部間違いがありました。以下修正済みです。)
IDS 11.10.TC1 を使用しました。OSは Windows XP SP2 ( Japanese ) です。Virtual PC2007をインストールした後、仮想PCインスタンスを2つ作成し、それぞれの仮想PCにゲストOSとして Window XP SP2をインストールしてください。この2つの仮想PCインスタンスのうち一つが primary機 ( pc1 )、もう一つが secondary ( pc2 )です。コンピューター名もそれぞれ、pc1, pc2 に設定してください。
1. 事前準備
(1) 複数の仮想 PC 間のネットワークに MS Lookback adapter を使う
(2) 仮想 PC 間の認証回避設定
(3) 複数の PC で共有できるディスク領域の準備
(4) ONCONFIG ファイルの準備
注意: SDS を構成する時、ROOT DB領域は共有のディスク上に置く必要がありますが、SDS_TEMPDBS, SDS_PAGINGは、それぞれのサーバー上のローカルディスク上に置きます。
この後、pc1, pc2 上の onconfig ファイルを見比べて、ROOTPATHが同じであること、更に同じ共有ディスク上の場所にセットされていることなどを確認してください。
(5) setnet32を使い、互いの仮想PC上にol_pc1, ol_pc2 の設定を追加する。
2. SDS_ENABLEの初期値
3. SDS の設定
4. 備考:Virtual PC 2007 共有フォルダー上でのチャンク初期化
この件、調べていたら、次のようになりました。
最初に、長さゼロバイトのチャンクを初期化してサイズをROOTSIZEに拡張する処理中に問題が発生していたようです。ただ、初期化に失敗しても、チャンクに割り当てたファイルのサイズは ROOTSIZE になっています。その後はチャンクの(再)初期化は成功します。上記「成功 (4)」がそれですね。存在しない場所に fseek しようとした時の処理などでローカルのファイルシステムと違いがあるのかも知れません。
(UPDATED 2007-11-26: この記事の内容について、Guy Bowerman氏から質問を受けました。再確認したところ、一部間違いがありました。以下修正済みです。)
IDS 11.10.TC1 を使用しました。OSは Windows XP SP2 ( Japanese ) です。Virtual PC2007をインストールした後、仮想PCインスタンスを2つ作成し、それぞれの仮想PCにゲストOSとして Window XP SP2をインストールしてください。この2つの仮想PCインスタンスのうち一つが primary機 ( pc1 )、もう一つが secondary ( pc2 )です。コンピューター名もそれぞれ、pc1, pc2 に設定してください。
1. 事前準備
ここでは、primary機 ( hostname= pc1 ) 上のINFORMIXSERVER名が ol_pc1 だとしましょう。セカンダリー機 ( SDSノード。 hostname= pc2 ) のINFORMIXSERVER名は ol_pc2 ということにしましょう。
(1) 複数の仮想 PC 間のネットワークに MS Lookback adapter を使う
NATを使っても良いのですが、「テスト環境をLANにはつなぎたくない」という方もいると思いますので、ローカルのネットワークを構成してみましょう。
最初に、MS Lookback adapter を ホスト OS 側に追加しておきます。コントロールパネルの「ハードウェアの追加」アイコンを起動し、
「はい、ハードウェアを接続しています(Y)」 次へ (N)
「新しいハードウェア デバイスの追加」 次へ (N)
「一覧から選択したハードウェアをインストールする (詳細))(M)」 次へ (N)
「ネットワーク アダプタ」 次へ (N)
「製造元」の欄で「Microsoft」
「ネットワーク アダプタ:」の欄で「Microsoft Lookback Adapter」 次へ (N)
の順にクリックします。また、この時、ゲスト OS 側のTCP/IP 設定では、静的アドレスを割り当てるように設定します。各仮想マシンの%SYSTEMROOT%\system32\drivers\etc\hosts に、例えば次のように記述します。
192.168.11.1 pc1
192.168.11.2 pc2
(2) 仮想 PC 間の認証回避設定
双方の%SYSTEMROOT%\system32\drivers\etc\hosts.equiv にお互いのホスト名を追記。
(3) 複数の PC で共有できるディスク領域の準備
ここでは、Virtual PC 2007 の共有フォルダー(Shared Folder) 機能を使い、ホスト・オペレーティングシステム側のディスクをそれぞれのPCからアクセスできるようにしました。(UPDATED 2007-11-26: 以前KAIOOFFで問題回避できると書きましたが、関係なかったようです。)
それから、この共有のディスク領域は、それぞれのPCから同じパスで参照できるようにしてください。SDSに限らずInformixのHDRでは、すべてのノードでDB領域のパス ( 例えば ROOTPATH ) を同じにしておく必要があるからです。
(4) ONCONFIG ファイルの準備
Windows 版のサーバー・インスタンス・マネージャーで、2台の仮想PC (pc1, pc2 ) 上に、それぞれol_pc1, ol_pc2 という名前でインスタンスを作ります。後で初期化してしまうので、ディスク構成などはどのように設定しても構いませんが、ROOT DB領域は、先ほど(3)で用意した、双方のPCで共有される領域に置くようにします。その後、pc1上でサーバー・インスタンス・マネージャーが生成した初期状態の ol_pc1用 ONCONFIG ファイル ( onconfig.ol_pc1)に少し手を加えます。
SDS_ENABLE 0
SDS_TEMPDBS ( 値: サーバー pc 1上のローカルディスク上の一時DB領域の指定 )
SDS_PAGING ( 値: サーバー pc 1上のローカルディスク上のpaging 用ファイルのフルパス )
注意: SDS を構成する時、ROOT DB領域は共有のディスク上に置く必要がありますが、SDS_TEMPDBS, SDS_PAGINGは、それぞれのサーバー上のローカルディスク上に置きます。
の各パラメーターを追加します。このファイルを、onconfig.ol_pc2 として、サーバー pc2上の %INFORMIXDIR%\etc にコピーします。更にPrimaryとSDSそれぞれのインスタンスでINFORMIXSERVER名などが異なりますので、以下のようにそれぞれのファイルを変更してみます。( ここではそれぞれのインスタンスを別マシンで動かすので、SERVERNUM の値は書き換えていません。SERVERNUM の値を primary と SDS で異なる値に設定し、更にSDS_TEMPDBS, SDS_PAGINGも異なる場所に設定すれば、1台のマシン上で HDR のprimaryと SDS を動かすこともできます。)
25,27c25,27
< SDS_ENABLE 0 # to be turned on using onmode -d set SDS..
< SDS_TEMPDBS sdstempdbs,c:\ifmxdata\ol_pc1\sdstempdbs.000,4,0,153600
< SDS_PAGING c:\ifmxdata\ol_pc1\sds_pagefile1,c:\ifmxdata\ol_pc1\sds_pagefile2
---
> SDS_ENABLE 1 # to be turned on using onmode -d set SDS..
> SDS_TEMPDBS sdstempdbs,c:\ifmxdata\ol_pc2\sdstempdbs.000,4,0,153600
> SDS_PAGING c:\ifmxdata\ol_pc2\sds_pagefile1,c:\ifmxdata\ol_pc2\sds_pagefile2
100,101c100,101
< MSGPATH C:\win32app\informix\ol_pc1.log # System message log file path
< CONSOLE C:\win32app\informix\conol_pc1.log # System console message path
---
> MSGPATH C:\win32app\informix\ol_pc2.log # System message log file path
> CONSOLE C:\win32app\informix\conol_pc2.log # System console message path
135c135
< DBSERVERNAME ol_pc1 # Name of default Dynamic Server
---
> DBSERVERNAME ol_pc2 # Name of default Dynamic Server
229,230c229,230
< BAR_ACT_LOG C:\win32app\informix\bar_ol_pc1.log #Path of log file for onbar.exe
< BAR_DEBUG_LOG C:\win32app\informix\bar_ol_pc1.log #Path of the debug log for onbar.exe
---
> BAR_ACT_LOG C:\win32app\informix\bar_ol_pc2.log #Path of log file for onbar.exe
> BAR_DEBUG_LOG C:\win32app\informix\bar_ol_pc2.log #Path of the debug log for onbar.exe
331,332c331,332
< JVPLOGFILE C:\win32app\informix\extend\krakatoa\ol_pc1_jvp.log # VP log file
< JVPPROPFILE C:\win32app\informix\extend\krakatoa\.jvpprops_ol_pc1 # JVP property file
---
> JVPLOGFILE C:\win32app\informix\extend\krakatoa\ol_pc2_jvp.log # VP log file
> JVPPROPFILE C:\win32app\informix\extend\krakatoa\.jvpprops_ol_pc2 # JVP property file
この後、pc1, pc2 上の onconfig ファイルを見比べて、ROOTPATHが同じであること、更に同じ共有ディスク上の場所にセットされていることなどを確認してください。
(5) setnet32を使い、互いの仮想PC上にol_pc1, ol_pc2 の設定を追加する。
2. SDS_ENABLEの初期値
最初のprimary インスタンスを初期化する時には、0 に設定する必要があります。SDS の設定をしない状態で、SDS_ENABLEを 1 にセットしてインスタンスを初期化しようとすると失敗します。
一方、SDS 側では oninit ( starts %INFORMIXSERVER% ) を実行する前に SDS_EABLE の値を 1 にしておく必要があります。
もし、primary を SDS としても使用するつもりなら、SDS の設定が終わった後、一度 primary のインスタンスを落としてONCONFIG ファイルを修正し、SDS_ENABLEの値を 1 にしておくと良いでしょう。
3. SDS の設定
(1) primary 機 pc1 上での最初の初期化
* ONCONFIG ( onconfig.ol_pc1 ) のパラメーター"SDS_ENABLE がゼロになっていることを確認する
* starts ol_pc1 -iy
(UPDATED 2007-11-26: 初期化に失敗したら、もういちど starts ol_pc1 -iy を実行してください。)
* onmode -d set SDS primary ol_pc1
(2) SDS機 pc2 側での初期化
* ONCONFIG ( onconfig.ol_pc2 ) で"SDS_ENABLE" の設定を1にする。
* starts ol_pc2
以上で、ol_pc1 がprimary、ol_pc2 が SDS の構成でクラスターが動き出す筈です。
(3) primaryと SDS を入れ替える
今SDSとして動いている ol_pc2 を primary に昇格してみましょう。それには SDS 機側で次の操作を実行します。
* onstat -
( この操作は必須ではないですが、現在のモードを確認しておきましょう )
* onmode -d set SDS primary ol_pc2
これで、ol_pc2 が新しい primary になりました。しかし同時に、ol_pc1 がシャットダウンしてしまいましたね。これまでprimaryとして動いていたコンピュータ上でインスタンス ol_pc1を再起動しましょう。
* starts ol_pc1
* onstat -
Read-Only のSDSとして動いていることを確認しておきましょう。
4. 備考:Virtual PC 2007 共有フォルダー上でのチャンク初期化
Virtual PC 2007 が提供する共有フォルダー機能を使って、そこにチャンクを置いて初期化 ( starts %INFORMIXSERVER% -iy ) しようとすると、失敗する場合があります。
14:19:04 IBM Informix Dynamic Server Started.
Mon Aug 20 14:19:04 2007
14:19:04 Warning: ONCONFIG dump directory (DUMPDIR) 'C:\win32app\informix\tmp' has insecure permissions
14:19:05 Booting Languagefrom module <>
14:19:05 Loading Module
14:19:05 Booting Languagefrom module <>
14:19:05 Loading Module
14:19:09 DR: DRAUTO is 0 (Off)
14:19:09 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled)
14:19:09 IBM Informix Dynamic Server Version 11.10.TC1 Software Serial Number AAA#B000000
14:19:11 Performance Advisory: The current size of the physical log buffer is smaller than recommended.
14:19:11 Results: Transaction performance might not be optimal.
14:19:11 Action: For better performance, increase the physical log buffer size to 128.
14:19:11 The current size of the logical log buffer is smaller than recommended.
14:19:11 KAIO: error in kaio_READ, kaiocbp = 0xc746810, errno = 0
14:19:11 fildes = 1720 (gfd 3), buf = 0x0C14A000, nbytes = 4096, offset = 61440
14:19:11 Assert Warning: I/O read chunk 1, pagenum 15, pagecnt 1
14:19:11 IBM Informix Dynamic Server Version 11.10.TC1
14:19:11 Who: Session(1, informix@pc1, 0, 00000000)
Thread(6, main_loop(), 0, 1)
File: rsbuff.c Line: 6153
14:19:11 Action: Please notify IBM Informix Technical Support.
14:19:11 stack trace for pid 1168 written to C:\win32app\informix\tmp\af.3ee244f
14:19:16 See Also: C:\win32app\informix\tmp\af.3ee244f
14:19:20 I/O read chunk 1, pagenum 15, pagecnt 1
14:19:22 IBM Informix Dynamic Server Stopped.
エラーを見ると、KAIO が正しく動作していないような内容ですね。UPDATED 2007-11-26: もう一度初期化 ( starts ol_pc1 -ivy ) を実行すると、何故か、以下のとおり正常に初期化します。原因は今のところ不明です。
14:29:19 IBM Informix Dynamic Server Started.
Mon Aug 20 14:29:20 2007
14:29:20 Warning: ONCONFIG dump directory (DUMPDIR) 'C:\win32app\informix\tmp' has insecure permissions
14:29:20 Booting Languagefrom module <>
14:29:20 Loading Module
14:29:20 Booting Languagefrom module <>
14:29:20 Loading Module
14:29:24 DR: DRAUTO is 0 (Off)
14:29:24 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled)
14:29:24 IBM Informix Dynamic Server Version 11.10.TC1 Software Serial Number AAA#B000000
14:29:25 Performance Advisory: The current size of the physical log buffer is smaller than recommended.
14:29:25 Results: Transaction performance might not be optimal.
14:29:25 Action: For better performance, increase the physical log buffer size to 128.
14:29:25 The current size of the logical log buffer is smaller than recommended.
14:29:25 IBM Informix Dynamic Server Initialized -- Complete Disk Initialized.
14:29:25 Checkpoint Completed: duration was 0 seconds.
14:29:25 Mon Aug 20 - loguniq 1, logpos 0xd0, timestamp: 0x50 Interval: 2
14:29:25 Maximum server connections 0
14:29:25 Checkpoint Statistics - Avg. Txn Block Time 0.000, # Txns blocked 0, Plog used 4, Llog used 1
14:29:25 Dataskip is now OFF for all dbspaces
14:29:25 On-Line Mode
14:29:25 Building 'sysmaster' database ...
14:29:25 Dynamically allocated new virtual shared memory segment (size 8192KB)
14:29:25 Memory sizes:resident:5312 KB, virtual:16384 KB, no SHMTOTAL limit
14:29:25 WARNING! Physical Log size 2000 is too small.
Physical Log overflows may occur during peak activity.
Recommended minimum Physical Log size is 80 times maximum
concurrent user threads.
14:29:34 Btree scanners disabled.
14:29:36 Performance Advisory: Logical log file size might be too small for a
checkpoint to complete.
14:29:36 Results: The size of individual logical log files is too small for
the current workload, resulting in each log file filling very
quickly. If log files fill in less than 30 seconds, the checkpoint
might remain blocked because the last log file fills during the time
needed to perform the checkpoint.
14:29:36 Action: Increase the size of the individual logical log files so
that it takes at least 30 seconds to fill each one. Look at the
online log to determine how quickly the log files are filling, and
then increase the size of the files proportionately.
14:29:36 Logical Log 1 Complete, timestamp: 0xa270.
14:29:36 Logical Log 2 Complete, timestamp: 0xa270.
14:29:36 Logical Log 3 Complete, timestamp: 0xb04b.
14:29:36 Checkpoint Completed: duration was 0 seconds.
14:29:36 Mon Aug 20 - loguniq 4, logpos 0x18, timestamp: 0xb13d Interval: 3
14:29:36 Maximum server connections 1
14:29:36 Checkpoint Statistics - Avg. Txn Block Time 0.000, # Txns blocked 1, Plog used 20, Llog used 1508
14:29:37 Performance Advisory: Based on the current workload, the physical log might be too small to
accommodate the time it takes to flush the buffer pool.
14:29:37 Results: The server might block transactions during checkpoints.
14:29:37 Action: If transactions are blocked during the checkpoint, increase the size of the
physical log to at least 28000 KB.
14:29:37 Performance Advisory: Based on the current workload, the logical log space might be too small to
accommodate the time it takes to flush the buffer pool.
14:29:37 Results: The server might block transactions during checkpoints.
14:29:37 Action: If transactions are blocked during the checkpoint, increase the size of the
logical log space to at least 28000 KB.
14:29:37 Performance Advisory: The physical log is too small for automatic checkpoints.
14:29:37 Results: Automatic checkpoints are disabled.
14:29:37 Action: To enable automatic checkpoints, increase the physical log to at least 28000 KB.
14:29:37 Booting Languagefrom module <>
14:29:37 Loading Module
14:29:38 Unloading Module
14:29:38 Btree scanners enabled.
14:29:38 Logical Log 4 Complete, timestamp: 0xca69.
14:29:48 Btree scanners disabled.
14:29:49 Logical Log 5 Complete, timestamp: 0x10a47.
14:29:49 Btree scanners enabled.
14:29:58 Loading Module
14:29:59 Performance Advisory: The physical log is running out of room during checkpoint processing.
14:29:59 Results: Transactions are being blocked until the checkpoint is complete.
14:29:59 Action: Increase the physical log size.
14:29:59 Checkpoint Completed: duration was 0 seconds.
14:29:59 Mon Aug 20 - loguniq 6, logpos 0xc776c, timestamp: 0x11796 Interval: 4
14:29:59 Maximum server connections 1
14:29:59 Checkpoint Statistics - Avg. Txn Block Time 0.000, # Txns blocked 0, Plog used 285, Llog used 1199
14:29:59 Unloading Module
14:30:00 Logical Log 6 Complete, timestamp: 0x14ea7.
14:30:00 'sysmaster' database built successfully.
14:30:01 'sysutils' database built successfully.
14:30:01 'sysuser' database built successfully.
14:30:06 Btree scanners disabled.
14:30:07 Btree scanners enabled.
14:30:08 Init operation complete - Mode Online Initialized
14:30:10 Building 'sysadmin' database ...
14:30:10 dynamically allocated 2000 locks
14:30:10 Logical Log 7 Complete, timestamp: 0x194f9.
14:30:10 Checkpoint Completed: duration was 0 seconds.
14:30:10 Mon Aug 20 - loguniq 8, logpos 0xb0104, timestamp: 0x19569 Interval: 5
14:30:10 Maximum server connections 1
14:30:10 Checkpoint Statistics - Avg. Txn Block Time 0.007, # Txns blocked 0, Plog used 230, Llog used 977
14:30:11 Loading Module
14:30:11 'sysadmin' database built successfully.
14:30:11 SCHAPI: Started dbScheduler thread.
14:30:11 SCHAPI: Started 2 dbWorker threads.
14:30:12 Logical Log 8 Complete, timestamp: 0x1d2ec.
14:30:12 Logical Log 9 Complete, timestamp: 0x1d2ec.
この件、調べていたら、次のようになりました。
copy zerobytefile rootdbs_dat.000
oninit -ivy ( または starts ol_testpc1 -iy ) --> 失敗 (1)
もういちどoninit -ivy ( または starts ol_testpc1 -iy ) --> 成功 (2)
onmode -ky
oninit -ivy ( または starts ol_testpc1 -iy ) --> 成功 (3)
onmode -ky
oninit -ivy ( または starts ol_testpc1 -iy ) --> 成功 (4)
最初に、長さゼロバイトのチャンクを初期化してサイズをROOTSIZEに拡張する処理中に問題が発生していたようです。ただ、初期化に失敗しても、チャンクに割り当てたファイルのサイズは ROOTSIZE になっています。その後はチャンクの(再)初期化は成功します。上記「成功 (4)」がそれですね。存在しない場所に fseek しようとした時の処理などでローカルのファイルシステムと違いがあるのかも知れません。
2007年09月08日
stores_demo for expert users?
IDS V9.40 や V10.0に含まれる stores_demoデータベースを英語以外のlocaleで作成するには、いくつか問題があります。私はこれらの問題と解決方法をサポート担当者に報告したことがあります。内容は英語に翻訳され、下記のURLで公開されています。
http://www-1.ibm.com/support/docview.wss?uid=swg21260271
IDS V11.10 のdbaccessdemoには、この他にもう一つ問題があります。
Unix/Linux版の $INFORMIXDIR/bin/dbaccessdemo, Windows版の%INFORMIXDIR%\bin\dbaccessdemo.batを見ると、環境変数DB_LOCALEがen_us.8859-1以外の値に設定されていると実行を中止するようにコーディングされています。
サンプル・データベースがどんな用途に使われているのか考えれば、Localeの設定値によらず動作するように作るべきだと思うので、この件も現在サポート担当者と相談中です。
---------------------------
dbaccessdemo scripts for IDS V9/10 fail creation of sample database/tables with non-English locales. This is because the demo sripts attempt to run some european collation features which do not work with other locales. I reported this to Technical Support team last year. The URL bellow gives you how to solve.
http://www-1.ibm.com/support/docview.wss?uid=swg21260271
Also, dbaccessdemo scripts for IDS 11.10 has another issue. It examines value of DB_LOCALE environment variables and continues execution if DB_LOCALE is not set or the variable is set to an English locale. I told these things to an engineer in the Technical Support team, hoping the sample database will be improved for beginners of Informix in any langauges(locales, codesets..)
-----------------------------
http://www-1.ibm.com/support/docview.wss?uid=swg21260271
IDS V11.10 のdbaccessdemoには、この他にもう一つ問題があります。
Unix/Linux版の $INFORMIXDIR/bin/dbaccessdemo, Windows版の%INFORMIXDIR%\bin\dbaccessdemo.batを見ると、環境変数DB_LOCALEがen_us.8859-1以外の値に設定されていると実行を中止するようにコーディングされています。
サンプル・データベースがどんな用途に使われているのか考えれば、Localeの設定値によらず動作するように作るべきだと思うので、この件も現在サポート担当者と相談中です。
---------------------------
dbaccessdemo scripts for IDS V9/10 fail creation of sample database/tables with non-English locales. This is because the demo sripts attempt to run some european collation features which do not work with other locales. I reported this to Technical Support team last year. The URL bellow gives you how to solve.
http://www-1.ibm.com/support/docview.wss?uid=swg21260271
Also, dbaccessdemo scripts for IDS 11.10 has another issue. It examines value of DB_LOCALE environment variables and continues execution if DB_LOCALE is not set or the variable is set to an English locale. I told these things to an engineer in the Technical Support team, hoping the sample database will be improved for beginners of Informix in any langauges(locales, codesets..)
-----------------------------
2007年08月30日
Finderr on Windows Platform
Informix に付属のツールで、finderr というコマンドがあります。
Unix/Linux版では、
% finderr -23101
のように、引数のエラー番号を指定して起動するとそのエラーに関する情報を表示します。
finderr は、$INFORMIXDIR/msg/ll_tt/codeset/errmsg.txt の内容を検索して表示するスクリプトです。ll_tt\codesetの部分は環境変数DBLANGの値によって決まります。codeset の部分は、"sjis-s", "CP1252", "ujis" などのコードセットをInformix内部の16進数4桁表記にしたものです。例えば、"ja_jp.sjis-s" は、ja_jp/03a4 のようになります。sjis-sなどのコードセット表記と16進4桁の内部表現の関係について詳しくは、$INFORMIXDIR/gls/cm3/registryファイルを参照してみてください。)
Windows版のCSDKやConnectでは、finderr はGUIで動作するWinHELPを使用したコマンドです。起動すると、%INFORMIXDIR%\msg\ll_tt\codeset\errmess.hlp を開きます。ll_tt\codesetの部分は環境変数DBLANGの値によって決まります。エラー番号の検索などは、WinHELPのユーザーインターフェース内で行います。
C:\> finderr -23101
を実行すると、WinHELPのウィンドウ上に、エラー -23101に関する情報が表示されます。
なお、Finderrは、IDSには含まれていません。IDSのプログラム・グループにある、"Error Messages"アイコンは、%INFORMIXDIR%\help\ll_tt\codeseterrmess.hlp ( ディレクトリーがmsg ではなく help であることに注意してください) を直接開くようになっています。1台のマシンにIDSとCONNECTをそれぞれ別のディレクトリにインストールし、両方のディレクトリーの bin にPATHを通し、IDSのインストールされたディレクトリーをINFORMIXDIRにセットして FINDERRを実行するとエラーが発生します。
残念ながら、errmess.hlp ファイルは、現在翻訳版が提供されていません。Windows 版の ILSをインストールしても、Windows版の FINDERRの表示は英語のままです。
ただし、ILSをインストールすることで、Unix/Linux版同様に、Windows版の IDS や Connectにもerrmsg.txt ファイルがコピーされます。Windows版のユーザーは、ちょっと面倒ですが、このファイルをテキストエディターなどで開くことにより、エラー番号に関連する翻訳された説明文を読むことができます。
Unix/Linux版では、
% finderr -23101
のように、引数のエラー番号を指定して起動するとそのエラーに関する情報を表示します。
finderr は、$INFORMIXDIR/msg/ll_tt/codeset/errmsg.txt の内容を検索して表示するスクリプトです。ll_tt\codesetの部分は環境変数DBLANGの値によって決まります。codeset の部分は、"sjis-s", "CP1252", "ujis" などのコードセットをInformix内部の16進数4桁表記にしたものです。例えば、"ja_jp.sjis-s" は、ja_jp/03a4 のようになります。sjis-sなどのコードセット表記と16進4桁の内部表現の関係について詳しくは、$INFORMIXDIR/gls/cm3/registryファイルを参照してみてください。)
Windows版のCSDKやConnectでは、finderr はGUIで動作するWinHELPを使用したコマンドです。起動すると、%INFORMIXDIR%\msg\ll_tt\codeset\errmess.hlp を開きます。ll_tt\codesetの部分は環境変数DBLANGの値によって決まります。エラー番号の検索などは、WinHELPのユーザーインターフェース内で行います。
C:\> finderr -23101
を実行すると、WinHELPのウィンドウ上に、エラー -23101に関する情報が表示されます。
なお、Finderrは、IDSには含まれていません。IDSのプログラム・グループにある、"Error Messages"アイコンは、%INFORMIXDIR%\help\ll_tt\codeseterrmess.hlp ( ディレクトリーがmsg ではなく help であることに注意してください) を直接開くようになっています。1台のマシンにIDSとCONNECTをそれぞれ別のディレクトリにインストールし、両方のディレクトリーの bin にPATHを通し、IDSのインストールされたディレクトリーをINFORMIXDIRにセットして FINDERRを実行するとエラーが発生します。
残念ながら、errmess.hlp ファイルは、現在翻訳版が提供されていません。Windows 版の ILSをインストールしても、Windows版の FINDERRの表示は英語のままです。
ただし、ILSをインストールすることで、Unix/Linux版同様に、Windows版の IDS や Connectにもerrmsg.txt ファイルがコピーされます。Windows版のユーザーは、ちょっと面倒ですが、このファイルをテキストエディターなどで開くことにより、エラー番号に関連する翻訳された説明文を読むことができます。
2007年08月08日
4GL and UTF8 / GB18030-2000
Summary in English...
If you use Informix SQL/4GL/dbaccess, or any other Informix full screen CUI applications with UTF-8 or GB18030-2000 codeset, you need to set an environment variable GL_USEGLU to 1. Before you compile 4GL apps, and run 4GL/I-SQL apps you need to set GL_USEGLU as well. Unless GL_USEGLU, you will get incorrectly-displayed full screen user interface.
--------------------------------------------------------
以前にも何度か書いたと思いますが、
( 最近の記事は http://oninit.ti-da.net/e1391371.html )
CLIENT_LOCALEを UTF-8 ベースのロケールや、GB18030-2000のロケールにセットして
Informix 4GL などのフルスクリーン・アプリケーションを動かす場合、環境変数GL_USEGLUを1
に設定しないと画面が崩れます。以下、dbaccess での例です。CLIENT_LOCALEにGB18030-2000を指定して、GL_USEGLUを設定した場合としなかった場合のdbaccessのメニュー画面を見てください。GL_USEGLUを設定していないと、中国語(漢字)のメニュー・オプションの表示位置がずれているのがわかると思います。

GL_USEGLUは、Informixに組み込まれているIBM GLUライブラリー ( Unicodeサポートのた
めにIBMが開発した汎用ライブラリー)を使用するか否かを指定する環境変数です。この環
境変数を設定してあると、Informixは、GLSライブラリーではなく、IBM GLU ライブラリーを
使って文字操作の処理を行います。IBM GLUライブラリーを使用すると、Unicodeで決めら
れている並べ替え順序規則などを使用できるようになります。
Client SDKで提供されているAPIは、Informixが以前から提供しているGLS
ライブラリーと、IBM GLUライブラリーのどちらを使用しても最低限の機能を使用することがで
きます。なので、GL_USEGLUは、UNICODE準拠の並べ替え規則などを必要としないので
あれば必須ではありません。( Updated 2007-11-03: 以下のIBM情報源:
http://www-1.ibm.com/support/docview.wss?uid=swg21220610
によると、Unix クライアントからデータベースサーバーに接続して UTF-8 などのコードセットを使う時には、GL_USEGLUを設定しなければならないそうです。)
しかし、Informix 4GL ( .. その他テキストベースのフルスクリーンアプリケーション ) のフル
スクリーン画面は、IBM GLUライブラリーを使用しないと、UnicodeやGB18030ベースのロ
ケールで画面が崩れてしまいますので注意してください。
4GL のフルスクリーン・アプリケーションについては、GL_USEGLU を1に設定した状態
で再コンパイルする必要があります。
以下、簡体字中国語でInformixを使用する場合の環境変数設定の例です。この例では、DB_LOCALEにUTF-8ベースのロケールを使ってみました。
If you use Informix SQL/4GL/dbaccess, or any other Informix full screen CUI applications with UTF-8 or GB18030-2000 codeset, you need to set an environment variable GL_USEGLU to 1. Before you compile 4GL apps, and run 4GL/I-SQL apps you need to set GL_USEGLU as well. Unless GL_USEGLU, you will get incorrectly-displayed full screen user interface.
--------------------------------------------------------
以前にも何度か書いたと思いますが、
( 最近の記事は http://oninit.ti-da.net/e1391371.html )
CLIENT_LOCALEを UTF-8 ベースのロケールや、GB18030-2000のロケールにセットして
Informix 4GL などのフルスクリーン・アプリケーションを動かす場合、環境変数GL_USEGLUを1
に設定しないと画面が崩れます。以下、dbaccess での例です。CLIENT_LOCALEにGB18030-2000を指定して、GL_USEGLUを設定した場合としなかった場合のdbaccessのメニュー画面を見てください。GL_USEGLUを設定していないと、中国語(漢字)のメニュー・オプションの表示位置がずれているのがわかると思います。

GL_USEGLUは、Informixに組み込まれているIBM GLUライブラリー ( Unicodeサポートのた
めにIBMが開発した汎用ライブラリー)を使用するか否かを指定する環境変数です。この環
境変数を設定してあると、Informixは、GLSライブラリーではなく、IBM GLU ライブラリーを
使って文字操作の処理を行います。IBM GLUライブラリーを使用すると、Unicodeで決めら
れている並べ替え順序規則などを使用できるようになります。
Client SDKで提供されているAPIは、Informixが以前から提供しているGLS
ライブラリーと、IBM GLUライブラリーのどちらを使用しても最低限の機能を使用することがで
きます。なので、GL_USEGLUは、UNICODE準拠の並べ替え規則などを必要としないので
あれば必須ではありません。( Updated 2007-11-03: 以下のIBM情報源:
http://www-1.ibm.com/support/docview.wss?uid=swg21220610
によると、Unix クライアントからデータベースサーバーに接続して UTF-8 などのコードセットを使う時には、GL_USEGLUを設定しなければならないそうです。)
しかし、Informix 4GL ( .. その他テキストベースのフルスクリーンアプリケーション ) のフル
スクリーン画面は、IBM GLUライブラリーを使用しないと、UnicodeやGB18030ベースのロ
ケールで画面が崩れてしまいますので注意してください。
4GL のフルスクリーン・アプリケーションについては、GL_USEGLU を1に設定した状態
で再コンパイルする必要があります。
以下、簡体字中国語でInformixを使用する場合の環境変数設定の例です。この例では、DB_LOCALEにUTF-8ベースのロケールを使ってみました。
export CLIENT_LOCALE=zh_cn.GB18030-2000
export DB_LOCALE=zh_cn.utf8
export DBLANG=zh_cn.gb
export GL_USEGLU=1
タグ :gls
2007年06月06日
IDSAdminとWindowsとDELIMIDENT...
今日、Windows上でIDSAdminを動かそうとしてトラブルに陥っている知人に会いました。環境を見せてもらうと、IDSAdminが発行しているSQLがエラーを発生させています。データベース上に確かに存在している表で、表の所有者も間違っていません。
しばらく原因がわからなかったのですが、ふと Windows のユーザー名に目がとまりました。ユーザー名に「大文字」が使われていたのです。どうやら、Informixは、ユーザー名などの識別子を引用符で囲まないと( 囲むためには、環境変数 DELIMIDENT を使う必要があります ) 小文字に変換してから処理をしているようです。かつ、ユーザー名を確認する時にWindows 上では、OSから返ってくるユーザー名をそのまま参照して比較しているようです。このため、例えばこんなことが起こっているようです。
IDSAdminは、ユーザー名をつけたSQLを生成する時にユーザー名を引用符で囲みません。このため、Windows上のIDSインスタンスに対して使う時は、Windowsのユーザー名に大文字を使うと嵌ります。気をつけた方が良いですね。もしInformixで使用するユーザー名に大文字を含む名前をつけてしまっていたら、コントロールパネルの管理ツールを使ってユーザー名を変更しておくことをお勧めします。
続きを読む
しばらく原因がわからなかったのですが、ふと Windows のユーザー名に目がとまりました。ユーザー名に「大文字」が使われていたのです。どうやら、Informixは、ユーザー名などの識別子を引用符で囲まないと( 囲むためには、環境変数 DELIMIDENT を使う必要があります ) 小文字に変換してから処理をしているようです。かつ、ユーザー名を確認する時にWindows 上では、OSから返ってくるユーザー名をそのまま参照して比較しているようです。このため、例えばこんなことが起こっているようです。
Windows上のユーザー名: SHIBUYA
失敗するSQL文の例:
SELECT * FROM shibuya.mytable;
SELECT * FROM SHIBUYA.mytable;
成功するSQL文の例:
SELECT * FROM mytable;
SELECT * FROM 'SHIBUYA'.mytable; -- ( ユーザー名を引用符で囲むには事前に環境変数DELIMIDENTを設定する必要があります。)
IDSAdminは、ユーザー名をつけたSQLを生成する時にユーザー名を引用符で囲みません。このため、Windows上のIDSインスタンスに対して使う時は、Windowsのユーザー名に大文字を使うと嵌ります。気をつけた方が良いですね。もしInformixで使用するユーザー名に大文字を含む名前をつけてしまっていたら、コントロールパネルの管理ツールを使ってユーザー名を変更しておくことをお勧めします。
続きを読む
2007年05月26日
sqexplain.out and GLS
SET EXPLAIN ON を使ってSQLのアクセス・プランを調べている途中で、不思議なことに気づきました。
sqexplain.outに出力される内容のエンコーディング ( encoding ) が、場所により異なるGLS環境変数によって決定されているようです。

1.SQL識別子
2.ユーザー・インターフェース文字列
確認した限りでは、クライアント側で設定した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
--------------------------------------------------
続きを読む
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
--------------------------------------------------
続きを読む
2007年05月23日
ESQL/C "Callback Function"
Updated: 2007/09/28 - ESQL/C 3.0日本語マニュアルのPDFを掲載
INFORMIX ESQL/C version 2.9やESQL/C 3.0の日本語マニュアル PDFに、コールバック関数という機能が紹介されています。これを使うと、例えば、指定した制限時間を越えても実行が終わらないSQLを強制的に終了させる、というような操作が可能になります。
使い方はだいたいこんな感じです。
1.制限時間を超過した時のチェック処理を行う関数 (コールバック関数) を用意する。
この関数は、ESQL/Cの組み込み関数で登録しておくと、制限時間を超過した時にESQL/Cライブラリーから呼び出されるようになります(これが「コールバック関数」という名前の由来です)。コールバック関数の中では、主に、以下の処理のためのコードを用意しておきます。
2. コールバック関数を、制限時間とともに ESQL/C実行時ライブラリー内に登録する。
ESQL/Cのソースコード内で、組み込み関数sqlbreakcallback() を呼び出して登録します。
後は、ESQL/C ソースコードをコンパイルして実行するだけですね。
詳しくは、$INFORMIXDIR/demo/esqlc/timeout.ec を見てください。
続きを読む
INFORMIX ESQL/C version 2.9やESQL/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 を見てください。
続きを読む
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 側で、
にする必要があります。DB_LOCALEは、アクセスするデータベースに合わせてその場で設定した方が良いでしょう。LANGについては、OSによって異なります。上記の例は、Solaris 8/9/10で利用可能 ( OS にja_JP.PCKロケールがインストールされている必要がある )です。以下のように、Host Access タブの、Login Automationボタンを押して、"Advanced Host Access Options" 画面を呼び出し、ここに設定しておくと良いでしょう。なお、以下の画面は、Solaris の Bourne shell を使うための設定になっています。

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

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する行が表示されていませんが、実際には必要です)
続きを読む
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
( フォームの実行時などに、「セグメントエラー」 ( 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
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でも、同一サーバー機上の複数のインスタンスの状況を表示させるには、
を使います。
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) もクローズド・ベータが計画されています。
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
2007年04月25日
IDSAdmin with non-English DB ?
Summary in English: This article discusses "IDSAdmin with non-English Databases". The current open beta version of IDSAdmin does not use Locale variables when it establishes connection to the database server, therefore IDSAdmin is not able to open non-English (locale) database.
It seems there are issues in at least 2 IDSAdmin PHP source files; lib/db.php ( to add client_locale and db_locale in ODBC dsn string. something like "cloc=ja_jp.sjis-s;dloc=ja_jp.sjis-s" ), and templates/main.html ( to specify appropriate web-browser encoding - see charset in a meta-tag ).
Before you try to change the IDSAdmin code, read the "International License Agreement for Early Release of Programs" carefully -- "You may not modify or create derivative works of the Program."
I am looking forward to officially internationalized/localized version of IDSAdmin!!
-------------------------------------------------------------------------
DB_LOCALE=ja_jp.sjis-sで作ったDatabaseをIDSAdminのSQLToolBoxで開こうとしたら Error -23197が発生しました。調べたところ、現在公開されている IDSAdminでは、サーバーに接続する時にDB_LOCALEやCLIENT_LOCALEを使っていないようです。( idsadmin/lib/db.php ) 更に、IDSAdminは、画面表示のEncodingに English localeを使用していますね ( idsadmin/templates/main.html )。
db.php で ODBCの Datasource接続文字列 ( dsn ) を作っている部分があります。この場所に、 "CLOC=xxxx; DLOC=xxxx"のように、ロケール指定を追加したら、Error -23197が解決しそうですね。
後はエンコーディングの手直しです。main.html の中に、meta タグがあります。ここで charsetとして shift_jisを使うようになおせば、日本の表名やデータが表示されるようになりそうです。

( 画面を詳しく見ると、列の名前の一部が文字化けしています。まだ直すべき部分があるのでしょうか)
connections dbに CLIENT_LOCALEとDB_LOCALEを記録し、データベースサーバーに接続する時にLOCALEを使うように PHPのコードを書き換えれば完璧ですね。

以上、「マル改」終わり。
早く正式な日本語版 IDSAdminが出てくると良いですね。
続きを読む
It seems there are issues in at least 2 IDSAdmin PHP source files; lib/db.php ( to add client_locale and db_locale in ODBC dsn string. something like "cloc=ja_jp.sjis-s;dloc=ja_jp.sjis-s" ), and templates/main.html ( to specify appropriate web-browser encoding - see charset in a meta-tag ).
Before you try to change the IDSAdmin code, read the "International License Agreement for Early Release of Programs" carefully -- "You may not modify or create derivative works of the Program."
I am looking forward to officially internationalized/localized version of IDSAdmin!!
-------------------------------------------------------------------------
DB_LOCALE=ja_jp.sjis-sで作ったDatabaseをIDSAdminのSQLToolBoxで開こうとしたら Error -23197が発生しました。調べたところ、現在公開されている IDSAdminでは、サーバーに接続する時にDB_LOCALEやCLIENT_LOCALEを使っていないようです。( idsadmin/lib/db.php ) 更に、IDSAdminは、画面表示のEncodingに English localeを使用していますね ( idsadmin/templates/main.html )。
db.php で ODBCの Datasource接続文字列 ( dsn ) を作っている部分があります。この場所に、 "CLOC=xxxx; DLOC=xxxx"のように、ロケール指定を追加したら、Error -23197が解決しそうですね。
後はエンコーディングの手直しです。main.html の中に、meta タグがあります。ここで charsetとして shift_jisを使うようになおせば、日本の表名やデータが表示されるようになりそうです。
( 画面を詳しく見ると、列の名前の一部が文字化けしています。まだ直すべき部分があるのでしょうか)
connections dbに CLIENT_LOCALEとDB_LOCALEを記録し、データベースサーバーに接続する時にLOCALEを使うように PHPのコードを書き換えれば完璧ですね。

以上、「マル改」終わり。
早く正式な日本語版 IDSAdminが出てくると良いですね。
続きを読む
2007年03月24日
SYSONLINELOG (Cheetah)
Informix Dynamic Server 次バージョンには、いくつもの新しいシステムカタログ表が追加されています。"SYSONLINELOG"という表もそのひとつです。名前から想像できると思いますが、検索すると、online.log ( ONCONFIGの MSGPATHで指定したファイル ) の中身 (正確には、「中身と同等のもの」 ) が表示されます。
もちろん、SELECTですから、こんなことや
こんなこと
もできますね。
日本語ロケールで oninitしている管理者なら、こんな

感じでしょうか。
$INFORMIXDIR/demo/admin ( Windows 版だと、%INFORMIXDIR%/demo/admin )の下には、sysonlinelogを検索する SELECT文のサンプルや、すでにご紹介済みのADMIN APIの例などのサンプルファイルが含まれています。
DATABASE sysmaster;
SELECT line FROM sysonlinelog;
もちろん、SELECTですから、こんなことや
SELECT line FROM sysonlinelog WHERE line MATCHES "*Warn*";
こんなこと
SELECT line FROM sysonlinelog WHERE line MATCHES "*Assert*";
もできますね。
日本語ロケールで oninitしている管理者なら、こんな

感じでしょうか。
$INFORMIXDIR/demo/admin ( Windows 版だと、%INFORMIXDIR%/demo/admin )の下には、sysonlinelogを検索する SELECT文のサンプルや、すでにご紹介済みのADMIN APIの例などのサンプルファイルが含まれています。
タグ :cheetah
2007年03月13日
IDSAdmin と IDS V10
IDSAdminのインストールが終わったので、IDS V10のデータベースサーバーにも接続してみたのですが、残念ながら動きませんでした。
IDSAdminは、IDS Cheetah で新しく拡張された組み込み関数/routine ( 例えば format_units ) をたくさん使っており、IDS V10 につなぐと殆どの画面でエラーが発生します。
IDSAdminのreadmeファイルにも記されていますが、このツールはあくまでも IDS 11.10 ( バージョン番号は現時点での仮称ですね、きっと ) 用、ということですね。
IDSAdminは、IDS Cheetah で新しく拡張された組み込み関数/routine ( 例えば format_units ) をたくさん使っており、IDS V10 につなぐと殆どの画面でエラーが発生します。
IDSAdminのreadmeファイルにも記されていますが、このツールはあくまでも IDS 11.10 ( バージョン番号は現時点での仮称ですね、きっと ) 用、ということですね。
2007年03月10日
IDSAdminのインストール
インストールが終わりました。

いくつかひっかかった事があったので、ここに書いておきます。手順については、前の記事で紹介したページ ( http://oninit.ti-da.net/e1398401.html
) を参照してください。
xampp のインストール:
c:\ で zip を展開するのが一番楽です。
こうすると、c:\xampp にファイルが展開されます。。
xampp\php\pear.bat に、展開された場所を指定している箇所がいくつかあり、デフォルト値が\xampp 以下になっています。一度間違った値で実行してしまうと、このバッチファイルが環境変数にその値を設定してしまい、バッチファイルを編集して再実行しただけでは動かなくなります。コマンドラインで、PHP_* という名前の環境変数を全部消すか、作業中のコマンドウィンドウを一度閉じて開きなおす必要があります。
コマンドラインで環境変数をクリアするのなら、たぶん以下のコマンドが使えると思います。
ids-admin のインストール:
http://localhost/idsadmin/install を開き、インストールを終えようとした時に
"fopen で permission denied ..."などというエラーが発生しました。
zip ファイルを展開した時に、xampp\htdocs\idsadmin\conf\config.php ファイルの
パーミッション(ユーザーのアクセス権限)が Readonly でかつ自分自身の書き込み権限がないのが原因のようです。Windows Explorerで書き込みを許可(Read only のチェックボックスを外し、かつそのファイルのプロパティの「セキュリティー」タブを見て、インストールしているユーザーがそのファイルへの書き込み権限を持っていることを確認しましょう。
インストール終了後:
IDSAdmin ( http://localhost/idsadmin ) の画面で、まず最初に 画面左上の "Admin"リンクをクリックし、データベースサーバへの接続情報を登録しておく必要があります (IDS Experts Blogにあるインストール手順でも解説されています。忘れないようにしてください。)

Menu から Connection Admin を選択して、さらにその中の Add Connection でデータベースサーバーへの接続情報を追加しましょう。
これをしないで、http://localhost/idsadmin の画面でログインしようとすると、"Fetchall が失敗した"旨のエラーが発生し、ログインができません。
以上、インストール時に気づいた主な注意事項です。

いくつかひっかかった事があったので、ここに書いておきます。手順については、前の記事で紹介したページ ( http://oninit.ti-da.net/e1398401.html
) を参照してください。
xampp のインストール:
c:\ で zip を展開するのが一番楽です。
cd c:\
( 例 ) unzip c:\download\xampp-win32-1.5.4a.zip
こうすると、c:\xampp にファイルが展開されます。。
xampp\php\pear.bat に、展開された場所を指定している箇所がいくつかあり、デフォルト値が\xampp 以下になっています。一度間違った値で実行してしまうと、このバッチファイルが環境変数にその値を設定してしまい、バッチファイルを編集して再実行しただけでは動かなくなります。コマンドラインで、PHP_* という名前の環境変数を全部消すか、作業中のコマンドウィンドウを一度閉じて開きなおす必要があります。
コマンドラインで環境変数をクリアするのなら、たぶん以下のコマンドが使えると思います。
set PHP_PEAR_INSTALL_DIR=
set PHP_PEAR_BIN_DIR=
set PHP_PEAR_PHP_BIN=
set PHP_PEAR_SYSCONF_DIR=
set PHP_PEAR_EXTENSION_DIR=
set PHP_PEAR_DOC_DIR=
set PHP_PEAR_DATA_DIR=
set PHP_PEAR_TEST_DIR=
set PHP_PEAR_CACHE_DIR=
ids-admin のインストール:
http://localhost/idsadmin/install を開き、インストールを終えようとした時に
"fopen で permission denied ..."などというエラーが発生しました。
zip ファイルを展開した時に、xampp\htdocs\idsadmin\conf\config.php ファイルの
パーミッション(ユーザーのアクセス権限)が Readonly でかつ自分自身の書き込み権限がないのが原因のようです。Windows Explorerで書き込みを許可(Read only のチェックボックスを外し、かつそのファイルのプロパティの「セキュリティー」タブを見て、インストールしているユーザーがそのファイルへの書き込み権限を持っていることを確認しましょう。
インストール終了後:
IDSAdmin ( http://localhost/idsadmin ) の画面で、まず最初に 画面左上の "Admin"リンクをクリックし、データベースサーバへの接続情報を登録しておく必要があります (IDS Experts Blogにあるインストール手順でも解説されています。忘れないようにしてください。)

Menu から Connection Admin を選択して、さらにその中の Add Connection でデータベースサーバーへの接続情報を追加しましょう。
これをしないで、http://localhost/idsadmin の画面でログインしようとすると、"Fetchall が失敗した"旨のエラーが発生し、ログインができません。
以上、インストール時に気づいた主な注意事項です。





日本の地域ブログ大集合!津々浦々の美味い・楽しいがここに!