oracle 11G表空间如何删除多余的数据文件

qq_44782417 2020-12-02 08:44:49
求助!求助!因前期数据量过大,一个表空间加了6个30G的数据文件,现在数据转存到FTP,数据库只用了不到10G的空间,如何删除其他的5个数据文件?
...全文
699 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
收缩下,不要去删。 要删也得把数据文件上的所有对象挪走后,才可以删。
  • 打赏
  • 举报
回复
你这个情况直接删除肯定不行的,有两种方式 一是,把现在表空间所有对象都remove到其他表空间,然后直接删除这个表空间。 二是,不删除这些数据文件,都只做resize。给你一个参考脚本
SELECT
  a.file_id,
  a.file_name
  file_name,
  CEIL( ( NVL( hwm,1 ) * blksize ) / 1024 / 1024 ) smallest,
  CEIL( blocks * blksize / 1024 / 1024 ) currsize,
  CEIL( blocks * blksize / 1024 / 1024 ) -
  CEIL( ( NVL( hwm,1) * blksize ) / 1024 / 1024 ) savings,
  'alter database datafile ''' || file_name || ''' resize ' ||
  CEIL( ( NVL( hwm,1) * blksize ) / 1024 / 1024 ) || 'm;' cmd
FROM
  DBA_DATA_FILES a,
  (
     SELECT  file_id, MAX( block_id + blocks - 1 ) hwm
     FROM    DBA_EXTENTS
     GROUP BY file_id
  ) b,
  (
     SELECT TO_NUMBER( value ) blksize
     FROM   V$PARAMETER
     WHERE  name = 'db_block_size'
  )
WHERE
  a.file_id = b.file_id(+)
AND
  CEIL( blocks * blksize / 1024 / 1024 ) - CEIL( ( NVL( hwm, 1 ) * blksize ) / 1024 / 1024 ) > 0
ORDER BY 5 desc
  • 打赏
  • 举报
回复
引用 3 楼 qq_44782417 的回复:
找了下资料,可以直接这样做吗? alter tablespace tablespace_name drop datafile '';
如果你数据文件是空的可以,你这种情况已经使用过是不行的
qq_44782417 2020-12-02
  • 打赏
  • 举报
回复
找了下资料,可以直接这样做吗?
alter tablespace tablespace_name drop datafile '';

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧