ITPUB论坛-中国专业的IT技术社区

 找回密码
 注册
查看: 429|回复: 2

[性能调整] 表空间对应多个数据文件,清表如何缩小表空间大小?

[复制链接]
论坛徽章:
3
ITPUB十周年纪念徽章
日期:2011-11-01 16:27:27ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00祖国65周年纪念徽章
日期:2015-05-15 14:07:01
发表于 2018-5-10 17:43 | 显示全部楼层 |阅读模式
各位好,想问一下压缩数据文件的相关步骤。
目前的数据库是oracle12c,数据库存放车辆的GPS数据,数据量比较大,一天七八千万左右,是按月分表,按天分分区存放的;
表空间GPS对应80多个dbf数据文件(gps1.dbf,gps2.dbf.....),每个数据文件到达到了最大32G,后续还在增加数据文件,每次都是增加4个或者8个数据文件;
表有gps201705,gps201706...gps201804,gps201805十来个表;
以上是现状

现在由于存储的原因,想要控制数据文件大小,想把历史上最早月份的几个表truncate(gps201705,gps201706);
想问一下,truncate这些表并执行shrink space之后,怎样确定要缩小哪些数据文件(因为数据文件很多)?这些数据文件的缩小是按“一个表空间对应一个数据文件”的操作缩小吗?

谢谢大家!
论坛徽章:
3
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18天蝎座
日期:2016-05-14 12:00:32
发表于 2018-5-10 18:16 | 显示全部楼层

附上範例, 希望對你有幫助.

CREATE OR REPLACE PROCEDURE DROP_PARTITIONS_PROC
AS
   T1               BINARY_INTEGER;
   T2               BINARY_INTEGER;
   WORD_DATA         VARCHAR2(4000);
   SQL_CMD           VARCHAR2(4000);
   V_CHECK           VARCHAR2(2);
   V_MONTH           VARCHAR2(6);
BEGIN
   DBMS_OUTPUT.ENABLE (buffer_size=>null);
   DBMS_OUTPUT.put_line ('drop PARTITIONS Produce');
   T1 := DBMS_UTILITY.GET_TIME;

   FOR RUN_REC IN
     ( SELECT 'CTX' as TABLE_OWNER
            , A.TABLE_NAME
            , A.PARTITION_NAME
            , A.HIGH_VALUE
            , A.NUM_ROWS AS DATA_COUNT
         FROM USER_TAB_PARTITIONS A
        WHERE A.TABLE_NAME IN ('LIST_ERROR','LIST_IN','LIST_OUT')
     )
   LOOP
     BEGIN
        V_MONTH := '999912';
        SQL_CMD := 'SELECT TO_CHAR(' || RUN_REC.HIGH_VALUE || ',''YYYYMM'') FROM DUAL';
        EXECUTE IMMEDIATE SQL_CMD INTO V_MONTH;
     EXCEPTION
     WHEN OTHERS THEN
        V_MONTH := '999912';
     END;

     -- 保留 1 個月, 201401 初始創建日期不可以 drop
     IF V_MONTH <= '201401' THEN
        V_CHECK := 'N';
     ELSIF V_MONTH > TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM') THEN
        V_CHECK := 'N';
     ELSE
        V_CHECK := 'Y'; -- 要移除
     END IF;

     IF V_CHECK = 'Y' THEN
        WORD_DATA := '-- TABLE_OWNER: ' || RUN_REC.TABLE_OWNER || CHR(10)
                  || '-- TABLE_NAME: ' || RUN_REC.TABLE_NAME || CHR(10)
                  || '-- PARTITION_NAME: ' || RUN_REC.PARTITION_NAME || CHR(10)
                  || '-- HIGH_VALUE: ' || RUN_REC.HIGH_VALUE;
        DBMS_OUTPUT.PUT_LINE ( WORD_DATA );
        DBMS_OUTPUT.PUT_LINE ('-- SQL: ' || SQL_CMD || ';');

        BEGIN
           SQL_CMD := 'ALTER TABLE "'
                   || RUN_REC.TABLE_OWNER || '"."'
                   || RUN_REC.TABLE_NAME || '"'
                   || ' TRUNCATE PARTITION "' || RUN_REC.PARTITION_NAME || '" DROP STORAGE';
           DBMS_OUTPUT.PUT_LINE ( SQL_CMD || ';');
           EXECUTE IMMEDIATE SQL_CMD;
        EXCEPTION
        WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE ('-- exception--->' || SUBSTR (SQLERRM, 1, 4000));
        END;

        BEGIN
           SQL_CMD := 'ALTER TABLE "'
                   || RUN_REC.TABLE_OWNER || '"."'
                   || RUN_REC.TABLE_NAME || '"'
                   || ' DROP PARTITION "' || RUN_REC.PARTITION_NAME || '"';
           DBMS_OUTPUT.PUT_LINE ( SQL_CMD || ';');
           EXECUTE IMMEDIATE SQL_CMD;
        EXCEPTION
        WHEN OTHERS THEN
           DBMS_OUTPUT.PUT_LINE ('-- exception--->' || SUBSTR (SQLERRM, 1, 4000));
        END;
     END IF;
   END LOOP;
   T2 := DBMS_UTILITY.GET_TIME;
   DBMS_OUTPUT.PUT_LINE ('Execution Time (' || TO_CHAR ( (T2 - T1) / 100) || ')');
   COMMIT;
EXCEPTION
WHEN OTHERS THEN
   RAISE;
END DROP_PARTITIONS_PROC;

使用道具 举报

回复
论坛徽章:
1
秀才
日期:2018-06-21 10:08:00
发表于 2018-5-11 08:43 | 显示全部楼层
表空间和数据文件是一对多关系,压缩数据文件,首先要确保该数据文件上的数据都被清理,而且最高使用记录决定了你能压缩多少空间。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表