当前位置:首页>开发>正文

在oracle数据库中删除表后,怎样把占用的磁盘空间释放 oracle 删除表后,磁盘如何释放

2023-04-30 01:29:00 互联网 未知 开发

 在oracle数据库中删除表后,怎样把占用的磁盘空间释放 oracle 删除表后,磁盘如何释放

在oracle数据库中删除表后,怎样把占用的磁盘空间释放

使用: truncate table tablename DROP STORAGE

解释: 直接删除表,并且释放存储空间。truncate的意思是清空表数据, “DROP STORAGE”是释放存储空间。

oracle 删除表后,磁盘如何释放?

如果是system表空间的话,基本上没有办法变小了。(按照你的说法,就是释放磁盘空间)
就算你删除了表,但是数据文件(就是物理存在于磁盘上的文件)是不会变小的。而且system表空间非常变态,里面存有所有的基表,所以resize不要想了。而且转移表空间神马的,用在其他表空间还可以,system也不可能,如果你真的把所有的表(这个表是指你建立的表)都删除了,那么就干脆重新建库吧,把原来的库删了,这样就可以了。
反正据我所知,如果是system表空间的话(system表空间数据文件所占空间大小),不重新建库是只能变大不能变小的。
如果是其他表空间的话,复制表空间,然后删除什么的可以考虑。
最后给你一个建议啊,你的存储应该是自动扩展的吧,那每个文件最大值最好不要太大,oracle这个东西是有多少占多少,然后再说其他,如果你给的太多,那么他就会一直占用新的。

在oracle数据库中删除表后,怎样把占用的磁盘空间释放出来?

SQL> alter table table_name move
SQL> analyze table table_name compute statistics

执行上述语句,然后再看看,如果不行再用下面的那个

SQL> alter table table_name enable row movement
SQL> alter table table_name shrink space
SQL> analyze table table_name compute statistics

如何让Oracle释放undo表空间

在日常的数据库维护和数据库编程中经常会遇到犹豫对大数据量做DML操作后是得ORACLE的undo表空间扩展到十几个G或者几十个G 但是这些表空间的所占用磁盘的物理空间又不会被oracle所释放,如果你用的是PC机很可能会遇到磁盘空间不足的问题,经过个人整理经过如下操作可以重构undo表空间,同样temp表空间也可能在你查询大数据或则创建索引的时候无限扩大导致磁盘空间不足,同样可以用如下方式解决此问题:
  --查看各表空间名称
  select name from v$tablespace
  --查看某个表空间信息
  select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like UNDOTBS1
  --查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
  select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s
  where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username
  --检查UNDO Segment状态
  select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize
  --创建新的UNDO表空间,并设置自动扩展参数
  create undo tablespace undotbs2 datafile D:ORACLEPRODUCT10.1.0ORADATAORCLUNDOTBS02.DBF size 10m reuse autoextend on next 100m maxsize unlimited
  -- 动态更改spfile配置文件
  alter system set undo_tablespace=undotbs2 scope=both
  --等待原UNDO表空间所有UNDO SEGMENT OFFLINE
  select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize
  --再执行看UNDO表空间所有UNDO SEGMENT ONLINE
  select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize
  -- 删除原有的UNDO表空间
  drop tablespace undotbs1 including contents
  --确认删除是否成功

查看oracle中有哪些表空间及删除表空间方法


SELECT DROP TABLE || TABLE_NAME || CASCADE CONSTRAINTS V_NAME
FROM DBA_TABLES
WHERE TABLESPACE_NAME = USERS

按照表空间名查询所有包含的表,并根据表名拼接删除语句。
执行上面查询语句生成的语句,即可删除所有表。

最新文章