|
|
时经常要监测数据库中各表的情况,于是写了两个shell,用起来蛮方便。。。
一、检查数据库中所有的表的extents数并输出到文件中。输出的文件中,表是按extents数目大小倒序排列。 >cat check_extents.sh
代码: |
today=`date +%Y%m%d%H%M%S` dbaccess - < 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;
| | |
阅读(552) | 评论(0) | 转发(0) |