Category: Informix

  • Informixでログを監視する

    Informixのログ(通常はonline.log)には、エラーが出力されますが、これをエラーレベルでアラートを出すとかが出来ます。以下はサンプル!。

    !!表示がおかしい! 一部の文字が正しく記述されていない。 いずれ、直します。取り敢えずイメージは伝わるかと。

    概要仕様は以下

    Informixのイベントアラーム通知機能を利用して、以下の機能を実現する。

    1)スクリプトの先頭(又は、iniファイル等で)で、以下の項目を指定可能な事。

     a)出力先ファイル名(含むディレクトリ) なお、出力先は、最大2カ所指定可能とし、いずれも追記で出力する
     b)出力対象アラームの重要度(1~5で指定し、指定した重要度以上を対象とする)

      1:注意不要レベル

      2:通知レベル

      3:注意レベル(デフォルト設定)

      4:緊急レベル

      5:致命的レベル


     c)出力ファイルフォーマット(1行で出力するか、複数行で出力するかの指定)
     d)出力項目レベル指定(1~5、9(全て)で指定し、指定した項目以内を対象とする)
     ①年月日時分秒 + 重要度
     ②イベントクラスID
     ③クラスメッセージ
     ④固有のメッセージ
     ⑤関連項目パス

     例:”3”を指定したら、①~③までを出力

     e)MSGガイダンス出力の有無指定(0:出力しない  1:出力する)

     ①重要度Severity :
     ②イベントクラスIDClass ID :
     ③クラスメッセージClass msg :
     ④固有のメッセージSpecific msg :
     ⑤関連項目パスSee Also :

     なお、年月日時分秒についてはガイダンスは出力しない。

     f)MSGのKeyガイダンスの指定(”IDS Err MSG:”等先頭に出力可能にする)

     g)上記”f)”の出力有無指定(0:出力しない  1:出力する)

    2)クラスMSGまでの出力は、固定長で有ること

    3)文字コードは、全て、半角英数字とし、コードセットの影響を受けない形とする。

    4)exit_status への変数を設定すること

    ※:以下のサンプルコードはそのままでは動きません。一部の文字がおかしい&表示されていない等がある。

    #!/bin/sh
    #========================================================
    # Informix Alarmprogram
    #========================================================

    OUTPUT_FILE_1=/tmp/log1.log
    OUTPUT_FILE_2=/usr/informix94/online.log
    OUTPUT_FORMAT=1 # 1:single-line 2:multi-line
    OUTPUT_SEVERITY=1 # 1-5
    OUTPUT_LEVEL=5 # 1-5,9
    OUTPUT_GUIDANCE=1 # 0-1
    OUTPUT_KEY_GUIDANCE_TEXT=
    OUTPUT_KEY_GUIDANCE=0 # 0-1
    OUTPUT_DATE=date '+%Y/%m/%d %H:%M:%S'

    EVENT_SEVERITY=$1
    EVENT_CLASS=$2
    EVENT_MSG=”$3″
    EVENT_ADD_TEXT=”$4″
    EVENT_FILE=”$5″

    cd dirname $0
    EXIT_STATUS=0

    #=======================================================
    # Output File Check
    #—————————————————————————–
    # Argument
    # file_name
    # Return
    # 0 : OK
    # 1 : NG
    #=======================================================
    file_chkeck() {

    if [ -f $1 ] ; then
        if [ ! -w $1 ] ; then
            echo "ERROR: \"$1\" not writable."
            return 1
        fi
    else
        touch $1 > /dev/null 2>&1
        if [ $? -ne 0 ] ; then
            echo "ERROR: \"$1\" cannot create."
            return 1
        fi
    fi
    
    return 0

    }

    if [ “$OUTPUT_FORMAT” = “” ] \
    || ([ $OUTPUT_FORMAT -lt 1 ] || [ $OUTPUT_FORMAT -gt 2 ]) ; then
    echo “ERROR: syntax error OUTPUT_FORMAT=$OUTPUT_FORMAT”
    exit 1
    fi

    if [ “$OUTPUT_SEVERITY” = “” ] \
    || ([ $OUTPUT_SEVERITY -lt 1 ] || [ $OUTPUT_SEVERITY -gt 5 ]) ; then
    echo “ERROR: syntax error OUTPUT_SEVERITY=$OUTPUT_SEVERITY”
    exit 1
    fi

    if [ “$OUTPUT_LEVEL” = “” ] \
    || (([ $OUTPUT_LEVEL -lt 1 ] || [ $OUTPUT_LEVEL -gt 5 ]) && [ $OUTPUT_LEVEL -ne 9 ]) ; then
    echo “ERROR: syntax error OUTPUT_LEVEL=$OUTPUT_LEVEL”
    exit 1
    fi

    if ([ “$OUTPUT_GUIDANCE” != “0” ] && [ “$OUTPUT_GUIDANCE” != “1” ]) ; then
    echo “ERROR: syntax error OUTPUT_GUIDANCE=$OUTPUT_GUIDANCE”
    exit 1
    fi

    if ([ “$OUTPUT_KEY_GUIDANCE” != “0” ] && [ “$OUTPUT_KEY_GUIDANCE” != “1” ]) ; then
    echo “ERROR: syntax error OUTPUT_KEY_GUIDANCE=$OUTPUT_KEY_GUIDANCE”
    exit 1
    fi

    if [ “$OUTPUT_FILE_1” != “” ] ; then
    file_chkeck $OUTPUT_FILE_1
    if [ $? -ne 0 ] ; then
    EXIT_STATUS=1
    OUTPUT_FILE_1=
    fi
    fi

    if [ “$OUTPUT_FILE_2” != “” ] ; then
    file_chkeck $OUTPUT_FILE_2
    if [ $? -ne 0 ] ; then
    EXIT_STATUS=1
    OUTPUT_FILE_2=
    fi
    fi

    if [ “$OUTPUT_FILE_1” = “” ] && [ “$OUTPUT_FILE_2” = “” ] ; then
    exit $EXIT_STATUS
    fi

    # Severity Check
    if [ $# -lt 1 ] || [ $EVENT_SEVERITY -lt $OUTPUT_SEVERITY ] ; then
    exit $EXIT_STATUS
    fi

    for OUTPUT_FILE in $OUTPUT_FILE_1 $OUTPUT_FILE_2
    do
    if [ $OUTPUT_KEY_GUIDANCE -eq 1 ] ; then
    echo “${OUTPUT_KEY_GUIDANCE_TEXT}\c” >> $OUTPUT_FILE
    fi

    echo "${OUTPUT_DATE} \c" >> $OUTPUT_FILE
    if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
        echo "Severity:\c" >> $OUTPUT_FILE
    fi
    echo "$OUTPUT_SEVERITY" | awk '{ printf("%2s", $1)}' >> $OUTPUT_FILE
    
    if [ $OUTPUT_LEVEL -ge 2 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Class ID:\c" >> $OUTPUT_FILE
        fi
        echo "$EVENT_CLASS" | awk '{ printf("%3s", $1)}' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 3 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Class msg:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_MSG}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 4 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Specific msg:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_ADD_TEXT}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 5 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "See Also:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_FILE}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    echo "" >> $OUTPUT_FILE

    done

  • GL_USEGLU 環境変数のTips

    環境変数 GL_USEGLU の豆知識。

    CLIENT_LOCALEを UTF-8 ベースのロケールや、GB18030-2000のロケールにセットして
    Informix 4GL のフルスクリーン・アプリケーションを動かす場合、環境変数GL_USEGLUを1
    に設定しないと画面が崩れます。

    GL_USEGLUは、Informixに組み込まれているIBM GLUライブラリー ( Unicodeサポートのた
    めにIBMが開発した汎用ライブラリー)を使用するか否かを指定する環境変数です。この環
    境変数を設定してあると、Informixは、GLSライブラリーではなく、IBM GLU ライブラリーを
    使って文字操作の処理を行います。IBM GLUライブラリーを使用すると、Unicodeで決めら
    れている並べ替え順序規則などを使用できるようになります。

    Client SDKで提供されているAPIのレベルでは、Informixが以前から提供しているGLS
    ライブラリーと、IBM GLUライブラリーのどちらを使用しても最低限の機能を使用することがで
    きます。なので、GL_USEGLUは、UNICODE準拠の並べ替え規則などを必要としないので
    あれば必須ではありません。dbaccess等では正常なのに、4GLアプリだとおなしくなるとかの場合など、これが原因の場合が多いです。

    Informix 4GL ( .. その他テキストベースのフルスクリーンアプリケーション ) のフルスクリーン画面は、IBM GLUライブラリーを使用しないと、UnicodeやGB18030ベースのロケールで画面が崩れてしまいますので注意が必要です。

    環境変数はコンパイル時にも設定されている必要が有ります。4GL のフルスクリーン・アプリケーションについては、GL_USEGLU を1に設定した状態で再コンパイルする必要があります。

  • Informixでの通信Logの取得方法

    Informixでの通信Log取得方法

    1.設定方法

    環境変数 SQLIDEBUG に、

        2:<ファイル名> 

    の要領で値をセットした上でクライアントアプリケーションを動かします。
    上記で指定されたファイル名(厳密には、これに一意のidを追加したもの ) の中に
    バイナリー形式でクライアント・サーバー間の通信内容が記録されます。

    Windows の ODBC, OLEDB などのアプリケーションの場合、上記環境変数を
    システム環境変数として設定しておく必要がある場合が有ります。 ( コマンドラインの
    セッション毎に設定された環境変数をアプリケーションが見ていないようなケース )

    2.内容の見方

    この内容は、Informix Dynamic Server に含まれる、

        sqliprint ( Unix / Linux ) 
        sqliprt.exe ( Windows ) 

    で表示されます。

    Windows ですと、例えば、

        set SQLIDEBUG=2:c:/temp/debugfile 

    のように設定します。

    表示は、

        sqliprint /tmp/debugfile_21423 
        ( Unix 上での実行例。ファイル名は例です。このように末尾に数値がつきます ) 

    です。

    注意!:内容の詳しい読み方は IBM ( Informix ) 門外不出です。
    が、送信内容の違いの比較程度には使用可能。
    本件は、正式なサポートが受けれない方法なので、IBM社等へ正式のルートで
    問い合わせる事は注意が必要(普通は受け付けてくれない)。

  • onconfig 設定サンプル

    Ver12.10 での運用を想定してonconfig の設定サンプル。通常のRDB(販売管理等のオンラインとバッチ混在)での使用を想定している。

    設定パラメータデフォルト値設定値サンプル備考
    1ROOTNAMErootdbs複数インスタンスを起動する場合は一意名となるようにする方が良い
    2ROOTPATH$INFORMIXDIR/tmp/demo_on.rootdbs/DB/sys/online_root特に理由が無ければ絶対PATHが望ましい
    3ROOTOFFSET0RAWディバイスを指定する場合は設定が必要
    4ROOTSIZE60000012000000運用時に拡張が発生しないサイズとする
    5MIRROR01設定が望ましい
    6MIRRORPATH$INFORMIXDIR/tmp/demo_on.root_mirror/DB2/sys/online_root_mマスタ領域と別ディバイスへ配置が望ましい
    7MIRROROFFSET0RAWディバイスを指定する場合は設定が必要
    8PHYSFILE500002000000物理LOGサイズ。この例では2GBを指定している
    9PLOG_OVERFLOW_PATH$INFORMIXDIR/tmp/opt/informix/tmp特に理由が無ければ絶対PATHが望ましい
    10PHYSBUFF128512物理LOGのバッファサイズ。極端に大きくしない方が望ましい(クラッシュ時のデータ保護)
    11LOGFILES618この例では3倍としている
    12LOGSIZE10000500000ロングトランザクションを考慮してサイズを決定する
    13DYNAMIC_LOGS2動的ログ割り当てを行う(安定性を重視する場合は”1”に変更が望ましい)
    14LOGBUFF64512論理LOGのバッファサイズ。極端に大きくしない方が望ましい(クラッシュ時のデータ保護)
    15LTXHWM70通常はデフォルトで問題無い
    16LTXEHWM80通常はデフォルトで問題無い
    17MSGPATH$INFORMIXDIR/tmp/online.log/opt/informix/tmp/online.log特に理由が無ければ絶対PATHが望ましい
    18CONSOLE$INFORMIXDIR/tmp/online.con/opt/informix/tmp/online.con特に理由が無ければ絶対PATHが望ましい
    19TBLTBLFIRST0通常はデフォルトのサイズ利用で問題無い
    20TBLTBLNEXT0通常はデフォルトのサイズ利用で問題無い
    21TBLSPACE_STATS1表領域統計情報の収集なので通常はONのまま
    22DBSPACETEMP  一時表をDB領域外とする場合に指定する
    23SBSPACETEMP 一時表をSB領域外とする場合に指定する
    24SBSPACENAME SB領域を使用する場合に指定する
    25SYSSBSPACENAME SB領域を使用する場合に指定する
    26ONDBSPACEDOWN2管理者が関与可能ならデフォルトのままが望ましい
    27SERVERNUM011変更が望ましい。同一ノード内で重複しない値にする
    28DBSERVERNAME mother一意の名称を指定する
    29DBSERVERALIASES fatherエリアス名を指定する(未指定でも可)
    30FULL_DISK_INIT0通常は変更しない事(変更してもイニシャライズ後に”0”に戻る)
    31NETYPEipcshm,1,50,CPUsqlhostsの設定と合わせる
    32LISTEN_TIMEOUT60通常はデフォルト。アタックが懸念される環境では小さい値にする
    33MAX_INCOMPLETE_CONNECTIONS1024通常はデフォルト。アタックが懸念される環境では設定値変更を検討する
    34FASTPOLL1通常はデフォルト(OS環境に依存するパラメータ)
    35NUMFDSERVERS4運用時にモニタリングして値を設定する
    36NS_CACHEhost=900,service=900,user=900,group=900通常はデフォルト。障害時の迅速な切り替え等が必要な場合は変更を検討する
    37MULTIPROCESSOR012コア以上時は”1”に変更する
    38VPCLASScpu,num=1,noageまずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    39VP_MEMORY_CACHE_KB0まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    40SINGLE_CPU_VP0通常はデフォルトのままとする
    41AUTO_TUNE1最初はデフォルト(自動調整構成)で始める。安定稼働が特に強く求められる場合は無効を検討する
    42#VPCLASS aio,num=1  設定変更する場合はコメントを外して調整する
    43CLEANERS84有効はディスクドライブ数を指定する(多くても余り悪影響は出ない)
    44AUTO_AIOVPS onconfig.stdには存在しない。VPCLASS aio の設定をする場合に変更を検討する
    45DIRECT_IO0通常はデフォルト。OS環境によっては、変更を検討する
    46LOCKS20000500000想定されるロック数を考慮して指定する。運用状況をモニタリングして最適値を決める
    47DEF_TABLE_LOCKMODEpage row行ロックを指定する。メモリに余裕が無ければ、page が望ましい
    48RESIDENT0サーバがDB専用ならデフォルトで検討する
    49SHMBASE0x10A000000L通常はデフォルト(OS環境に依存するパラメータ)
    50SHMVIRTSIZE326561422600運用時にモニタリングして値を設定する
    51SHMADD819240960運用時にモニタリングして値を設定する
    52EXTSHMADD 81928192運用時にモニタリングして値を設定する
    53SHMTOTAL0サーバがDB専用ならデフォルトで検討する
    54SHMVIRT_ALLOCSEG 0,30,3サーバがDB専用ならデフォルトで検討する
    55SHMNOACCESS サーバがDB専用ならデフォルトで検討する
    56CKPTINTVL300まずはデフォルトで始める。”30”以下には指定しない事
    57AUTO_CKPTS onconfig.stdには存在しない。通常は変更は必要としない
    58RTO_SERVER_RESTART0通常はデフォルトのままとする(無効のまま)
    59BLOCKTIMEOUT3600通常はデフォルトのままとする
    60CONVERSION_GUARD2通常はデフォルトのままとする(特殊な用途用)
    61RESTORE_POINT_DIR$INFORMIXDIR/tmp通常はデフォルトのままとする(特殊な用途用)
    62TXTIMEOUT300通常はデフォルトのままとする(2相コミットを使用する場合は変更を検討)
    63DEADLOCK_TIMEOUT60通常はデフォルトのままとする(分散トランザクションを使用する場合は変更を検討)
    64HETERO_COMMIT0通常はデフォルトのままとする(異機種間コミットを使用する場合は変更を検討)
    65TAPEDEV/dev/tapedev/DB_LOG/log/tapedevシンボリックリンクを作成して指定する
    66TAPEBLK32出力先をHDDにする場合は変更不要
    67TAPESIZE0出力先をHDDにする場合は変更不要
    68LTAPEDEV/dev/tapedev/DB_LOG/log/ltapedevシンボリックリンクを作成して指定する
    69LTAPEBLK32出力先をHDDにする場合は変更不要
    70LTAPESIZE0出力先をHDDにする場合は変更不要
    71BAR_ACT_LOG$INFORMIXDIR/tmp/bar_act.logOn-Barを使用する場合に変更を検討
    72BAR_DEBUG_LOG$INFORMIXDIR/tmp/bar_dbug.logOn-Barを使用する場合に変更を検討
    73BAR_BEBUG0On-Barを使用する場合に変更を検討
    74BAR_MAX_BACKUP0On-Barを使用する場合に変更を検討
    75BAR_RETRY1On-Barを使用する場合に変更を検討
    76BAR_NB_XPORT_COUNT20On-Barを使用する場合に変更を検討
    77BAR_XFER_BUF_SIZE31On-Barを使用する場合に変更を検討
    78RESTARTABLE_RESTOREONOn-Barを使用する場合に変更を検討
    79BAR_PROGRESS_FREQ0On-Barを使用する場合に変更を検討
    80BAR_BSALIB_PATH On-Barを使用する場合に変更を検討
    81BACKUP_FILTER On-Barを使用する場合に変更を検討
    82RESTORE_FILTER On-Barを使用する場合に変更を検討
    83BAR_PERFORMANCE0On-Barを使用する場合に変更を検討
    84BAR_CKPTSEC_TIMEOUT15On-Barを使用する場合に変更を検討
    85DD_HASHSIZE31まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    86DD_HASHMAX10まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    87DS_HASHSIZE31まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    88DS_POOLSIZE127まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    89PC_HASHSIZE31まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    90PC_POOLSIZE127まずはデフォルトで始める。運用状況をモニタリングして最適値を決める
    91PRELOAD_DLL_FILE ユーザ定義ルーチンが有る場合は指定する
    92STMT_CACHE0SQL文のキャッシュ機能を使用する場合に変更を検討
    93STMT_CACHE_HITS0SQL文のキャッシュ機能を使用する場合に変更を検討
    94STMT_CACHE_SIZE512SQL文のキャッシュ機能を使用する場合に変更を検討
    95STMT_CACHE_NOLIMIT0SQL文のキャッシュ機能を使用する場合に変更を検討
    96STMT_CACHE_NUMPOOL1SQL文のキャッシュ機能を使用する場合に変更を検討
    97USEOSTIME0小数点以下の秒数を必要とする場合に指定する
    98STACKSIZE64ユーザ定義ルーチンが有る場合は変更を検討する
    99ALLOW_NEWLINE0通常はデフォルトのままとする(分散問合せを使用する場合は変更を検討)
    100USELASTCOMMITTEDNONEonconfig.stdには存在しない。通常は変更は必要としない
    101FILLFACTOR90通常はデフォルトのままとする(大規模テーブルの場合は変更を検討)
    102MAX_FILL_DATA_PAGES0通常はデフォルトのままとする(大規模テーブルの場合は変更を検討)
    103BTSCANNERnum=1,threshold=5000・・・・通常はデフォルトのままとする(頻繁に大量のデータ削除を行う場合は変更を検討)
    104ONLIDX_MAXMEM5120通常はデフォルトのままとする(頻繁に大量の更新処理を行う場合は変更を検討)
    105MAX_PDQPRIORITY1000DSS問合せをしない(WGではサポートされない)
    106DS_MAX_QUERIES DS関連の指定値は相互に関連する。指定する場合はマニュアルを参照の事
    107DS_TOTAL_MEMORY 同上
    108DS_MAX_SCANS1048576同上
    109DS_NONPDQ_QUERY_MEM256同上
    110DATASKIP 通常運用では指定しない(使用には注意が必要なパラメータ)
    111OPTCOMPIND2コストベースを指定。古いVerからの継承を優先する場合はルールベースへ変更を検討する
    112DIRECTIVES1有効とする(実際にオプティマイザディレクティブの機能を使用しない場合でも有効で不具合は発生しない)
    113EXT_DIRECTIVES0オフのままとする
    114OPT_GOAL-1FIRST ROWSを優先(大量検索で最初の表示を優先するとか)する場合は変更を検討する
    115IFX_FOLDVIEW0オフのままとする。特定の処理で性能改善が必要となる場合は変更を検討する
    116AUTO_REPREPARE onconfig.stdには存在しない。通常は変更は必要としない
    117AUTO_STAT_MODE onconfig.stdには存在しない。通常は変更は必要としない
    118STATCHANGE10UPDATE STATISTICS の自動モードを有効にした場合に変更を検討する
    119USTLOW_SAMPLE01UPDATE STATISTICS の実行速度を優先する。データ量が多くない場合は変更しない
    120BATCHEDREAD_TABLE1通常はデフォルトのままとする(圧縮表やページを上回る行等の場合は変更を検討)
    121BATCHEDREAD_INDEX1通常はデフォルトのままとする(変更を必要とする事はほとんど無い)
    122EXPLAIN_STAT1 通常はデフォルトのままとする(変更を必要とする事はほとんど無い)
    123#SQLTRACE””通常はデフォルトのままとする(解析等を行う場合以外では設定しない)
    124#DBCREATE_PERMISSIONinformix通常はデフォルトのままとする(細かく権限を管理する場合に変更を検討する)
    125#DB_LIBRARY_PATH ””外部モジュールを使用する場合に指定する
    126IFX_EXTEND_ROLE1通常はデフォルトのままとする(変更を必要とする事はほとんど無い)
    127SECURITY_LOCALCONNECTION””通常はデフォルトのままとする(ローカル接続の権限を管理する場合に変更を検討する)
    128UNSECURE_ONSTAT””通常はデフォルトのままとする(onstatコマンドをDBSA以外のユーザへ解放する場合に変更を検討する)
    129ADMIN_USER_MODE_WITH_DBSA””通常はデフォルトのままとする(informix以外のユーザを管理者に追加する場合に変更を検討する)
    130ADMIN_MODE_USERS””通常はデフォルトのままとする(informix以外のユーザを管理者に追加する場合に変更を検討する)
    131SSL_KEYSTORE_LABEL””通常はデフォルトのままとする(DBへの接続にSSLを使用する場合は設定が必要)
    132PLCY_POOLSIZE127通常はデフォルトのままとする。運用状況をモニタリングして最適値を決める
    133PLCY_HASHSIZE31通常はデフォルトのままとする。運用状況をモニタリングして最適値を決める
    134USRC_POOLSIZE127通常はデフォルトのままとする。運用状況をモニタリングして最適値を決める
    135USRC_HASHSIZE31通常はデフォルトのままとする。運用状況をモニタリングして最適値を決める
    136SQL_LOGICAL_CHAROFF通常はデフォルトのままとする。UTF-8などを使用する場合などでは設定を検討する
    137ENCRYPT_HDR””通常はデフォルトのままとする(HDR機能を使用する場合は”1”が望ましい)
    138ENCRYPT_SMX””通常はデフォルトのままとする(HDR機能を使用する場合は”1”が望ましい)
    139ENCRYPT_CDR0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    140ENCRYPT_CIPHERS””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    141ENCRYPT_MAC””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    142ENCRYPT_MACFILE””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    143ENCRYPT_SWITCH””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    144CDR_EVALTHREADS1,2通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    145CDR_DSLOCKWAIT5通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    146CDR_QUEUEMEM4096通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    147CDR_NIFCOMPRESS0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    148CDR_SERIAL0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    149CDR_DBSPACE””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    150CDR_QHDR_DBSPACE””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    151CDR_QDATA_SBSPACE””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    152CDR_SUPPRESS_ATSRISWARN””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    153CDR_DELAY_PURGE_DTC””通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    154CDR_LOG_LAG_ACTIONddrblock通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    155CDR_LOG_STAGING_MAXSIZE0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    156CDR_MAX_DYNAMIC_LOGS0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    157CDR_TSINSTANCEID0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    158CDR_MAX_FLUSH_SIZE50通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    159CDR_AUTO_DISCOVER0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    160CDR_MEM0通常はデフォルトのままとする(ER機能を使用する場合は変更を検討する)
    161DRAUTO0通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    162DRINTERVAL30通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    163HDR_TXN_SCOPENEAR_SYNC通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    164DRTIMEOUT30通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    165HA_ALIAS””通常はデフォルトのままとする(HDR機能を使用する場合は設定を検討する)
    166HA_FOC_ORDERSDS,HDR,RSS通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    167DRLOSTFOUND$INFORMIXDIR/etc/dr.lostfound通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    168DRIDXAUTO0通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    169LOG_INDEX_BUILDS””通常はデフォルトのままとする
    170SDS_ENABLE””通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    171SDS_TIMEOUT20通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    172SDS_TEMPDBS””通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    173SDS_PAGING””通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    174SDS_LOGCHECK10通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    175SDS_ALTERNATENONE通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    176SDS_FLOW_CONTROL””onconfig.stdには存在しない
    177UPDATABLE_SECONDARY0通常はデフォルトのままとする(SD機能を使用する場合は変更を検討する)
    178FAILOVER_CALLBACK””通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    179FAILOVER_TX_TIMEOUT0通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    180TEMPTAB_NOLOG0通常はデフォルトのままとする
    181DELAY_APPLY””通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    182STOP_APPLY0通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    183LOG_STAGING_DIR””通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    184RSS_FLOW_CONTROL0通常はデフォルトのままとする(HDR機能を使用する場合は変更を検討する)
    185ENABLE_SNAPSHOT_COPY””通常はデフォルトのままとする
    186SMX_COMPRESS0通常はデフォルトのままとする(HDR等を使用する場合は変更を検討する)
    187SMX_PING_INTERVAL10通常はデフォルトのままとする(HDR等を使用する場合は変更を検討する)
    188SMX_PING_RETRY6通常はデフォルトのままとする(HDR等を使用する場合は変更を検討する)
    189CLUSTER_TXN_SCOPESERVER通常はデフォルトのままとする(HDR等を使用する場合は変更を検討する)
    190ON_RECVRY_THREADS14VPSの指定値により決定する
    191OFF_RECVRY_THREADS10VPSの指定値により決定する
    192DUMPDIR$INFORMIXDIR/tmp設定ファイルとは別媒体の指定が望ましい
    193DUMPSHMEM1出来るだけ変更しない運用とすること
    194DUMPGCORE0OS環境によっては”1”とする方が良い(Windowsでは無意味)
    195DUMPCORE0OS環境によっては”1”とする方が良い(Windowsでは無意味)
    196DUMPCNT1障害解析が必要となる場合は数を変更する
    197ALARMPROGRAM$INFORMIXDIR/etc/alarmprogram.sh/opt/informix/etc/log_full.sh特に理由が無ければ絶対PATHが望ましい
    198ALRM_ALL_EVENTS0ログをイベントトリガ等に使用する場合は変更を検討する
    199STORAGE_FULL_ALARM600,3システムの特性により変更を検討する
    200SYSALARMPROGRAM$INFORMIXDIR/etc/evidence.sh機能を使用する場合は絶対PATHで指定する(Windowsではそのままでは動かない)
    201RAS_PLOG_SPEED22727自動更新される(サポート用のパラメータ)
    202RAS_LLOG_SPEED0自動更新される(サポート用のパラメータ)
    203EILSEQ_COMPAT_MODE0出来るだけ変更しない運用とすること
    204QSTATS0必要時以外は指定しない事が望ましい
    205WSTATS0必要時以外は指定しない事が望ましい
    206USERMAPPINGOFFシステム全体のセキュリティポリシにより設定を検討する
    207SP_AUTOEXPAND1指定しても無条件に拡張が実行される訳では無い。安定稼働を最優先する場合は”0”にする事を検討する
    208SP_THRESHOLD0自動拡張を使用する場合は設定が望ましい
    209SP_WAITTIME30自動拡張を使用する場合は設定値の変更を検討する
    210AUTOLOCATE0onconfig.stdには存在しない
    211DEFAULTESCCHAR\出来るだけ変更しない運用とすること
    212#VPCLASS””3カ所にあるが有効なのは最初の指定のみで有る
    213MQSERVER””通常はデフォルトのままとする(MQメッセージ機能を使用する場合は設定する)
    214MQCHLLIB””通常はデフォルトのままとする(MQメッセージ機能を使用する場合は設定する)
    215MQCHLTAB””通常はデフォルトのままとする(MQメッセージ機能を使用する場合は設定する)
    216REMOTE_SERVER_CFG””システム全体のセキュリティポリシにより設定を検討する
    217REMOTE_USERS_CFG””システム全体のセキュリティポリシにより設定を検討する
    218S6_USE_REMOTE_SERVER_CFG0システム全体のセキュリティポリシにより設定を検討する
    219LOW_MEMORY_RESERVE0データの整合性を特に必要とするシステムでは設定を検討する(ロールバックが必ず実行される必要が有る等)
    220LOW_MEMORY_MGR0OSの動作を熟知している場合以外は指定しない事が望ましい
    221GSKIT_VERSION””暗号化やSSLを使用する場合は絶対パスで指定する
    222#VPCLASSjvp,num=1   3カ所にあるが有効なのは最初の指定のみで有る
    223JVPPROPFILE$INFORMIXDIR/extend/krakatoa/.jvpprops Javaを使用する場合に絶対PATHで指定する
    224JVPLOGFILE$INFORMIXDIR/tmp/jvp.log Javaを使用する場合に絶対PATHで指定する
    225JVPARGS-Dcom.ibm.tools.attach.enable=noJavaを使用する場合に指定する
    226JVPCLASSPATH$INFORMIXDIR/extend/・・・・・Javaを使用する場合に絶対PATHで指定する
    227BUFFERPOOLsize=2k,buffers=50000,lrus=8,・・・・・size=2k,buffers=250000,lrus=8,デフォルトでも良いがメモリに余裕が有ればバッファを増やす
    228AUTO_LRU_TUNING””0安定操作を優先させる場合は”0”を指定する
  • Informix Ver14.10の発表資料要約

    2019/5 時点での、14.10発表資料からの要点メモ。Ver12.10からの移行は注意が必要な内容が含まれる。若干、Linux環境下でのテスト版の動作検証結果も含めて記載する。

    1・現時点で提供されるプラットフォームが減少している。MACOS版の提供が無い。Solaris はintel版の提供が無い。SPARC版は提供される。
    2・Linux版は、カーネル 3.10.0-693 以降がサポート対象(基本的には)。但し、SUSE SLES 11 (カーネル 2.6.27)はサポート対象との記述が有るが、C-SDKのサポート対象には入っていない(誤記か?)。
    3・現時点で提供されるバイナリに、C-SDKは含まれない。今後、どうなるかは不明(元々、現状は、評価版との位置付け)。Verは4.50(IDS12.10は4.10)へバージョンアップされている。
    4・インストーラに変更がなされている。バイナリで提供される物が減少し、各エディションのライセンスインストーラが提供される。<-これは、複数のサーバ環境下では結構面倒になる。
    5・機能の個別削除や追加が容易になっている。ほとんどの場合、再インストールが不要となる。不具合パッチの提供等も同様と思われる。
    6・GLSで提供される言語に変更はない。
    7・ローリングアップデートの機能(DB領域をそのままでアップデートする)は提供されない。<-これは困るユーザが出るはず。
    8・管理ツールが Open Admin Tool -> Informix HQ へ変更となっている。全体の管理が出来るようにする予定と思われる。但し、現時点では全機能がリリースされていない。開発中。
    9・全体的にパフォーマンスの向上が図られている。特に、HDR、RSSについては向上している。分散環境下での利用は優位性がさらに高まった。
    10・DBの管理テーブル等は表面的には変更が無いが、内部のデータ管理等は変更されている可能性が高い。
    11・セキュリティ関連の向上が多い。インターネット上での利用を意識している。
    12・オンプレとクラウドの連携が容易になっている。例えば、バックアップやHDRのレプリカをクラウドへ取得するとかが容易。
    13・SQLの機能変更がある。スキーマで、日本語の使用が制限される可能性が有る。 <-日本語の定義自体は許容されている。
    14・ライセンス区分と制限が変更となっている。WGを使用しているユーザにとっては、リソースの制限が拡大している。
    15・今回の新バージョンにツール系の対応等は含まれて居ない。動向は不明。新C-SDKでのビルドバージョンが提供されるはず(2019/5/21時点では、提供されていない)。
    16・マニュアルは現時点で日本語の提供は無い。現時点では英語版のみ。<-これは、将来的にも期待出来ない可能性が高い。
    17・Ver12.10のdbexport結果を、Ver14.10でdbimport は問題無し。cp932 環境下での特殊文字等の振る舞いは、旧Verと同様。スキーマへの日本語も許容している。
    18・Ver7.50 I-SQL との接続は問題無し。特に不具合は感じられない。
  • Informixの情報入手先 <-2021/9/1 現在、ほとんどがLink切れ

    1. マニュアルのダウンロード
    2. デロッパーワークス
    3. FAQ(古い)
    4. ナレッジセンター
    5. インフォメーション
    6. ライフサイクル
    7. Fix list for 12.1
    8. Compare the Informix Version 12 editions – IIUG
    1. マニュアルの検索
    カテゴリカントリで日本を選択すると、日本語のマニュアルが検索出来る。
    1. IDS関連の情報ページ V14.10含む
    2. 牧さんのBlog
    3. V14.10の概要ページ
    4. C-SDK V4.50 関連の情報ページ
    5. 日本語のマニュアル ~Ver11.5まで
    6. HCLのHP ドキュメント https://informix.hcldoc.com/
    7. 豊富な情報とサポートを期待出来るサイト https://www.oninit.com/
    8. JDBCドライバーの入手先(新しい物) https://mvnrepository.com/artifact/com.ibm.informix/jdbc

    その他のメモ

    https://www.ibm.com/docs/ja/informix-servers/12.10

    https://www.ibm.com/support/pages/informix-%E8%A3%BD%E5%93%81%E3%81%AE%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E7%B5%82%E4%BA%86%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

    https://phptreasure.wordpress.com/2015/07/19/connect-to-informix-database-with-php-zend-framework/

    https://db-engines.com/en/ranking

    https://www.hcljapan.co.jp/software/news/20200910-hcl-software-releases-onedb-a-new-cloud-native-database-for-data-driven-platforms-from-edge-to-cloud/

    サポートOSの説明

    https://www.ibm.com/support/pages/informix-server-system-requirements#sol

  • 4GLのTips

    4GLの概念

    4GLのコンパイラでは、ソース(4GLの)は、以下の5段階のプロセスにより、実行形式へコンパイルされる。

    1.i4glc1

      hoge.4gl 形式のソースを hoge.4ec 形式のファイルへ変換。主に、4GL言語を分析し、C のコードを作成するステップ。

    2.i4glc2

      hoge.4ec 形式のソースを hoge.ec 形式のファイルへ変換。主に、ESQL/C 形式のコードを作成するステップ。

    3.i4glc3

      hoge.ec 形式のソースを hoge.c 形式のファイルへ変換。宣言やSQL文 も、純粋なC言語に変換するステップ。

    4.i4glc4

      変数名に非ASCII 文字を含む可能性の有るCコードを、各国対応で無い名称に変換するステップ。

    5.i4glc5

      Cコードを、オブジェクトファイルや、実行可能な形式(デフォルトは、hoge.4ge)へ変換するステップ。

    コマンドラインでの操作

    通常、コマンドラインでコンパイルを行う場合は、以下で実施する。

    $ c4gl hoge.4gl -o hoge.4ge

    -o で指定するファイル名(拡張子も含め)で、実行形式が生成される。

    この操作で、プリプロセッサ(上記の1 ~ 4 のステップ)で作成される中間ファイルは自動的に削除されます(コンパイルが失敗した場合はこの限りで無い)。

    デバッグ等で、中間ファイルの内容を確認したい場合は、“-keep” オブションを指定して実行する事により、中間ファイルを残す事が可能となる。

    $ c4gl -keep hoge.4gl -o hoge.4ge
  • Linux環境での注意点

    Linux環境での特異な環境変数

    Linux環境下では、TERMCAP の環境変数の設定が必要となる。GUI系のI/Fで有る、dbaccess 等の使用に於いても必要となるので、設定をしておく事が望ましい。

    TERMCAP=$INFORMIXDIR/etc/termcap
    export TERMCAP

    OS(や使用するshell)によっては、TERMINFO の設定となる場合も有る。

    4GL等を使用する上での必要なライブラリ

    4GL(やESQL/C)を使用する上では、gcc と カーシス のライブラリの導入が必要。CentOS等ではデフォルトでは導入されないので、追加で導入を行う。

    # yum install gcc

    導入結果のサンプルは以下。

    # rpm -qa | grep cc
    libgcc-4.4.7-11.el6.x86_64
    gcc-4.4.7-11.el6.x86_64
    abrt-addon-ccpp-2.0.8-21.el6.centos.x86_64
    psacct-6.3.2-63.el6_3.3.x86_64
    libpciaccess-0.13.1-2.el6.x86_64
    libgcc-4.4.7-11.el6.i686
    perl-Object-Accessor-0.34-136.el6.x86_64

    カーシスは以下。

    # yum install ncurses-devel

    導入結果のサンプル

    # rpm -qa | grep ncurses
    ncurses-devel-5.7-3.20090208.el6.x86_64
    ncurses-base-5.7-3.20090208.el6.x86_64
    ncurses-libs-5.7-3.20090208.el6.x86_64
    ncurses-5.7-3.20090208.el6.x86_64
  • 環境変数の設定

    環境変数の設定

    サーバ側で、最低設定が必要となる環境変数は以下の変数となる。

    INFORMIXDIR
    PATH
    INFORMIXSERVER
    DBLANG
    DB_LOCALE
    SERVER_LOCALE
    CLIENT_LOCALE

    INFORMIXDIR

    Informixを導入したディレクトリを指定する。

    INFORMIXDIR=/opt/informix

    PATH

    サーチパスへ、Informix を追加する。

    PATH=$PATH:$INFORMIXDIR/bin

    INFORMIXSERVER

    サーバ名称を指定する。ここで指定したサーバへ、まず接続を試みる。

    INFORMIXSERVER=test

    onconfig で指定したサーバ名と同一で有る事。

    DBLANG

    Informixのプロダクトが動作時に使用するロケール

    DB_LOCALE

    データベースのロケール(実際に格納される場合のロケール)

    SERVER_LOCALE

    サーバ上で使用するロケール(ログとかの出力で使用される)

    CLIENT_LOCALE

    ユーザ(クライアント)で使用するロケール

    ロケールの設定方法

    ロケールは通常、以下の書式で設定する。

    DB_LOCALE=ja_jp.sjis-s

    この設定で指定する内容と意味については、以下で確認出来る。

    glfiles 

    を実行して、出力されるファイルの内容を確認する。

    ※1:Ver12.* 以降では、上記で出力される形式が変更されている。例えば以下。

    ja_jp.utf8 -> ja_jp.57372

    実際の設定は、どちらの形式で指定しても有効に機能する。

    ※2:ロケールに対する検索は、実際に動作する時に実施される。指定内容が間違っている場合でも、すぐにエラーとなる訳では無いので、特にDBのイニシャライズ等の時には注意をする事。

  • はじめに

    はじめに

    Informixは、リレーショナルデータベースの機能を提供する製品で、現在は、IBM社が提供しています。

    残念ながら、日本語でのサポートは、2017/11/30 で終了し、日本IBM社のサポート部隊も無くなっています。

    ライセンスは、現在でも入手が可能で、保守契約を継続する事も可能ですが、昔のような手厚いサポートを期待する事は難しくなっています(英語を苦にしない方は別)。

    2019/7/1 よりは、実質的にHCLテクノロジーズ社が業務を引き継いでおり、情報の発信も含めて、HCL社の情報が主体になっています。(2020年にHCLの日本法人に問い合わせした時には、日本での技術者は居ないとの事(海外から呼び寄せは可能(今は無理か?))でした)

    製品としての出来は今でも一流だと思いますが(特に、リモート環境でのDBの同期とかはBestだと思います)、日本では使いづらい状況です。

    製品は、エンジン部分と、ツール類で構成されます。

     ・エンジン部分は、データベースを管理する機能で、最新は、Ver14.1です。

     ・ツール部分は、SQL、4GL、C/SDK 等で、主にユーザアプリを作成する為の機能を提供します。

    バージョンの見方

    Informixを導入したディレクトリ配下へ($INFORMIXDIR/etc 配下)、***-cr ファイルが作成されます。この内容を確認する事で、導入されているInformixのバージョンを確認出来ます。

    <例>

    cat IIF-cr IBM Informix Dynamic Server Version 12.10.FC3TL Copyright (C) 1986-2014 IBM Corporation, All rights reserved

    上記の

    12.10.FC3TL

    部分がバージョンを表しています。見方は以下です。

    12:メジャーリリース番号

    1:エンハンスリリース番号

    0:メンテナンスリリース番号

    F:プラットフォーム種別

     U:UNIX(32bit)  F:UNIX(64bit)  D:DOS  T:Windows製品(旧)  H:HP-UX(32bit)  J:Java  M:OSに依存しない製品

    C:改善版の版数を示す

    3:版数番号

    TL:評価版である事を示す

    この他、以下の表記が有ります。

    X2等:バッチ版等

    W1等:限定提供等