DB 2ログファイルファイリングスクリプトdb 2 uext 2のbashellはユーザー輸出USEREXITを実現します.


久しぶりに文を送りました.一つ送ります.
公式文書を参照:http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.ha.doc%2Fdoc%2Fc0024701.html
 
ユーザ輸出プログラムを使ってログファイルを保存したり検索したりして自動的に行います.
DB 2を作成することにより® データベースマネージャがアーカイブまたは検索を実行するために呼び出したユーザ輸出プログラムは、ログファイルのアーカイブと検索を自動的に実行することができます.
DB 2データベースマネージャがユーザ輸出プログラムを呼び出すと、以下の操作が行われます.
データベースマネージャはコントロールをユーザーの輸出プログラムに渡します.データベースマネージャはパラメータをユーザー輸出プログラムに伝えます.完了すると、ユーザ輸出プログラムは、リターンコードをデータベースマネージャに送ります.DB 2システム自体はC言語であり、複雑でコンパイルされていますが、パラメータを研究してから簡単なbash shellスクリプトを書いたのです.
スクリプトをrootの下にコピーする必要があります. /ホーム/db 2 inst 1/sqllib/bin/ディレクトリ下
そして権限を改正して、変更しないと使えないかどうか分かりません.とにかく変更しましょう.
chown bin:bin db 2 uext 2
chmod 755 db 2 uext 2
データベースの設定を変更します.
db 2 get db cfg for DBNAME_grep LOGARCH
db 2 udate db cfg for DBNAME  using LOGARCHMETH 1 USEREXIT
そしてデータベースを再起動すると有効になります.
現在はアーカイブ機能のARCHIVEのみを実現していますが、復旧機能は実現されていません.データベースの復旧は指定されたログパスで回復します.
db 2 uext 2スクリプトファイルの内容
#!/bin/bash
#db2uext2 -OSLinux -RLSQL07020 -RQARCHIVE -DBDBNAME -NN0 -LP/data/archlog/ -LNS0000123.LOG
#copy archived log file to remote host, do not delete local log file!!!
#do not delete local log file!!!

RHOST=192.168.0.180
RROOT=/data/backup/

LROOT=/data/archlog/

DIR=/opt/admin/db2
LOG=$DIR/log/archive-log.log

RQ=""
DB=""
LP=""
LN=""

for arg in "$@"
do
    opt=${arg:1:2}
    val=${arg:3}

    if   [ "$opt" = "RQ" ]; then
        RQ="$val"
    elif [ "$opt" = "DB" ]; then
        DB="$val"
    elif [ "$opt" = "LP" ]; then
        LP="$val"
    elif [ "$opt" = "LN" ]; then
        LN="$val"
    fi
done

now=`date +'%Y-%m-%d %H:%M:%S'`
today=`date +%Y-%m-%d`

LPATH=$LROOT$DB/archlog/
LFILE=$LPATH$LN

if [ "$RQ" = "ARCHIVE" ]; then
    if [ ! -d $LPATH ]; then
        echo create local archive log path $LPATH
        mkdir -p $LPATH >> $LOG
    fi

    scp $LP$LN $LPATH  >> $LOG

    RPATH=$RROOT$DB/$today/archlog

    message="$now move $LFILE -> $RHOST:$RPATH"

    ssh $RHOST mkdir -p $RPATH >> $LOG
    rsync -q -auPv $LFILE $RHOST:$RPATH >> $LOG

    rm $LFILE

    #echo $message
    echo $message >> $LOG
else
    echo RESTORE
fi