回收数据库表空间的一个思路
admin
2023-05-30 13:22:30
0

  有些项目比较小,硬盘空间也只有40多G,加上无人维护,久而久之就出现了硬盘空间告警的问题。经过查看之后,发现有些数据文件一开始就设置成2G,但实际可能就只使用了100M左右。为了解决硬盘空间告警的问题,就想到了重置数据文件大小的方法。

第一步是查看各个表空间的适用率,找出可以缩小的数据文件。

--查看表空间使用率,找到闲置的表空间

SELECT Upper(F.TABLESPACE_NAME)         "表空间名",

       D.TOT_GROOTTE_MB                 "表空间大小(M)",

       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

       To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99')

       || '%'                           "使用比",

       F.TOTAL_BYTES                    "空闲空间(M)",

       F.MAX_BYTES                      "最大块(M)"

FROM   (SELECT TABLESPACE_NAME,

               Round(Sum(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES,

               Round(Max(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES

        FROM   SYS.DBA_FREE_SPACE

        GROUP  BY TABLESPACE_NAME) F,

       (SELECT DD.TABLESPACE_NAME,

               Round(Sum(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB

        FROM   SYS.DBA_DATA_FILES DD

        GROUP  BY DD.TABLESPACE_NAME) D

WHERE  D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER  BY 4 desc;


第二步是查看所选择的表空间数据文件的高水位线,以USERS表空间为例。

-- 查找表空间的高水线

SELECT *

      FROM (SELECT /*+ ordered use_hash(a,b,c) */

             a.file_id,

             a.file_name,

             a.filesize,

             b.freesize,

             (a.filesize - b.freesize) usedsize,

             c.hwmsize, -- 高水位线

             c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,

            a.filesize - c.hwmsize canshrinksize

             FROM (SELECT file_id,

                          file_name,

                          round(bytes / 1024 / 1024) filesize

                     FROM dba_data_files) a,

                  (SELECT file_id, round(SUM(dfs.bytes) / 1024 / 1024) freesize

                     FROM dba_free_space dfs

                    GROUP BY file_id) b,

                  (SELECT file_id, round(MAX(block_id) * 8 / 1024) HWMsize

                     FROM dba_extents

                    GROUP BY file_id) c

            WHERE a.file_id = b.file_id

              AND a.file_id = c.file_id

            ORDER BY unsedsize_belowhwm DESC)

    WHERE file_id IN (SELECT file_id

                        FROM dba_data_files

                       WHERE tablespace_name = 'USERS')

    ORDER BY file_id;

第三步是使用管理员账号登录,执行:

alter database datafile file_id resize N M/G;-- N 为任意整数

alter database datafile file_id autoextend on next 100M maxsize 1G;

通过以上3个步骤,就可以临时解决磁盘空间告警的问题。




相关内容

热门资讯

亨特·拜登首次承认“硬盘门”为... 美国极右翼评论员坎迪斯·欧文斯5月21日发布了对美国前总统拜登儿子亨特·拜登的专访,后者首次承认笔记...
特朗普称将向波兰增派5000名... △美军士兵(资料图)当地时间5月21日,美国总统特朗普在其社交平台“真实社交”发文称,美国将向波兰额...
长三角最新一批创新联合体出炉 ... 上证报中国证券网讯(记者 宋薇萍 张良)5月21日在上海召开的第八届长三角一体化发展高层论坛上,第三...
原创 流... 谷歌正式开启新一轮 AI 搜索广告大规模测试,借助 Gemini 大模型推出多款全新广告形式,将付费...
天津高空跳伞遇难女子原计划今年... 极目新闻记者 舒隆焕天津高空跳伞项目发生事故,一名女员工和教练遇难(极目新闻5月18日报道)。记者从...
这部电影,道尽了中国人的情义二... 12015年,我还在深圳工作。一个周末,我和小小明妈妈带着小小明,开车好几个小时,就为了看一眼大名鼎...
原创 宇... 「宇宙探索·伽马射线暴——宇宙中最亮的爆炸」 一、什么是伽马射线暴? 1967年,美国Vela...
2026年外贸企业谷歌SEO选... 一、引言:流量困局与增长迷思 2026年,外贸企业面临的营销困境正从“流量获取难”演变为“转化效率低...
原创 科... 你以为的宇宙,有可能是一个超级巨型黑洞,银河系在这个超大黑洞的内部,仅仅只是一粒微不足道的宇宙尘埃!...
伊朗外交部:现阶段谈判重点是结... 当地时间5月21日,伊朗外交部发言人巴加埃在接受媒体采访时表示,现阶段,谈判的重点是结束包括黎巴嫩在...