2010年01月30日

CDC API ( 11.50.xC3以降 )

IDS 11.50.xC3の新機能に、Change Data Capture APIという新しいクライアント側APIが含まれています。ちょっと興味があったので試してみました。
サンプルプログラム (ESQL/Cで記述:"cdcapi.ec") は、マニュアルのChapter 6にあります。日本語版のマニュアルは 2009年12月19日現在 IDS v11.50.xC3ベースですが、残念ながらこのマニュアルに掲載されているcdcapi.ec は、正常に動作しません。実行すると、必ずエラー終了します。ブラウザーの言語を英語優先に切り替えてから、v11.50.xC5以降のInformation Center形式のマニュアルからコピーアンドペーストしてください。サンプルプログラムはこちらです。

サンプルのコンパイルは特に難しいところはありません。上のリンクにあるサンプルソース "cdcapi.ec"を普通にESQL/C (Client SDK 3.50に付属のもの)でコンパイルしてください。

% esql cdcapi.ec -o a.out


コンパイル後、実行前にsyscdcデータベースを作成しておく必要があります。このデータベースは、utf8 ロケールで、ユーザー informix で作成してください。以下の例では "en_us.utf8"を使用していますが、言語によっては、International Language Supplement (ILS) をインストールしておく必要があります。たとえば、"ja_jp.utf8"を使いたいのであればILSのインストールが必須です。
$ su informix
% setenv CLIENT_LOCALE en_us.utf8
% setenv DB_LOCALE en_us.utf8
% cd $INFORMIXDIR/etc
% dbaccess - syscdcv1.sql

手順は、マニュアルの Page 1-5にも記されています。( この手順中には utf8ロケールの話が含まれていませんね。もし、ILSをインストールしていないなら、CLIENT_LOCALE を DB_LOCALEと同じen_us.utf8に設定してください。)
Perform the following tasks to prepare for using the Change Data Capture API:
1. Turn on logging for all databases from which you intend to capture data
changes. For information about logging, see the IBM Informix Guide to SQL:
Syntax.
2. Run the following script as user informix from the $INFORMIXDIR/etc
directory: syscdcv1.sql
3. Verify that the syscdcv1 database exists by creating a connection to it, as user
informix. For example, you could use DB-Access to connect to the syscdcv1
database.
4. Set the DB_LOCALE environment variable to be the same as the locale of the
database from which you want to capture data.

で、手順の4番目です。先ほどコンパイルしたアプリケーションを実行する時には、DB_LOCALEの値を、これから変更データをキャプチャーしようとする対象のデータベースと同じに設定します。
サンプルプログラムは、こんな感じで実行します。
% setenv CLIENT_LOCALE en_us.8859-1
% setenv DB_LOCALE en_us.8859-1
% dbaccessdemo mydemo -log
( サンプルデータベースを作成します )
% ./a.out -D mydemo -T customer -C"customer_num,fname,lname,phone"
でも、表名の部分は、場合によってはユーザー名を修飾しないとエラーになります。以下のようなエラーが出たら、表名をユーザー名付きの表記にしてみてください。
% ./a.out -D mydemo -T customer -C "fname"
Connected to syscdcv1@bmark
CDC_OPENSESS for server bmark with Timeout 300
Enable for full row logging on Table 'mydemo:customer'
CDC_STARTCAPTURE of mydemo:customer on session 39
CDC API 'cdc_startcapture' Failed at sample.ec:923.
CDCAPI_RETVAL = -83720, CDC_ERRORCODE = CDC_E_ARG
CDC Error Description is
A parameter passed to the function is not valid
cdc_closesess on session 39

エラーで終了してしまいました。それでは、表名を書き換えて再実行します。

% ./a.out -D stores7 -T informix.customer -C "fname,lname,address1,address2"
Connected to syscdcv1@bmark
CDC_OPENSESS for server bmark with Timeout 300
Enable for full row logging on Table 'mydemo:user001.customer'
CDC_STARTCAPTURE of mydemo:user001.customer on session 39
CDC_ACTIVATESESS on 39
Start Reading the log records...
Got Record type CDC_REC_TABSCHEM. Size = 15 TabID : 0
Fixed length column size (total) : 15
Number of fixed lenth column is 1
Number of variable lenth column is 0
Schema for Table is: 'fname char(15)'
Column 0 is fname, type = 0, size = 30


さて、ここで別の端末から、以下のSQLを実行します。
update customer set fname='John' where customer_num=103;


そうすると、サンプルの実行側に、こんな出力が表示されるはずです。

Got Record type CDC_REC_BEGINTX. Size = 0 LSN = 3:0xe60018. TXID = 22
Time = 2009-12-19 23:18:11
Got Record type CDC_REC_UPDBEF. Size = 70 LSN = 3:0xe60050. TXID = 22
TabID = 0
Column Value = ''Philip '
Column Value = 'Currie '
Column Value = '654 Poplar '
Column Value = 'P. O. Box 3498 '
Got Record type CDC_REC_UPDAFT. Size = 70 LSN = 3:0xe60118. TXID = 22
TabID = 0
Column Value = 'John '
Column Value = 'Currie '
Column Value = '654 Poplar '
Column Value = 'P. O. Box 3498 '
Got Record type CDC_REC_COMMTX. Size = 0 LSN = 3:0xe601e0. TXID = 22
Time = 2009-12-19 23:18:11
Got Record type CDC_REC_TIMEOUT. Size = 0
  
続きを読む
タグ :cheetah2gls

2010年01月20日

IDS次バージョンの早期評価プログラム

International Informix Users Groupのウェブサイトに、Informix Dynamic Server次期リリースの早期評価プログラム (Early Access Program)の案内が掲載されています。

このリリースが、いわゆる Panther なんでしょうか?  
続きを読む

Posted by oninit at 01:14Comments(0)TrackBack(0)Informixの情報源

2010年01月05日

OpenAdminTool 2.27

Informix Dynamic Server 11.10以上で利用可能な、ブラウザー上のサーバー管理/監視ツール「OpenAdminTool」がバージョンアップして、version 2.27になりました。
( http://www.openadmintool.org からダウンロード可能 )
このバージョンでの大きな新規追加機能は、各国語に翻訳されたユーザーインターフェース(メニューなどが日本語でも表示できるようになった)です。

早速試してみました。  
続きを読む

2009年12月26日

Informix Dynamic Server 11.50.xC6

IDSの新しいインテリム・リリース version 11.50.xC6が公開されています。例によって、versionの "x"の部分は、次のようなルールになっています。
* 11.50.UC6: Unix (Linuxを含む)の32bit版
* 11.50.TC6: Windowsの32bit版
* 11.50.FC6: Unix (Linux/Mac OSXを含む)+Windowsの64bit版
* 11.50.HC6: HP-UX 11iの32bit版


このバージョンで修正された障害の一覧は、こちらにあります。
  
続きを読む

2009年12月18日

Informix 4GL 7.50.xC1での日本語文字表示障害

こちらのブログで、Informix 4GL version 7.50.xC1での日本語文字表示に関する障害が紹介されています。

幸いにも、AIX, Sparc Solaris, Linux (x86)など、大半のプラットフォームではすでに version 7.50.xC2や7.50.xC3が出荷されており、この障害はすでに修正済みです。私が関わったお客様で、Intel (Intel64) Solaris 版では、残念ながらまだ修正版がリリースされていません。大変残念ですが、version 7.32 ( 32bit Intel Solaris版 )をご利用いただくことになりました。


  
続きを読む