一个批量压缩表的脚本

--在表比较多而大的数据仓库环境中,空间有时会比较珍贵,所以oracle采用压缩技术节省空间,下面是存储过程。

-- 如果谁有兴趣可以联系我,我把相关的脚本都给他QQ:360263676

create or replace procedure pr_exec_compress_cfg1(stat_date in varchar2,oi_return out number)
/** HEAD
  * @name sys.pr_exec_compress_cfg
  * @caption 压缩表存储过程
  * @type
  * @parameter cycle_date in varchar2 统计日期
  * @parameter oi_return out number 执行状态码,整数,0 正常,-1 出错
  * @description 压缩表存储过程
  * @target sys.exec_compress_cfg
  * @source etl.tb_main_compress_cfg
  * @middle
  * @version 1.0
  * @author
  * @create-date 2010-08-03
  * @TODO 无
  * @version
  * @mender
  * @modify_date
  * @modify_desc
  * @copyright
  */

  -- ********************************************************************************
  -- 程序名称:    sys.pr_exec_compress_cfg
  -- 功能描述:    o压缩表存储过程
  -- 输入参数:    stat_date   - 统计日期
  -- 输出参数:    oi_return - 执行状态码,整数,0 正常,-1 出错
  -- 输入资源:    tb_main_compress_cfg
  -- 输出资源:    sys#exec_compress_cfg
  -- 中间资源:
  -- 创建人员:    tux
  -- 创建日期:    2010-09-07
  -- 版本说明:    v1.0
  -- 修改人员:    tux
  -- 修改日期:    2010-09-07
  -- 修改原因:    增加去月数据的压缩功能每月的15号对月表进行压缩
  -- 版本说明:    v1.1
  -- 公司名称:    www.tuxuniontech.com
  -- ********************************************************************************
is
    vs_task_name   varchar2(30);   -- 任务名称
    vs_table_name  varchar2(30);   -- 表名称
    vs_message     varchar2(200);  -- 日志信息
    vi_task_id     integer;        -- 日志id
    vs_date        varchar2(8);    -- 统计日期
    vs_month       varchar2(6);    -- 统计月份
    vs_mid_day     varchar2(8);
begin
    vs_task_name  := 'pr_exec_compress_cfg1';
    vs_table_name := 'pr_exec_compress_cfg1';
    vs_date       :=  substr(stat_date,1,8);
    vs_month      := substr(stat_date,1,6);
    vs_mid_day    := substr(stat_date,1,6)||'15';
    -- 程序开始日志
    sys.ps_log(vs_task_name, vs_table_name, vs_date, 1, null, vi_task_id);

    -- 出错: 没有输入统计日期参数
    -- 判断输入表名

    -- 清空临时表
    execute immediate 'truncate table sys.tr_exec_compress_cfg' ;
    insert into sys.tr_exec_compress_cfg
    select 'alter table ' || t.table_owner || '.' || t.table_name ||
           ' move  partition ' || t.partition_name || ' tablespace ' ||
           t.tablespace_name || ' compress parallel 8'
     from all_tab_partitions t,
        etl.tb_main_compress_cfg t1
    where t.table_owner = upper(t1.table_owner)
      and t.table_name = upper(t1.table_name)
      and t1.stor_type = 'D'
      and t.partition_name like '%' || vs_date || '%'
    order by t.partition_name
    ;
    commit;
    -- 判断是否为月中并对月数据进行压缩
    if vs_date = vs_mid_day then
    insert into sys.tr_exec_compress_cfg
    select 'alter table ' || t.table_owner || '.' || t.table_name ||
           ' move  partition ' || t.partition_name || ' tablespace ' ||
           t.tablespace_name || ' compress parallel 8'
     from all_tab_partitions t,
        etl.tb_main_compress_cfg t1
    where t.table_owner = upper(t1.table_owner)
      and t.table_name = upper(t1.table_name)
      and t1.stor_type = 'M'
      and t.partition_name like '%' || vs_month || '%'
    order by t.partition_name
    ;
    commit;
    end if;
    --- 对表进行压缩
    for compress_sql in
        (
            select exe_sql
              from sys.tr_exec_compress_cfg
        )
    loop
        execute immediate compress_sql.exe_sql ;
    end loop
    ;
    commit;
    ------------------------------------------------------------
    -- 程序结束日志
    sys.ps_log(null, null, null, 2, null, vi_task_id);
    oi_return := 0;
    -- 成功返回
exception

    when others then
      -- 得到出错信息
      vs_message := substr(sqlerrm, 1, 200);
      -- 回滚事务
      rollback;
      -- 程序出错日志
      sys.ps_log(null, null, null, 3, vs_message, vi_task_id);
      oi_return := -1;
      -- 出错返回
       return;

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值