使用用户出口程序使日志文件归档和检索自动进行 通过创建 DB2?数据库管理器调用来执行归档或检索操作的用户出口程序,可以自动执行日志文件归档和检索。 当 DB2 数据库管理器调用用户出口程序时,会执行下列操作: 数据库管理器将控制权交给用户出口程序; 数据库管理器将参数传递给用户出口程序;并且 在完成时,用户出口程序再将返回码发送回数据库管理器。 DB2系统本身带的是 C 语言的,并且比较复杂,还编译不过,研究参数之后 想办法 写了一个简单的 bash shell 脚本的
需要把脚本 db2uext2 在 root 下复制到 /home/db2inst1/sqllib/bin/ 目录下 并且修改权限,不知道不改能不能用,反正改改吧 chown bin:bin db2uext2 chmod 755 db2uext2
然后修改数据库配置 db2 get db cfg for DBNAME | grep LOGARCH db2 update db cfg for DBNAME using LOGARCHMETH1 USEREXIT 然后重启数据库生效
目前只实现了存档功能ARCHIVE,没有实现恢复功能,数据库恢复时靠指定日志路径进行恢复 - #!/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 -> $RHOSTRPATH"
ssh $RHOST mkdir -p $RPATH >> $LOG
rsync -q -auPv $LFILE $RHOSTRPATH >> $LOG
rm $LFILE
#echo $message
echo $message >> $LOG
else
echo RESTORE
fi
|