我的编程空间,编程开发者的网络收藏夹
学习永远不晚

回收数据库表空间的一个思路

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

回收数据库表空间的一个思路

  有些项目比较小,硬盘空间也只有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

             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个步骤,就可以临时解决磁盘空间告警的问题。




免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

回收数据库表空间的一个思路

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL数据库表空间回收的解决

目录1. mysql表空间回收2. MySQL表空间设置3. MySQL删除数据流程4. MySQL数据页空洞问题1. MySQL表空间回收我们经常会发现一个问题,就是把表数据删除以后发现,数据文件大小并没有变化,这就是标题中所说的MyS
2023-02-03

Oracle Index与数据库的索引空间回收

在Oracle数据库中,索引是一种用于加快数据检索速度的数据结构。当不再需要某个索引时,可以通过删除索引来释放索引占用的空间。在Oracle数据库中,当删除一个索引时,索引所占用的空间并不会立即被释放,而是会被放入一个称为索引回收站的特殊区
Oracle Index与数据库的索引空间回收
2024-08-15

oracle的数据表、索引从一个表空间迁移到另一个表空间

----查询索引select * from user_objects t where t.object_type = "INDEX";----或查询索引select * from user_indexes t where t.table_owner="SNSR
oracle的数据表、索引从一个表空间迁移到另一个表空间
2021-06-24

Android TableLayout数据列表的回显清空实现思路及代码

代码如下: //数据列表的回显 public void shujuList(){ List customerList = dao.findALL(); TableLayout tl = (TableLayout) fin
2022-06-06

Oracle数据库:一个用户是否可以拥有多个表空间?

Oracle数据库是一种常用的关系型数据库管理系统,许多用户都会遇到关于表空间的使用问题。在Oracle数据库中,一个用户可以拥有多个表空间,这样可以更好地管理数据存储和组织。本文将探讨一个用户如何在Oracle数据库中拥有多个表空间,并提
Oracle数据库:一个用户是否可以拥有多个表空间?
2024-03-03

Oracle数据库中的表空间是什么

表空间是Oracle数据库中存储数据的逻辑结构,用来存储表、索引以及其他数据库对象。每个表空间可以包含一个或多个数据文件,这些数据文件实际上是物理文件存放在操作系统的文件系统中。表空间可以分为系统表空间、用户表空间和临时表空间等不同类型,用
Oracle数据库中的表空间是什么
2024-04-09

Navicat数据库的表空间怎么管理

在Navicat中管理数据库的表空间需要在数据库连接中右键点击要管理的数据库,然后选择“管理表空间”。在管理表空间页面中,可以查看当前数据库的表空间信息,包括表空间名称、大小、数据文件路径等。可以通过添加、修改、删除表空间来管理数据库的表空
Navicat数据库的表空间怎么管理
2024-05-11

db2怎么回滚某一个表的数据

要回滚某一个表的数据,可以使用以下步骤:首先连接到db2数据库。确定要回滚的表的名称。使用以下命令回滚指定表的数据:CONNECT TO ;SET INTEGRITY FOR IMM
db2怎么回滚某一个表的数据
2024-04-09

如何在 Oracle 数据库中确定表的表空间

在Oracle数据库中确定表的表空间是数据库管理中的一个重要操作,通过这个操作可以更好地管理数据库空间并优化数据库性能。在Oracle数据库中,每个表都会被分配到一个表空间中,表空间是一种逻辑对象,用来存储表和索引数据。确定表的表空间主要涉
如何在 Oracle 数据库中确定表的表空间
2024-03-03

编程热搜

目录