⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onlog1.sh.txt

📁 管理online的shell程序
💻 TXT
字号:
#!/usr/bin/ksh#################################################################################       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.tmp1TMP2=onlog1.tmp2TMP3=onlog1.tmp3EXCLUDE="BEGIN|COMMIT|CHALLOC|CKPOINT|BEGCOM|CHFREE"HEADING1="addr     len  type     xid      id link"rm -f $TMP1rm -f $TMP2rm -f $TMP3echo "The current logical log is:"onstat -l | grep "U\-\-\-C\-"LAST=`onstat -l | grep "U\-\-\-C\-" | cut -c26-36`LAST=`expr $LAST + 0`echoecho "The last logical log number is: $LAST"echoecho "Enter logical log id to scan, or press <Enter> to use default of $LAST"read answerif [ "${answer}x" = "x" ]then	LOGID=$LASTelse	LOGID=${answer}fiif [ $LOGNAME = informix ]then	#OPT_LONG="-l"	OPT_LONG=""else	OPT_LONG=""fiwhile truedo	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	fidonerm -f $TMP1echoecho "Press <Enter> to continue"read answerwhile truedo	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="Pre-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="Part 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		}	}}################################################################################# 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		}	}}################################################################################# 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 = "PARTNUM " 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 | pg	PREVID=`expr $LOGID \- 1`	NEXTID=`expr $LOGID + 1`	while true	do		echo		echo "Enter <P>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	fidonerm -f $TMP3

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -