暂无图片
分享
黄伟波
2020-04-30
关于Oracle表空间瘦身问题
暂无图片 5M

五一期间需要truncate一张600G的大表,清空表之后理论上表空间会剩余600G空间,请问下应该如何对这个表空间做瘦身。
有没有一个比较规范的表空间瘦身方案?
例如最多可以瘦身到多少,相关命令等

收藏
分享
7条回答
默认
最新
lscomeon

首先需要确定高水位,这个决定你的文件能缩小到多少,

set linesize 400
col tablespace_name format a15
col file_size format 99999
col file_name format a50
col hwm format 99999
col can_save format 99999
SELECT tablespace_name, file_name, file_size, hwm, file_size-hwm can_save
FROM (SELECT /*+ RULE */ ddf.tablespace_name, ddf.file_name file_name,
ddf.bytes/1048576 file_size,(ebf.maximum + de.blocks-1)*dbs.db_block_size/1048576 hwm
FROM dba_data_files ddf,(SELECT file_id, MAX(block_id) maximum FROM dba_extents GROUP BY file_id) ebf,dba_extents de,
(SELECT value db_block_size FROM v$parameter WHERE name=‘db_block_size’) dbs
WHERE ddf.file_id = ebf.file_id
AND de.file_id = ebf.file_id
AND de.block_id = ebf.maximum
ORDER BY 1,2);

然后执行
alter database datafile ‘/u01/oradata/xxxx.dbf’ resize xxxm;

暂无图片 评论
暂无图片 有用 0
黄伟波

有很多个数据文件的,不能按表空间瘦身吗

暂无图片 评论
暂无图片 有用 0
文成

其实没啥为什么,表空间是数据文件的集合,就算按照表空间去收缩也是一个文件一个文件的去处理

暂无图片 评论
暂无图片 有用 0
盖国强

Shrink ,虽然很慢很慢,但是有效。

暂无图片 评论
暂无图片 有用 0
盖国强
暂无图片 评论
暂无图片 有用 0
黄伟波

好的,谢谢盖总

暂无图片 评论
暂无图片 有用 0
黄伟波
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏