Informix管理脚本

  1. #!/usr/bin/ksh  
  2. ###############################################################################  
  3. #  
  4. #       Module:         extent1.sh  
  5. #       Author:         Peter R. Schmidt  
  6. #       Description:    Report on database size for an online engine database  
  7. #  
  8. #       Change Log  
  9. #  
  10. #         Date    Name               Description.................  
  11. #       02/17/98  Peter R. Schmidt   Start Program  
  12. #       07/07/99  Peter R. Schmidt   Updated  
  13. #       07/27/99  Peter R. Schmidt   Updated  
  14. #       08/18/05  Peter R. Schmidt   exclude table "TBLSpace"  
  15. #  
  16. ###############################################################################  
  17.  
  18. OUTPUT=extent1.out  
  19. TMPFILE=extent1.tmp  
  20. PAGESIZE=2 
  21. BG=false 
  22.  
  23. ###############################################################################  
  24.  
  25. if [ $# != 0 ]  
  26. then  
  27.         ARG1=$1  
  28.         case $ARG1 in  
  29.                 1|2|3|4) OPTION1=$ARG1;;  
  30.                 *)       OPTION1=2;;  
  31.         esac  
  32.  
  33.         ARG2=$2  
  34.         case $ARG2 in  
  35.                 1|2|3|4) OPTION2=$ARG2;;  
  36.                 *)       OPTION2=2;;  
  37.         esac  
  38.  
  39.         BG=true 
  40. else  
  41.     tput clear  
  42.     while true  
  43.     do  
  44.             echo "Report on extent sizes for an Informix online engine database"  
  45.             echo  
  46.             echo "Specify Order"  
  47.             echo  
  48.             echo "1 = Size"  
  49.             echo "2 = Number of extents"  
  50.             echo "3 = Table name"  
  51.             echo "4 = Database/Table name"  
  52.             echo "0 = Exit this program"  
  53.             echo  
  54.             echo "Enter sort sequence desired (0,1,2,3 or 4)"  
  55.             read OPTION1  
  56.  
  57.             case $OPTION1 in 0|1|2|3|4) break;; esac  
  58.             echo  
  59.             echo "Error - you must enter 0,1,2,3 or 4!"  
  60.             echo  
  61.     done  
  62.  
  63.         while true  
  64.         do  
  65.                 echo  
  66.                 echo "1 = Report in Megs"  
  67.                 echo "2 = Report in Kbytes"  
  68.                 echo "3 = Report in Pages"  
  69.                 echo "4 = Report in Bytes"  
  70.                 echo "0 = Exit this program"  
  71.                 echo  
  72.                 echo "Enter reporting unit desired (0,1,2,3,4)"  
  73.                 read OPTION2  
  74.  
  75.                 case $OPTION2 in 0|1|2|3|4) break;; esac  
  76.                 echo  
  77.                 echo "Error - you must enter 0,1,2,3 or 4!"  
  78.                 echo  
  79.         done  
  80.  
  81. fi  
  82.  
  83. case $OPTION1 in  
  84.         0)      echo "End requested by user"; exit;;  
  85.         1)      SORT="4";     ORDER=descORDERBY=Size;;  
  86.         2)      SORT="3";     ORDER=descORDERBY="Number-of-Extents";;  
  87.         3)      SORT="2";     ORDER=asc;  ORDERBY=Tablename;;  
  88.         4)      SORT="1,2";   ORDER=asc;  ORDERBY="Database/Tablename";;  
  89. esac  
  90.  
  91. case $OPTION2 in  
  92.     0)  echo "End requested by user"; exit;;  
  93.     1)  UNIT=MUNITDESC=Mbytes;;  
  94.     2)  UNIT=KUNITDESC=Kbytes;;  
  95.     3)  UNIT=PUNITDESC=Pages;;  
  96.     4)  UNIT=BUNITDESC=Bytes;;  
  97. esac  
  98.  
  99. if [ -f $OUTPUT ]  
  100. then  
  101.         rm -f $OUTPUT  
  102. fi  
  103.  
  104. if [ -f $TMPFILE ]  
  105. then  
  106.         rm -f $TMPFILE  
  107. fi  
  108.  
  109. echo "Collecting extent info from the sysmaster database..."  
  110.  
  111. dbaccess << EOF 
  112. database sysmaster;  
  113. unload to '$TMPFILE' delimiter "|"  
  114. select  
  115.         dbsname,  
  116.         tabname,  
  117.         count(*) num_of_extents,  
  118.         sum(pe_size) total_size  
  119. from  
  120.         systabnames, sysptnext  
  121. where  
  122.         partnum = pe_partnum 
  123.   and   partnum  > 99  
  124.   and   dbsname <> "sysmaster"  
  125.   and   tabname <> "TBLSpace"  
  126. --and   dbsname <> "rootdbs"  
  127. group by 1,2  
  128. order by $SORT $ORDER;  
  129. EOF  
  130.  
  131. echo "unload completed"  
  132.  
  133. XDATE=`date +%D-%T`  
  134.  
  135. echo  
  136. echo "Completed - formatting report..."  
  137. echo  
  138.  
  139. awk ' \  
  140. ###############################################################################  
  141. #  
  142. #       Module:         extent1.awk  
  143. #       Author:         Peter R. Schmidt  
  144. #       Description:    Report on database size for an online engine database  
  145. #       Called by:      extent1.sh  
  146. #  
  147. #       Expected variables passed at runtime:  
  148. #  
  149. #               pagesize        Informix Page Size  
  150. #               xdate           Todays date, format: mm/dd/yy-hh:mm:ss  
  151. #               orderby         Sort Order description  
  152. #  
  153. #       Expected Input: Pipe Delimited file with the following 4 fields  
  154. #  
  155. #               database name  
  156. #               table name  
  157. #               number of extents  
  158. #               number of pages  
  159. #  
  160. #       Change Log  
  161. #  
  162. #         Date    Name               Description.................  
  163. #       02/17/98  Peter R. Schmidt   Start Program  
  164. #       07/07/99  Peter R. Schmidt   Updated  
  165. #       07/27/99  Peter R. Schmidt   Updated  
  166. #  
  167. ###############################################################################  
  168. #       INITIALIZE VARIABLES AT BEGINNING  
  169.  
  170. BEGIN {  
  171.     cntline=5 
  172.     pageno=1 
  173.     maxextents=0 
  174. }  
  175.  
  176. ###############################################################################  
  177. #       FIRST LINE ONLY  
  178.  
  179. {  
  180.     if (NR == 1) {  
  181.         split (xdate,b,"-")  
  182.         udate=b[1]  
  183.         utime=b[2]  
  184.  
  185.         printf "%s %s          Informix Extents Report                   Page: %d\n", udate, utime, pageno  
  186.         printf "\n"  
  187.         printf "                             Number of        Size in\n"  
  188.         printf "DBS:Table Name                Extents          %s    \n", unitdesc  
  189.         printf "\n"  
  190.     }  
  191. }  
  192.  
  193. ###############################################################################  
  194. #       ON EVERY LINE  
  195.  
  196. {  
  197.         split ($1,a,"|")  
  198.  
  199.         dbs=a[1]  
  200.         table=a[2]  
  201.         num_extents=a[3]  
  202.         size_P=a[4]  
  203.  
  204.         size_K=size_P*pagesize  
  205.         size_M=size_K/1024  
  206.         size_B=size_K*1024  
  207.  
  208.         tot_P += size_P  
  209.         tot_K += size_K  
  210.         tot_M += size_M  
  211.         tot_B += size_B  
  212.  
  213.         if (num_extents > maxextents) {  
  214.                 maxextents = num_extents 
  215.         maxdbs     = dbs  
  216.                 maxtable   = table  
  217.         }  
  218.  
  219.     dbsdbs_table = dbs ":" table  
  220.  
  221.     if (unit == "M") {  
  222.             printf "%-30s  %3d        %10.2f\n", dbs_table, num_extents, size_M  
  223.     }  
  224.  
  225.     if (unit == "K") {  
  226.             printf "%-30s  %3d        %10d\n", dbs_table, num_extents, size_K  
  227.     }  
  228.  
  229.     if (unit == "P") {  
  230.             printf "%-30s  %3d        %10d\n", dbs_table, num_extents, size_P  
  231.     }  
  232.  
  233.     if (unit == "B") {  
  234.             printf "%-30s  %3d        %10d\n", dbs_table, num_extents, size_B  
  235.     }  
  236.  
  237.         cntline++  
  238. }  
  239.  
  240. ###############################################################################  
  241. #       TOP OF PAGE  
  242.  
  243. {  
  244.     if (cntline == 60) {  
  245.         pageno++  
  246.  
  247.         printf "\f\n"  
  248.         printf "%s %s          Informix Extents Report                   Page: %d\n", udate, utime, pageno  
  249.         printf "\n"  
  250.         printf "                             Number of        Size in\n"  
  251.         printf "DBS:Table Name                Extents          %s    \n", unitdesc  
  252.         printf "\n"  
  253.  
  254.         cntline=5 
  255.     }  
  256. }  
  257.  
  258. ###############################################################################  
  259. #       ON LAST LINE  
  260.  
  261. END {  
  262.         printf "\n"  
  263.  
  264.         if (unit == "M") {  
  265.                 printf "Total Size:                 %-10.2f Meg\n",tot_M  
  266.         }  
  267.         if (unit == "K") {  
  268.                 printf "Total Size:                 %d K\n",tot_K  
  269.         }  
  270.         if (unit == "P") {  
  271.                 printf "Total Size:                 %d Pages\n",tot_P  
  272.         }  
  273.         if (unit == "B") {  
  274.                 printf "Total Size:                 %d Bytes\n",tot_B  
  275.         }  
  276.  
  277.         printf "Number of tables:           %d\n",NR  
  278.         printf "Highest number of extents:  %d  (%s:%s)\n", maxextents, maxdbs, maxtable  
  279.         printf "Using Informix pagesize of: %d K\n", pagesize  
  280.         printf "Sorted by:                  %s\n", orderby  
  281.         printf "\n"  
  282. }  
  283.  
  284. ###############################################################################  
  285. #       END OF AWK SCRIPT  
  286.  
  287. ' \  
  288. pagesize=$PAGESIZE \  
  289. xdate=$XDATE \  
  290. orderby=$ORDERBY \  
  291. unit=$UNIT \  
  292. unitdesc=$UNITDESC \  
  293. $TMPFILE > $OUTPUT  
  294.  
  295. if [ $BG = false ]  
  296. then  
  297.         pg $OUTPUT  
  298. fi  
  299.  
  300. rm -f $TMPFILE  
  301.  
  302. echo  
  303. echo "Note: Output report is in $OUTPUT"  
  304.  
  305. ################################################################################ 

本日志由 flyinweb 于 2009-12-10 15:42:06 发表,目前已经被浏览 3941 次,评论 0 次;

作者添加了以下标签: INFORMIXreport

引用通告:http://www.517sou.net/Article/348/Trackback.ashx

评论订阅:http://www.517sou.net/Article/348/Feeds.ashx

相关文章

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)