天地不仁,以万物为刍狗!

让db2系统定时runstats、reorg

上一篇 / 下一篇  2007-08-23 00:00:00 / 个人分类:db2

让db2系统定时runstats、reorgITPUB个人空间 b+rzXh mQt2j[V
Q:定期runstats、reorgITPUB个人空间;MW0{{|x%y*x [YKq
A:在db2 v8.2以上可以使用 CALL SYSPROC.ADMIN_CMD来实现,ITPUB个人空间j!B&dW f
这里主要讲在v8.2以前的版本中利用shell或者批处理来实现同样的功能

因为在以前的版本中存储过程中是不能使用DDL操作语句的!(这点对于oracle刚转过来的人来说很是郁闷的)
7Qsv gR"Xqy9OeM0然后可以利用db2自带的配置自动维护来做,但是java做的东西比较让人感觉头痛!尤其是速度和莫名的错误!

本代码使用操作系统的脚本来实现这部分功能!

1.windows下
v5{(k.r[H Y0如下:
YK*M%o1~%LG"xlP9f,W0下一个cmd文件s.cmd
j\"j2}wv0H0内容如下:ITPUB个人空间%rB3h0b-H~]
db2 connect to ccp_dm
*A)vt*RL0db2 -x "select 'runstats on table '||rtrim(tabschema)||'.'||tabname||' on all columns' from sysstat.tables where card=-1">tab.sql

db2 -f tab.sql

--其中where后的条件可以修改ITPUB个人空间FN(Ou-Bn MB ]
然后就是定制任务:用windos的定制任务!每周或者每月运行,这个就不讲了哈!

这部分经测试,通过!

不过能,这里只提到了runstats,对于reorg同理也可以实现!


s6oFI4XbK&}02.
u4_d r!f)Fy ?0非windows下(这个是从网上搞得,没有测试过):ITPUB个人空间N1Hf*e;Bec
一:#!/usr/bin/ksh ITPUB个人空间^$T7GA)g@V
#DB2V8统计更新脚本 by Ray001 2006/09/06
fR1Rj6`x8b5j&b S,s0if [ $# -ne 3 ] ITPUB个人空间2_h K)Xr jS-|8L [
then ITPUB个人空间;J{mlr\#i_o
echo "Usage:$0 DBNAME USER PASSWD!" ITPUB个人空间1t,r_+g%|Fgij#_
exit 1 ITPUB个人空间3p0FnS#H7dq
fi
\bk dW&xc0DBNAME=$1 ITPUB个人空间D-Ux-xHes
USER=$2 ITPUB个人空间9i"MhBI^
PASSWD=$3
i+M!Y(Wu c z0rm -f tab.tmp ITPUB个人空间cg4?uiQc%CV]
rm -f ind.tmp ITPUB个人空间LRK,Mv+m
db2 connect to $DBNAME user $USER using $PASSWD ITPUB个人空间;JZ%V R?V7s
db2 -x "select tabschema,tabname from sysstat.tables where card=-1">tab.tmp
-Xx'd,VKs k9A0if [ $? -ne 0 ]
|,g9nv+w0then ITPUB个人空间4Y z n6J+Pqh
if [ ! -s tab.tmp ]
1R!K,Tt:a(B8K T%Yd L)zX0then
}v`N_Q0echo "NO TABLES NEED TO BE PROCESS"
+TPg3M-a(E6pc@0#exit 0
?/X/NU%G+D3F8L0else ITPUB个人空间y WJ$J1Gq
echo "SELECT SYSSTAT.TABLES ERROR"
g+o uCu1E$n&V,?:R0exit 1
pd)\BP/q0fi ITPUB个人空间 GUK:},U:K#|%x
fi
f Ul{7Y9R0db2 -x "select tabschema,tabname,indschema,indname from sysstat.indexes where nl
eN _@!I#bsA0eaf=-1">ind.tmp ITPUB个人空间6]5f-s:`bMNg
if [ $? -ne 0 ]
@*T$Q|6H7n\ H&a0then ITPUB个人空间-I0USk@`} C
if [ ! -s ind.tmp ]
KQ7T*A&Hs} OZN0then ITPUB个人空间_7oul6T7s(h'~ ~M3r6A
echo "NO INDEXES NEED TO BE PROCESS" ITPUB个人空间RKz.K"I JfH Rj
#exit 0
}.}&[4m2R(C/l rF0else ITPUB个人空间Ea;t}y},[8O
echo "SELECT SYSSTAT.INDEXES ERROR" ITPUB个人空间)n}f!Pr
exit 1 ITPUB个人空间d7d0BAo;^
fi ITPUB个人空间&js[3|:F
fi
6_^7wg#a[#`-S ~0while read TABSCHEMA TABNAME
bQ&H#w$Pe}*u0do
L2i!Y0{,C\&? OF0echo "runstats on table $TABSCHEMA.$TABNAME" ITPUB个人空间sqX~0TrT p
db2 "runstats on table $TABSCHEMA.$TABNAME" ITPUB个人空间 O$|2|p[2N5Lq~?
done<tab.tmp
'{j5V0T.nqH7Su0while read TABSCHEMA TABNAME INDSCHEMA INDNAME
(A9f;[Sh7t\0do ITPUB个人空间5}7J_ p0QtrS
echo "runstats on table $TABSCHEMA.$TABNAME for index $INDSCHEMA.$INDNAME" ITPUB个人空间R(V W}5O;j4n#i
db2 "runstats on table $TABSCHEMA.$TABNAME for index $INDSCHEMA.$INDNAME" ITPUB个人空间$fpn.~+b%YmU
done<ind.tmp
Ua.y bMaY] X;K0db2 terminate
V(_-sL4~G0rm -f tab.tmp ITPUB个人空间0`:x#{m!{$[ Ti$y?
rm -f ind.tmp

二:
$o!^Aa~d0回到主题。若是要做DB2 RUNSTATS的话,我的习惯是写一个简单的SHELL SCRIPT,如下:

/home/db2inst/Scripts > cat runstats.shITPUB个人空间;P"dt:q'IFZ.C
#! /usr/bin/ksh

. $HOME/.profile

db2 -v connect to mydb

for TABSCHEMA in DB2INST
6KMiJ?0doITPUB个人空间8YN9vaD#dGD\1e%Hu
for TABNAME in $(db2 -x "select tabname from syscat.tables where tabschema='$TABSCHEMA'")
$g P:LGN`xV0do
ms6^"Jv(Mt;y0w"I2i0db2 -v "runstats on table $TABSCHEMA.$TABNAME and indexes all"
y-df^S9J0doneITPUB个人空间ah}.o&bm8X$wy
done

/home/db2inst/Scripts > ./runstats.shITPUB个人空间7tL9e)jP%q#t
connect to mydb

ITPUB个人空间4X2[2p*MOn0?g

TAG:

引用 删除 Guest   /   2008-05-08 11:47:28
5
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-24  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 12228
  • 日志数: 273
  • 图片数: 1
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-11-19

RSS订阅

Open Toolbar