最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

TIPTOP定期清除cr_ds_report资料库中的暂存表

unix与数据库 bron1984 4807浏览

1安裝設定

2單獨執行

3設定排程,定時執行

4使用資料庫工具檢查暫存表是否已被刪除

 

1安装设定

以tiptop账号登入TIPTOP GP主机

将drop_ds_report_temptable.4gl复制到$DS4GL/bin目录下

切到$DS4GL/bin目录下,编译档案

l连结档案,产生drop_ds_report_temptable.42r档

 

2单独执行

以tiptop账号登入TIPTOP GP主机

cd $DS4GL/bin

$FGLRUN drop_ds_report_temptable 1

参数说明: 1代表1天前所产生的Temp Table

若今天为 2008/9/19, 则此指令会将 2008/9/17以前所产生的Temp Table删除, 只留下  2008/9/18以后产生的Temp Table。若不输入参数,则预设使用1天前。

 

3设定排程,定时执行

以tiptop账号登入TIPTOP主机

输入crontab –e 对crontab进行编辑

加入

按[ESC]后,输入 :wq 存档后离开。

说明: /u2/topprod为TIPTOP正式区目录;/u2/toptest为TIPTOP测试区目录;/u2/topstd为TIPTOP标准区目录,这三个目录需视实际安装情况而必须加以修改。

 

4检查暂存表是否已被删除

Oracle:

以tiptop账号登入TIPTOP主机

执行 sqlplus ds_report@$ORACLE_SID

在sqlplus中下

若结果为0 代表一天前的暂存表已经全部被删除

Informix:

以tiptop账号登入TIPTOP主机

执行 dbaccess ds_report

在dbaccess中的Query Language中下

 

若结果为0 代表一天前的暂存表已经全部被删除

 

附 drop_ds_report_temptable.4gl 代码:

##################################################
# Description  	: Drop ds_report Temp tables (1 day ago)
# Date & Author : 2008/09/11 by jacklai
# Parameter   	: l_interval1 (days)
# Return   	    : none
# Usage        	: $FGLRUN drop_ds_report_temptable 1
# Modify        : No:FUN-880111 08/09/11 By jacklai Drop ds_report Temp tables (1 day ago)
# Modify        : No:TQC-890062 08/09/30 By jacklai タOracle 10g 穦秨币recycle bin诀τ旧璓祘Α磅︽い耞
##################################################

DATABASE ds

MAIN
  DEFINE l_dbtype     STRING
  DEFINE l_sql        STRING
  DEFINE l_dropsql    STRING
  DEFINE l_rec        RECORD
         l_tablename  VARCHAR(128),
         l_created    DATE
  END RECORD
  DEFINE l_interval1  INTERVAL DAY(5) TO DAY
  DEFINE l_interval2  INTERVAL DAY(5) TO DAY
  DEFINE l_version    VARCHAR(128)          #No:TQC-890062
  DEFINE l_tok        base.StringTokenizer  #No:TQC-890062
  DEFINE l_vermaj     INTEGER               #No:TQC-890062
  DEFINE l_RecycleOff STRING                #No:TQC-890062
  
  WHENEVER ERROR CONTINUE #No:TQC-890062

  CLOSE DATABASE
  DATABASE ds_report
  
  #command line argument[1]: days (default: 1)
  IF NUM_ARGS() >= 1 THEN
    LET l_interval1 = ARG_VAL(1)
  ELSE
    LET l_interval1 = "1"
  END IF
  
  #get information of tables from database 
  LET l_dbtype = DB_GET_DATABASE_TYPE()
  CASE l_dbtype
  WHEN "ORA"
    #No:TQC-890062 --start--
    #Get Oracle version
    PREPARE pre0 FROM "SELECT VERSION FROM PRODUCT_COMPONENT_VERSION WHERE PRODUCT LIKE 'Oracle%'"
    DECLARE cur0 CURSOR FOR pre0
    OPEN cur0
    FETCH cur0 INTO l_version
    CLOSE cur0
    LET l_tok = base.StringTokenizer.create(l_version, ".")
    #get major version number
    IF l_tok.hasMoreTokens() THEN
      LET l_vermaj = l_tok.nextToken()
    END IF
    #No:TQC-890062 --end--
    LET l_sql = "SELECT OBJECT_NAME, CREATED FROM USER_OBJECTS WHERE OBJECT_TYPE='TABLE' ORDER BY OBJECT_NAME"
  WHEN "IFX"
    LET l_sql = "SELECT TABNAME, CREATED FROM SYSTABLES WHERE TABID >= 100 AND TABTYPE='T' ORDER BY TABNAME"
  END CASE
  
  #No:TQC-890062 --start--
  #oracle 10gセ埃Table玡璶闽超RecycleBin
  IF l_dbtype = "ORA" AND l_vermaj >= 10 THEN
    EXECUTE IMMEDIATE "ALTER SESSION SET RECYCLEBIN=OFF"
  END IF
  #No:TQC-890062 --end--
  
  PREPARE pre1 FROM l_sql
  DECLARE cur1 CURSOR FOR pre1
  FOREACH cur1 INTO l_rec.*
    IF STATUS == NOTFOUND THEN
      EXIT FOREACH
    END IF
    LET l_interval2 =  CURRENT YEAR TO DAY - l_rec.l_created
    IF l_interval2 > l_interval1 THEN
      LET l_dropsql = "DROP TABLE ",l_rec.l_tablename
      EXECUTE IMMEDIATE l_dropsql
      IF SQLCA.SQLCODE THEN
        ERROR l_dropsql," ERROE: ",SQLCA.SQLCODE
      ELSE
        DISPLAY l_dropsql," OK."
      END IF
    END IF
  END FOREACH
  
  CLOSE DATABASE
END MAIN

 

转载请注明:赫非域 » TIPTOP定期清除cr_ds_report资料库中的暂存表