• DM7定时删除备份


    今天去现场迁移数据,迁移完成后要设置作业的时候因为客户用的是DM7,之前很少接触过,所以在设置定时删除备份时无法找到相关的函数。问了之后才知道原来DM7的定时删除远比DM8复杂,在此记录一下:

    --定时删除
    
    create or replace function SF_DEL_DB_BAK_EXPIRED(
    
    DBNAME varchar(128),
    
    BAKDIR varchar(256),
    
    PARALLEL_DIR varchar(256),
    
    EXPIRED_DAY int )
    
    return INT as
    
    DECLARE
    
    V_CNT INT;
    
    V_I INT;
    
    V_PATH VARCHAR(256);
    
    V_TIME INT;
    
    V_FLAG INT;
    
    V_NUM INT;
    
     
    
    TYPE T_REC IS
    
    RECORD (
    
    ID INT,
    
    NAME VARCHAR(128),
    
    TIME VARCHAR(128),
    
    PATH VARCHAR(256));
    
    TYPE T_REC_ARR
    
    IS
    
    ARRAY T_REC[];
    
    BAK_INFO T_REC_ARR;
    
     
    begin
    
    V_NUM=0;
    
    /*初始化备份链表*/
    
    SF_BAK_LST_INIT();
    
    SF_BAK_LST_SET_N_PATH(1);
    
    SF_BAK_LST_SET_PATH(0, BAKDIR);
    
    SF_BAK_LST_SET_PARALLEL_DIR(PARALLEL_DIR);
    
    SF_BAK_LST_COLLECT(DBNAME, '', 1);
    
    V_CNT = SF_GET_BAK_LST_NUM(DBNAME);
    
    /*判断某库是否存在备份*/
    
    IF V_CNT > 0 THEN
    
    BAK_INFO = NEW T_REC[V_CNT];
    
    PRINT V_CNT;
    
    ELSE RETURN -1;
    
    END IF;
    
    /*指向第一个备份*/
    
    SF_BAK_LST_GET_FIRST();
    
    /*指向某一个备份,获取其中某些信息存入数组BAK_INFO*/
    
    FOR V_I IN 1..V_CNT
    
    LOOP
    
    V_PATH=SF_BAK_GET_CUR_PATH();
    
    IF V_PATH IS NOT NULL THEN
    
    BAK_INFO[V_I].ID =V_I;
    
    BAK_INFO[V_I].NAME = SF_BAK_GET_NAME(V_PATH);
    
    BAK_INFO[V_I].TIME = SF_BAK_GET_TIME(V_PATH);
    
    BAK_INFO[V_I].PATH = V_PATH;
    
    END IF;
    
    /*移向下一个备份*/
    
    SF_BAK_LST_GET_NEXT();
    
    END LOOP;
    
    /*用游标隐式打开从ARRAY BAK_INFO取这些值*/
    
    FOR R IN (SELECT * FROM ARRAY BAK_INFO)
    
    LOOP
    
    IF DAYS_BETWEEN(CURDATE(), R.TIME) >= EXPIRED_DAY THEN
    
    V_FLAG = SF_DEL_BAK(DBNAME,'',R.NAME,1);
    
    END IF;
    
    IF V_FLAG=0 THEN
    
    V_NUM=V_NUM+1;
    
    END IF;
    
    END LOOP;
    
    /*有一个失败,全部失败*/
    
    IF V_NUM >= 1 THEN
    
    RETURN 0;
    
    ELSE RETURN 1;
    
    END IF;
    
    /*销毁备份链表*/
    
    SF_BAK_LST_DEINIT();
    
    end;
     
    Call "SF_DEL_DB_BAK_EXPIRED"('DAMENG','/data/dmdbms/data/BAK/','',7);
    
    --这里'DAMENG'指的是数据库名,7代表删除7天之前的备份文件)

    使用:

    --del_bak_before_7days

    call SP_CREATE_JOB('del_bak_before_7days',1,0,'',0,0,'',0,'');

    call SP_JOB_CONFIG_START('del_bak_before_7days');

    call SP_ADD_JOB_STEP('del_bak_before_7days', 'del_bak', 0, 'call SF_DEL_DB_BAK_EXPIRED(''DAMENG'',''/data/dmdbms/BAK'','''',7);', 0, 0, 0, 0, NULL, 0);

    call SP_ADD_JOB_SCHEDULE('del_bak_before_7days', 'del_bak', 1, 1, 1, 0, 0, '23:50:00', NULL, '2018-11-04 09:06:18',

  • 相关阅读:
    hdu 1496 equations(哈希)
    为什么要微服务化
    什么是分布式系统中的幂等性
    不积跬步无以至千里
    服务治理与微服务
    使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码 (jvm性能调优)
    Spring MVC重定向和转发
    两个实体复制
    IntelliJ IDEA类头注释和方法注释
    Linux下单机安装部署kafka及代码实现
  • 原文地址:https://www.cnblogs.com/hong-yf/p/14762900.html
Copyright © 2020-2023  润新知