5M五一期间需要truncate一张600G的大表,清空表之后理论上表空间会剩余600G空间,请问下应该如何对这个表空间做瘦身。
有没有一个比较规范的表空间瘦身方案?
例如最多可以瘦身到多少,相关命令等
首先需要确定高水位,这个决定你的文件能缩小到多少,
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
墨值悬赏

