免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4894 | 回复: 6
打印 上一主题 下一主题

ONLOG查看到的逻辑日志怎么看不懂呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-19 13:58 |只看该作者 |倒序浏览
哪位大侠讲一下日志的格式吧!!

论坛徽章:
0
2 [报告]
发表于 2004-03-20 21:08 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
11
数据库技术版块每日发帖之星
日期:2016-06-25 06:20:00数据库技术版块每日发帖之星
日期:2016-06-24 06:20:00数据库技术版块每日发帖之星
日期:2016-05-03 06:20:00数据库技术版块每日发帖之星
日期:2016-04-21 06:20:00数据库技术版块每日发帖之星
日期:2016-01-23 06:20:00数据库技术版块每日发帖之星
日期:2015-12-03 06:20:00综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-19 06:20:00数据库技术版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2016-07-30 06:20:00
3 [报告]
发表于 2004-03-23 09:34 |只看该作者

ONLOG查看到的逻辑日志怎么看不懂呢?

很复杂~~~~
有几百个类型~~~

论坛徽章:
0
4 [报告]
发表于 2006-06-12 19:31 |只看该作者
我想请问下,如果我在 下午3点删除了某章表,可以用onlog读出我删除的时间点吗?

论坛徽章:
0
5 [报告]
发表于 2006-06-13 10:08 |只看该作者
onlog出来的东东比较难读懂,基本上属于天书类型

论坛徽章:
0
6 [报告]
发表于 2006-06-13 10:20 |只看该作者
那怎么象oracle一样,能从 日志中 读出表被drop的时间?

论坛徽章:
0
7 [报告]
发表于 2008-02-18 14:31 |只看该作者
以前看到的sh

#!/usr/bin/ksh
#for HPUX and IDS94
###############################################################################
#
#       Module:         onlog1.sh.sh
#       Author:         Peter R. Schmidt
#       Description:    Persue the Infomrix logical log
#
#       Change Log
#
#         Date    Name               Description.................
#       11/22/00  Peter R. Schmidt   Start Program
#
###############################################################################

TMP1=onlog1.tmp1
TMP2=onlog1.tmp2
TMP3=onlog1.tmp3

EXCLUDE="BEGIN|COMMIT|CHALLOC|CKPOINT|BEGCOM|CHFREE"
HEADING1="addr     len  type     xid      id link"

rm -f $TMP1
rm -f $TMP2
rm -f $TMP3

echo "The current logical log is:"
onstat -l | grep "U\-\-\-C\-"

#LAST=`onstat -l | grep "U\-\-\-C\-" | cut -c26-36`
LAST=`onstat -l | grep "U\-\-\-C\-" | awk '{print $4}'`
LAST=`expr $LAST + 0`

echo
echo "The last logical log number is: $LAST"

echo
echo "Enter logical log id to scan, or press <Enter>; to use default of $LAST"
read answer

if [ "${answer}x" = "x" ]
then
        LOGID=$LAST
else
        LOGID=${answer}
fi

if [ $LOGNAME = informix ]
then
        #OPT_LONG="-l"
        OPT_LONG=""
else
        OPT_LONG=""
fi

while true
do
        echo
        echo "Enter the name of the Informix table you are interested in (or 'ALL' for all tables):"
        read TABLENAME

        if [ "${TABLENAME}x" = "x" ]
        then
                TABLENAME=all
                echo "Default to ALL tables"
        fi

        TABLENAME=`echo $TABLENAME | tr "[A-Z]" "[a-z]"`        # Convert to lower case

        if [ $TABLENAME = all ]
        then
                OPT_TABLE=""
                SELECT_ROW=0

                echo
                echo "Unload list of available tables from the database for later reference..."

                dbaccess sysmaster <<EOF
                unload to $TMP3
                select dbsname, tabname, partnum
                from systabnames
                order by dbsname, tabname;
EOF

                break
        fi

        if [ "${OSADBNAME}x" = "x" ]
        then
                echo
                echo "Enter Database Name"
                read DATABASE
        else
                DATABASE=$OSADBNAME
        fi
        
        echo
        echo "Database is: $DATABASE"

        dbaccess sysmaster <<EOF
        unload to $TMP1
        select partnum from systabnames where dbsname = "$DATABASE" and tabname = "$TABLENAME";
EOF

        CNT=`cat $TMP1 | wc -l`

        if [ -s $TMP1 -a $CNT = 1 ]
        then
                PARTNUM=`cut -d"|" -f1 $TMP1`
                echo
                echo "Table $TABLE partnum = $PARTNUM"
                OPT_TABLE="-t $PARTNUM"

                echo
                echo "Enter specific row ID to select (or <enter>; for all rows)."
                read SELECT_ROW
        
                if [ "${SELECT_ROW}x" = "x" ]
                then
                        SELECT_ROW=0
                fi

                break
        else
                echo
                echo "Invalid table name - please try again!"
                continue
        fi

done

rm -f $TMP1

echo
echo "ress <Enter>; to continue"
read answer

while true
do
        echo
        echo "Scanning logical log: $LOGID"
        echo

        onlog -n $LOGID $OPT_TABLE $OPT_LONG | egrep -v "^$" | grep -v "$HEADING1" |\
awk '
{
        if (NR == 1) {
                if (tablename == "all" {
                        while ((getline line < tablelistfile) > 0) {
                                split (line,a,"|"
                                       a_dbsname=a[1]
                                       a_tablename=a[2]
                                       a_partnum=a[3] ""        # Append null to force value to be a string

                                value=(a_dbsname ":" a_tablename)

                                # printf "Debug: dbsname=%s, tablename=%s, partnum=%s\n", a_dbsname, a_tablename, a_partnum
                                # printf "Debug: value=%s\n", value

                                part_num_array[a_partnum] = value

                        }
                          close(tablelistfile)
                        # For debugging - list entire contects of array
                        # for (x in part_num_array) {
                        #        printf "key=%s, value=%s\n",x, part_num_array[x]
                        # }
                }
        }
}

/^INFORMIX-OnLine  Logical Log display/         { next }
/^Software Serial Number/                           { next }
/^Copyright \(C\)/                                 { next }
/^log number:/                                        { next }

/^Program failed/ {
        print "Error: onlog failed to run\n"
        exit
}                                       

/BEGIN/ {
        BEGIN_ID=$1
        BEGIN_DATE=$7
        BEGIN_TIME=$8
        USER_ID=$10

        LAST_ID=BEGIN_ID

        next
}

#-------------------------------------------------------------------------------

/HUPDAT/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_FORWARD_PTR=$9
        D_OLD_SLOT=$10
        D_NEW_SLOT=$11
        D_NUM_PIECES=$12

        D_DESC="Home row update"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}

#-------------------------------------------------------------------------------

/BTSHUFFL/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_LOGICAL_PAGE=$9
        D_KEYNUM=$10
        D_KEYLEN=$11

        D_DESC="Shuffle B-Tree node"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/BTMERGE/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_LOGICAL_PAGE=$9
        D_KEYNUM=$10
        D_KEYLEN=$11

        D_DESC="Merge B-Tree node"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/ADDITEM/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_LOGICAL_PAGE=$9
        D_KEYNUM=$10
        D_KEYLEN=$11

        D_DESC="Add item to index"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/PTEXTEND/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_LAST_LOGICAL=$8
        D_FIRST_LOGICAL=$8

        D_DESC="Extend partition"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/BTSPLIT/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_PARENT_LOGICAL=$9
        D_LEFTLOGICAL=$10
        D_RIGHTLOGICAL=$11
        D_INFINITY=$12
        D_ROOTLEFT=$13
        D_MIDSPLIT=$14
        D_KEYNUM=$15
        D_KEYLEN=$16

        D_DESC="Split B-tree node"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/UNIQID/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_UNIQUE_ID=$8

        D_DESC="New serial ID"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/CINDEX/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="Create index"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next

}
        
#-------------------------------------------------------------------------------

/BLDCL/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="Build tblspace"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/PERASE/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="re-erase old file"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/ERASE/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="Drop tblspace"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/HDELETE/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="Home row delete"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/CLR/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=""

        D_DESC="art of a rollback"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        

#-------------------------------------------------------------------------------

/ROLLBACK/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=""

        D_DESC="Rollback work"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/DELITEM/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)

        D_DESC="Delete item from index"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------

/HINSERT/ {
        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8
        D_SLOTNUM=$9

        D_DESC="Home row insert"

        print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID)

        LAST_ID=D_ADDR

        next
}
        
#-------------------------------------------------------------------------------
#        skip certain types
#-------------------------------------------------------------------------------

/COMMIT|CHALLOC|CKPOINT|BEGCOM|CHFREE/ { next }

#-------------------------------------------------------------------------------
#        Default logic for unregistered types
#-------------------------------------------------------------------------------

{

        D_ADDR=$1
        D_LEN=$2
        D_TYPE=$3
        D_XID=$4
        D_ID=$5
        D_LINK=$6

        D_TABLENAME=hex_partnum2tablename($7)
        D_ROWID=$8

        D_DESC = "UNREGISTERED TYPE"

        DECIMAL_ROWID = hex2dec(D_ROWID)        # Convert rowid from hex to decimal
        STR_ROWID = sprintf ("%d", DECIMAL_ROWID) # Convert to string

        if (select_row == 0 || select_row == STR_ROWID) {
                if (D_LINK == LAST_ID) {
                        printf "%-8s ID=%-5s PARENT=%-6s ROW=%-5s %s %s\n", D_TYPE, D_ADDR, D_LINK, STR_ROWID, D_TABLENAME, D_DESC
                } else {
                        printf "%-8s ID=%-5s PARENT=%-6s ROW=%-5s %s %s NEW TRANSACTION\n", D_TYPE, D_ADDR, D_LINK, STR_ROWID, D_TABLENAME, D_DESC
                }
                #fflush();
        }

}

################################################################################
# Display an item - version 1
#

function print_item1(D_TYPE, D_TABLENAME, D_ADDR, D_LINK, D_ROWID, D_DESC, LAST_ID) {

        DECIMAL_ROWID = hex2dec(D_ROWID)        # Convert rowid from hex to decimal
        STR_ROWID = sprintf ("%d", DECIMAL_ROWID) # Convert to string

        if (select_row == 0 || select_row == STR_ROWID) {
                if (D_LINK == LAST_ID) {
                        printf "%-8s ID=%-5s PARENT=%-6s ROW=%-8s %s %s %s %s %s\n", D_TYPE, D_ADDR, D_LINK, STR_ROWID, BEGIN_DATE, BEGIN_TIME, USER_ID, D_TABLENAME, D_DESC
                } else {
                        printf "%-8s ID=%-5s PARENT=%-6s ROW=%-8s %s %s %s %s %s NEW TRANSACTION\n", D_TYPE, D_ADDR, D_LINK, STR_ROWID, BEGIN_DATE, BEGIN_TIME, USER_ID, D_TABLENAME, D_DESC
                }
                #fflush()
        }

}

################################################################################
# Convert a hex partition number into a Informix tablename string
#

function hex_partnum2tablename(HEX_PARTNUM) {

        if (tablename != "all" {
                return tablename
        }

        DEC_INT_PARTNUM=hex2dec(HEX_PARTNUM)
        # printf "Convert %s to %s\n", HEX_PARTNUM, DEC_INT_PARTNUM

        STR_PARTNUM = sprintf ("%d", DEC_INT_PARTNUM)
        # printf "STR_PARTNUM=%s\n", DEC_STR_PARTNUM

        L_TABLENAME=part_num_array[STR_PARTNUM]
        # printf "L_TABLENAME=%s\n", L_TABLENAME

        if (L_TABLENAME == "" {
                L_TABLENAME = "ARTNUM " STR_PARTNUM
        }

        return L_TABLENAME
}

################################################################################
# returns decimal value of hex string S, or -1 on invalid input
#
function hex2dec(s,n,i,j,h) {
        s = tolower(s)
        n = length(s)
        for (i=1; i<=n; i++) {
                j = index("0123456789abcdef", substr(s, i, 1))
                if (j == 0)
                        return -1;
                h = h*16 + j-1
        }
        return h
}

################################################################################
# returns hexstring representation of decimal N
#
function dec2hex(n,hex) {
        do {
                #hex = substr("0123456789abcdef", n%16+1, 1) hex
                hex = substr("0123456789ABCDEF", n%16+1, 1) hex
                n = int(n/16)
        } while (n)
        return hex
}

################################################################################

' tablename=$TABLENAME tablelistfile=$TMP3 select_row=$SELECT_ROW |more
        PREVID=`expr $LOGID \- 1`
        NEXTID=`expr $LOGID + 1`

        while true
        do
                echo
                echo "Enter <>;revious, <N>;ext (or <Enter> for next, <S>; for same log (or Q to quit)"
                read answer

                if [ "${answer}x" = "x" ]
                then
                        LOGID=$NEXTID
                        break
                fi

                case $answer in
                        P|p) LOGID=$PREVID; break;;
                        N|n) LOGID=$NEXTID; break;;
                        S|s) break;;
                        *)   LOGID=0; break;;
                esac
        done

        if [ $LOGID = 0 ]
        then
                break
        fi

done

rm -f $TMP3
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP