- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORACLE 收缩表空间的数据文件
在实际的应用中经常会遇到TRUNCATE或者DELETE表中的数据后发现表空间并没有将空间进行释放,磁盘空间被告占用感觉空间白白被浪费掉了。
提供一个回收表空间的简单方法供参考:
通过下面的SQL语句查看表空间总大小及实用大小,然后拼出来一个SQL语句将表空间的数据文件重新设定大小
select alter database datafile || a.file_name || resize ||round(a.filesize - (a.filesize - c.hwmsize - 100) * 0.8) || M;,a.filesize || M as 数据文件的总大小,c.hwmsize || M as 数据文件的实用大小from (select file_id, file_name, round(bytes / 1024 / 1024) as filesizefrom dba_data_files) a,(select file_id, round(max(block_id) * 8 / 1024) as HWMsizefrom dba_extentsgroup by file_id) cwhere a.file_id = c.file_idand a.filesize - c.hwmsize 100; 上面的那个SQL语句运行可能是有点慢下面的语句更快:
注意:对于此SQL语句由于dba_free_space这个视图在统计空闲空间时没有考虑表空间中的数据文件自动扩展时产生的可使用空间。同时,对于分配给行的空间,在删除行以后,仍可继续用于表的插入操作,但不将其作为可用于其他数据库对象的空间算入下面SQL查询结果中,但是对于截取表时,该空间就可用于其他的数据库对象。如果不考虑数据文件扩展的情况下用此SQL语句基本上可以满足要求了,如果要很精确的话可以考虑上面SQL语句就是太慢了点。
select a.tablespace_name,a.file_name,a.totalsize,b.freesize,ALTER DATABASE DATAFILE || a.file_name || RESIZE ||round((a.totalsize - b.freesize) + 200) || M; as alter datafilefrom (select a.file_name,a.file_id,a.tablespace_name,a.bytes / 1024 / 1024 as totalsizefrom dba_data_files a) a,(select b.tablespace_name,b.file_id,sum(b.bytes / 1024 / 1024) as freesizefrom dba_free_space bgroup by b.tablespace_name, b.file_id) bwhere a.file_id = b.file_idand b.freesize 100and a.tablespace_name not like UNDO% 从网上查了一个关于回收表空间的语句:
alter tablespace TABLESPACENAME coalesce
此语句是整合表空间的碎片增加表空间的连续性,但是他不会收缩一个文件的大小的。
回收某个表使用空间的步骤:
(1)、选择某个表空间中超过N个blocks的segments,通过此语句可以看出那个表占用的空间大。
select segment_name,segment_type,blocks from dba_segments
where tablespace_name=TABLESPACENAME
and blocks N
order by blocks;
(2)、分析表,得知表的一些信息
analyze table TABLENAME estimate statistics;
执行完后再执行
select initial_extent,next_extent,min_extents,blocks,empty_blocks from dba_tables
where table_name=HISHOLDSINFO and owner=hs_his;
(3)、使用alter table ... deallocate unused 命令回收表的空间
例如: alter table hs_his.HISHOLDSINFO deallocate unused keep 1k;
您可能关注的文档
最近下载
- 2024年江苏省南京市中考物理试题卷(含答案解析).docx
- 八年级美术上册5静物画有声教案省公开课一等奖新名师优质课获奖PPT课件.pptx
- 电子鼓hd3中文说明书.pdf
- 2024年江苏省南京市中考数学试题卷(含答案解析).docx
- 通桥(2018)1301-Ⅲ时速250公里、350公里高速铁路无砟轨道(16+24+16)m钢筋混凝土刚构连续梁.pdf
- 2024年武汉市城市建设投资开发集团限公司招聘【221人】公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版.docx
- 12.《玩偶之家(节选)》课件 统编版高中语文选择性必修中册.pptx
- 眼部健康保养.ppt VIP
- 急性一氧化碳中毒诊治专家共识.pptx
- 心内科常见疾病护理常规ppt.pptx
文档评论(0)