return to PRS Technologies website


extent1.sh
#!/usr/bin/ksh ############################################################################### # # Module: extent1.sh # Author: Peter R. Schmidt # Description: Report on database size for an online engine database # # Change Log # # Date Name Description................. # 02/17/98 Peter R. Schmidt Start Program # 07/07/99 Peter R. Schmidt Updated # 07/27/99 Peter R. Schmidt Updated # 08/18/05 Peter R. Schmidt exclude table "TBLSpace" # ############################################################################### OUTPUT=extent1.out TMPFILE=extent1.tmp PAGESIZE=2 BG=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|4) OPTION2=$ARG2;; *) OPTION2=2;; esac BG=true else tput clear while true do echo "Report on extent sizes for an Informix online engine database" echo echo "Specify Order" echo echo "1 = Size" echo "2 = Number of extents" echo "3 = Table name" echo "4 = Database/Table name" echo "0 = Exit this program" echo echo "Enter sort sequence desired (0,1,2,3 or 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 "4 = Report in Bytes" echo "0 = Exit this program" echo echo "Enter reporting unit desired (0,1,2,3,4)" read OPTION2 case $OPTION2 in 0|1|2|3|4) break;; esac echo echo "Error - you must enter 0,1,2,3 or 4!" echo done fi case $OPTION1 in 0) echo "End requested by user"; exit;; 1) SORT="4"; ORDER=desc; ORDERBY=Size;; 2) SORT="3"; ORDER=desc; ORDERBY="Number-of-Extents";; 3) SORT="2"; ORDER=asc; ORDERBY=Tablename;; 4) SORT="1,2"; ORDER=asc; ORDERBY="Database/Tablename";; esac case $OPTION2 in 0) echo "End requested by user"; exit;; 1) UNIT=M; UNITDESC=Mbytes;; 2) UNIT=K; UNITDESC=Kbytes;; 3) UNIT=P; UNITDESC=Pages;; 4) UNIT=B; UNITDESC=Bytes;; esac if [ -f $OUTPUT ] then rm -f $OUTPUT fi if [ -f $TMPFILE ] then rm -f $TMPFILE fi echo "Collecting extent info from the sysmaster database..." dbaccess << EOF database sysmaster; unload to '$TMPFILE' delimiter "|" select dbsname, tabname, count(*) num_of_extents, sum(pe_size) total_size from systabnames, sysptnext where partnum = pe_partnum and partnum > 99 and dbsname <> "sysmaster" and tabname <> "TBLSpace" --and dbsname <> "rootdbs" group by 1,2 order by $SORT $ORDER; EOF echo "unload completed" XDATE=`date +%D-%T` echo echo "Completed - formatting report..." echo awk ' \ ############################################################################### # # Module: extent1.awk # Author: Peter R. Schmidt # Description: Report on database size for an online engine database # Called by: extent1.sh # # Expected variables passed at runtime: # # pagesize Informix Page Size # xdate Todays date, format: mm/dd/yy-hh:mm:ss # orderby Sort Order description # # Expected Input: Pipe Delimited file with the following 4 fields # # database name # table name # number of extents # number of pages # # Change Log # # Date Name Description................. # 02/17/98 Peter R. Schmidt Start Program # 07/07/99 Peter R. Schmidt Updated # 07/27/99 Peter R. Schmidt Updated # ############################################################################### # INITIALIZE VARIABLES AT BEGINNING BEGIN { cntline=5 pageno=1 maxextents=0 } ############################################################################### # FIRST LINE ONLY { if (NR == 1) { split (xdate,b,"-") udate=b[1] utime=b[2] printf "%s %s Informix Extents Report Page: %d\n", udate, utime, pageno printf "\n" printf " Number of Size in\n" printf "DBS:Table Name Extents %s \n", unitdesc printf "\n" } } ############################################################################### # ON EVERY LINE { split ($1,a,"|") dbs=a[1] table=a[2] num_extents=a[3] size_P=a[4] size_K=size_P*pagesize size_M=size_K/1024 size_B=size_K*1024 tot_P += size_P tot_K += size_K tot_M += size_M tot_B += size_B if (num_extents > maxextents) { maxextents = num_extents maxdbs = dbs maxtable = table } dbs_table = dbs ":" table if (unit == "M") { printf "%-30s %3d %10.2f\n", dbs_table, num_extents, size_M } if (unit == "K") { printf "%-30s %3d %10d\n", dbs_table, num_extents, size_K } if (unit == "P") { printf "%-30s %3d %10d\n", dbs_table, num_extents, size_P } if (unit == "B") { printf "%-30s %3d %10d\n", dbs_table, num_extents, size_B } cntline++ } ############################################################################### # TOP OF PAGE { if (cntline == 60) { pageno++ printf "\f\n" printf "%s %s Informix Extents Report Page: %d\n", udate, utime, pageno printf "\n" printf " Number of Size in\n" printf "DBS:Table Name Extents %s \n", unitdesc printf "\n" cntline=5 } } ############################################################################### # ON LAST LINE END { printf "\n" if (unit == "M") { printf "Total Size: %-10.2f Meg\n",tot_M } if (unit == "K") { printf "Total Size: %d K\n",tot_K } if (unit == "P") { printf "Total Size: %d Pages\n",tot_P } if (unit == "B") { printf "Total Size: %d Bytes\n",tot_B } printf "Number of tables: %d\n",NR printf "Highest number of extents: %d (%s:%s)\n", maxextents, maxdbs, maxtable printf "Using Informix pagesize of: %d K\n", pagesize printf "Sorted by: %s\n", orderby printf "\n" } ############################################################################### # END OF AWK SCRIPT ' \ pagesize=$PAGESIZE \ xdate=$XDATE \ orderby=$ORDERBY \ unit=$UNIT \ unitdesc=$UNITDESC \ $TMPFILE > $OUTPUT if [ $BG = false ] then pg $OUTPUT fi rm -f $TMPFILE echo echo "Note: Output report is in $OUTPUT" ################################################################################