自己写的检查数据库中表的extents数及相应处理的shell


平时经常要监测数据库中各表的情况,于是写了两个shell,用起来蛮方便。。。

一、检查数据库中所有的表的extents数并输出到文件中。输出的文件中,表是按extents数目大小倒序排列。
>cat check_extents.sh
[code:1:a96ccbdc4e]
today=date +%Y%m%d%H%M%S
dbaccess - <

 1<eof> sql_tab_ext_${today}.txt   
 2database sysmaster;   
 3select dbsname,tabname,   
 4count(*) num_of_extents,   
 5sum( pe_size ) total_size   
 6from systabnames,sysptnext   
 7where partnum = pe_partnum   
 8group by 1, 2   
 9order by 3 desc,4 desc;   
10EOF   
11[/code:1:a96ccbdc4e]   
12  
13二、如发现表的extents过大,可采取下列步骤   
140。dbschema 导出表结构   
151。rename 原表名   
162。以原结构新建表,但增大extents和next size   
173。unload出原表数据   
184。dbload 数据到新表   
19  
20例如发现表t_prox_pb_log的extents过大,可以这样:   
210.dbschema -t t_prox_pb_log -d dbname -ss t_prox_pb_log.sql   
221-4步可以写成pblog.sh如下:   
23&gt;cat pblog.sh   
24(表结构用第0步生产的结构即可)   
25[code:1:a96ccbdc4e]   
26dbaccess &lt;&lt; \-- 2&gt;&gt;pblog.err   
27!   
28database dbname;   
29rename table t_prox_pb_log to t_pb_log_bak;   
30  
31create table t_prox_pb_log   
32(   
33oper_kind char(3) not null ,   
34oper_detail char(6) not null ,   
35trn_mode char(1) not null ,   
36user_no1 char(20) not null ,   
37cust_name char(40) not null ,   
38trn_amt float,   
39cert_no integer,   
40cert_num integer,   
41trn_code char(4),   
42trn_date char(8),   
43trn_time char(6),   
44trn_bank char(4),   
45oper_no char(4),   
46seq_no smallint,   
47trn_stat char(1),   
48primary key (trn_date,trn_bank,oper_no,seq_no)   
49) extent size 2048 next size 1024 lock mode row;   
50revoke all on t_prox_pb_log from "public";   
51  
52create index i_prox_pb_log2 on t_prox_pb_log (user_no1);   
53  
54  
55unload to "t_pb_log.txt" select * from t_pb_log_bak;   
56!   
57\--   
58dbload -d dbname -c load_log -l dbload_errlog -n 1000 -k   
59  
60[/code:1:a96ccbdc4e]   
61控制文件load_log如下:   
62&gt; cat load_log   
63FILE t_pb_log.txt DELIMITER '|' 15;   
64INSERT INTO t_prox_pb_log;</eof>
Published At
Categories with 数据库类
Tagged with
comments powered by Disqus