📄 extent2.sh.txt
字号:
#!/usr/bin/ksh################################################################################# Module: extent2.sh# Author: Peter R. Schmidt# Description: Report on table size for an online engine database## Change Log## Date Name Description.................# 02/21/98 Peter R. Schmidt Start Program # 07/08/99 Peter R. Schmidt Make Improvements# 07/29/99 Peter R. Schmidt Total Allocated and Used################################################################################OUTPUT=extent2.outTMPFILE=extent2.tmpPAGESIZE=2BG=false###############################################################################if [ $# != 0 ]then ARG1=$1 case $ARG1 in 1|2|3|4) OPTION1=$ARG1;; *) OPTION1=2;; esac ARG2=$2 case $ARG2 in 1|2|3) OPTION2=$ARG2;; *) OPTION2=1;; esac BG=trueelse clear while true do echo "Report on table sizes for an Informix online engine database" echo echo "1 = Size (allocated)" echo "2 = Number of extents" echo "3 = Table name" echo "4 = Free Space" echo "0 = Exit this program" echo echo "Enter sort sequence desired (0,1,2,3,4)" read OPTION1 case $OPTION1 in 0|1|2|3|4) break;; esac echo echo "Error - you must enter 0,1,2,3 or 4!" echo done while true do echo echo "1 = Report in Megs" echo "2 = Report in Kbytes" echo "3 = Report in Pages" echo "0 = Exit this program" echo echo "Enter reporting unit desired (0,1,2,3)" read OPTION2 case $OPTION2 in 0|1|2|3) break;; esac echo echo "Error - you must enter 0,1,2 or 3!" echo done ficase $OPTION1 in 0) echo "End requested by user"; exit;; 1) SORT=14; ORDER=desc; ORDERBY=Size;; 2) SORT=9; ORDER=desc; ORDERBY=Extents;; 3) SORT=2; ORDER=asc; ORDERBY=Tablename;; 4) SORT=npfree; ORDER=desc; ORDERBY=Free-Space;;esaccase $OPTION2 in 0) echo "End requested by user"; exit;; 1) UNIT=M; UNITDESC=Mbytes;; 2) UNIT=K; UNITDESC=Kbytes;; 3) UNIT=P; UNITDESC=Pages;;esacif [ -f $OUTPUT ]then rm -f $OUTPUTfiif [ -f $TMPFILE ]then rm -f $TMPFILEfiecho "Collecting extent info from the sysmaster database..." dbaccess << EOFdatabase sysmaster;unload to '$TMPFILE' delimiter "|"select systabnames.dbsname, systabnames.tabname, sysptnhdr.*, (nptotal - npused) npfreefrom systabnames, sysptnhdrwhere systabnames.partnum = sysptnhdr.partnum and systabnames.dbsname <> "sysmaster" and systabnames.dbsname <> "sysutils" and systabnames.tabname <> "TBLSpace"order by $SORT $ORDER;EOFecho "unload completed"XDATE=`date +%D-%T`echo echo "Completed - formatting report..."echoawk ' \################################################################################# Module: extent2.awk# Author: Peter R. Schmidt# Description: Report on table size for an online engine database# Called by: extent2.sh## Expected variables passed at runtime:## pagesize Informix Page Size# xdate Todays date, format: mm/dd/yy-hh:mm:ss# orderby Sort Order description# unit Reporting Unit (M/K/P)## Expected Input: Pipe Delimited file with the following fields## database name# table name# sysptnhdr.* # pages free## Change Log## Date Name Description.................# 02/21/98 Peter R. Schmidt Start Program # 07/08/99 Peter R. Schmidt Make Improvements################################################################################# INITIALIZE VARIABLES AT BEGINNINGBEGIN { cntline=6 pageno=1 overflow=55}################################################################################ FIRST LINE ONLY{if (NR == 1) { split (xdate,b,"-") udate=b[1] utime=b[2] printf "\n" printf "%s %s Informix Table Size Report (Numbers in %s) Page: %d\n", udate, utime, unitdesc, pageno printf "\n" print " % First Next # of " print "Allocated Free Free Used Extent Extent Extents dbs:table\n" }}################################################################################ ON EVERY LINE{ split ($1,a,"|") dbs=a[1] table=a[2] extents=a[9] fextsiz=a[12] nextsiz=a[13] alloc=a[14] used=a[15] data=a[16] unused1=a[5] free = (alloc - used); nondata = (used - data); alloc_K=alloc*pagesize free_K=free*pagesize used_K=used*pagesize fextsiz_K=fextsiz*pagesize nextsiz_K=nextsiz*pagesize alloc_M=alloc_K/1024 free_M=free_K/1024 used_M=used_K/1024 fextsiz_M=fextsiz_K/1024 nextsiz_M=nextsiz_K/1024 tot_alloc_P += alloc tot_alloc_K += alloc_K tot_alloc_M += alloc_M tot_free_P += free tot_free_K += free_K tot_free_M += free_M tot_used_P += used tot_used_K += used_K tot_used_M += used_M tot_extents += extents perfree = 0; if (alloc > 0) { perfree = ((free / alloc) * 100) } if (extents > maxextents) { maxextents = extents maxtable = table } if (unit == "M") { printf "%8.1f %7.1f %5.1f %8.1f %7.1f %7.1f %6d %s:%s\n", alloc_M, free_M, perfree, used_M, fextsiz_M, nextsiz_M, extents, dbs, table } if (unit == "K") { printf "%8d %7d %5.1f %8d %7d %7d %6d %s:%s\n", alloc_K, free_K, perfree, used_K, fextsiz_K, nextsiz_K, extents, dbs, table } if (unit == "P") { printf "%8d %7d %5.1f %8d %7d %7d %6d %s:%s\n", alloc, free, perfree, used, fextsiz, nextsiz, extents, dbs, table } cntline++}################################################################################ TOP OF PAGE{if (cntline == overflow) { pageno++ printf "\f\n" printf "%s %s Informix Table Size Report (Numbers in %s) Page: %d\n", udate, utime, unitdesc, pageno printf "\n" print " % First Next # of " print "Allocated Free Free Used Extent Extent Extents dbs:table\n" cntline=6 }}################################################################################ ON LAST LINEEND { perfree = 0; if (tot_alloc_P > 0) { perfree = ((tot_free_P / tot_alloc_P) * 100) } printf "\n" if (unit == "M") { printf "%8.1f %7.1f %5.1f %8.1f %6d\n", tot_alloc_M, tot_free_M, perfree, tot_used_M, tot_extents } if (unit == "K") { printf "%8d %7d %5.1f %8d %6d\n", tot_alloc_K, tot_free_K, perfree, tot_used_K, tot_extents } if (unit == "P") { printf "%8d %7d %5.1f %8d %6d\n", tot_alloc_P, tot_free_P, perfree, tot_used_P, tot_extents } printf "\n" printf "Number of tables: %d\n",NR printf "Highest number of extents: %d (%s)\n", maxextents, maxtable printf "Using Informix pagesize of: %d K\n", pagesize printf "Sorted by: %s\n", orderby printf "Reporting Unit %s\n", unitdesc printf "\n"}################################################################################ END OF AWK SCRIPT' \pagesize=$PAGESIZE \xdate=$XDATE \orderby=$ORDERBY \unit=$UNIT \unitdesc=$UNITDESC \$TMPFILE > $OUTPUT if [ $BG = false ]then pg $OUTPUTfirm -f $TMPFILEechoecho "Note: Output report is in $OUTPUT"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -