- 论坛徽章:
- 0
|
平时经常要监测数据库中各表的情况,于是写了两个shell,用起来蛮方便。。。
一、检查数据库中所有的表的extents数并输出到文件中。输出的文件中,表是按extents数目大小倒序排列。
>;cat check_extents.sh
- today=`date +%Y%m%d%H%M%S`
- dbaccess - <<EOF >; sql_tab_ext_${today}.txt
- database sysmaster;
- select dbsname,tabname,
- count(*) num_of_extents,
- sum( pe_size ) total_size
- from systabnames,sysptnext
- where partnum = pe_partnum
- group by 1, 2
- order by 3 desc,4 desc;
- EOF
复制代码
二、如发现表的extents过大,可采取下列步骤
0。dbschema 导出表结构
1。rename 原表名
2。以原结构新建表,但增大extents和next size
3。unload出原表数据
4。dbload 数据到新表
例如发现表t_prox_pb_log的extents过大,可以这样:
0.dbschema -t t_prox_pb_log -d dbname -ss t_prox_pb_log.sql
1-4步可以写成pblog.sh如下:
>;cat pblog.sh
(表结构用第0步生产的结构即可)
- dbaccess << -- 2>;>;pblog.err
- !
- database dbname;
- rename table t_prox_pb_log to t_pb_log_bak;
- create table t_prox_pb_log
- (
- oper_kind char(3) not null ,
- oper_detail char(6) not null ,
- trn_mode char(1) not null ,
- user_no1 char(20) not null ,
- cust_name char(40) not null ,
- trn_amt float,
- cert_no integer,
- cert_num integer,
- trn_code char(4),
- trn_date char(8),
- trn_time char(6),
- trn_bank char(4),
- oper_no char(4),
- seq_no smallint,
- trn_stat char(1),
- primary key (trn_date,trn_bank,oper_no,seq_no)
- ) extent size 2048 next size 1024 lock mode row;
- revoke all on t_prox_pb_log from "public";
- create index i_prox_pb_log2 on t_prox_pb_log (user_no1);
- unload to "t_pb_log.txt" select * from t_pb_log_bak;
- !
- --
- dbload -d dbname -c load_log -l dbload_errlog -n 1000 -k
复制代码
控制文件load_log如下:
>; cat load_log
FILE t_pb_log.txt DELIMITER '|' 15;
INSERT INTO t_prox_pb_log; |
|