歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

數據庫中表的extents數及處理的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, c
  一、檢查數據庫中所有的表的extents數並輸出到文件中。輸出的文件中,表是按extents數目大小倒序排列。
  >cat check_extents.sh
  代碼:
  
  today=`date +%Y%m%d%H%M%S`
  dbaclearcase/" target="_blank" >ccess - <<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;

Copyright © Linux教程網 All Rights Reserved