DG库怎样释放bigfile类型临时数据文件的空间

本文详细描述了如何处理Oracle数据库中一个5TB的大临时数据文件占用问题,通过在主库上新建临时表空间,指定新表空间,然后删除旧表空间并同步从库,最终确认空间释放的过程。
摘要由CSDN通过智能技术生成

一 问题描述

生产DG从库的一个临时数据文件达到了5T,主库上有2T。

这个临时数据文件是bigfile的。

dba_tablespaces的bigfile值是'YES'

bigfile类型的表空间只能有一个数据文件,无法通过新增一个数据文件,再删除大数据文件的方式释放空间。

如果resize的话,这么大的文件可能会报错,这里计划在主库重建这个临时表空间来释放空间。

二 操作步骤

2.1 在主库新建一个新的临时表空间,并指定该临时表空间为用户的默认表空间

--为了避免删除大临时文件比较慢,删除过程中影响业务使用,所以先提前建一个新临时表空间。

2.1.1 在主库上新建临时表空间

示例:

create bigfile temporary tablespace ab_temp1 tempfile '/oracle/oradata/ab_temp01.dbf' size 200g AUTOEXTEND ON NEXT 1G MAXSIZE 1024G;

--黄色阴影部分根据实际情况,酌情修改

2.1.2 在从库上新增临时文件

由于在主库新建临时表空间,只会往从库同步数据字典,但不会同步临时文件,所以需要在从库手动创建临时文件。普通的数据文件是可以同步的,只临时文件不能同步。

示例:

alter tablespace ab_temp1 add tempfile '/oracle/oradata/ab_temp01.dbf' size 200g AUTOEXTEND ON NEXT 1G MAXSIZE 1024G;

2.1.3 在主库指定用新的临时表空间

alter user ab temporary tablespace ab_temp1;

select temporary_tablespace from dba_users where username='AB';

2.2 删除旧的比较占用空间的临时表空间

2.2.1 停业务或者杀掉占用老临时表空间的会话

杀会话影响更小些。

① 查出要杀哪些会话

SELECT S.sid,

S.serial# sid_serial,

S.username,

S.osuser,

S.module,

S.program,

T.tablespace,

P.spid,

'kill -9 ' || P.spid

FROM v$sort_usage T, v$session S, dba_tablespaces TBS, v$process P

WHERE T.session_addr = S.saddr

AND S.paddr = P.addr

AND T.tablespace = TBS.tablespace_name

and TBS.tablespace_name='AB_TEMP';

② 在操作系统上执行查出来的kill -9的杀会话的名称

2.2.2 在主库删除旧表空间

DROP TABLESPACE ab_temp INCLUDING CONTENTS AND DATAFILES;

在主库删除临时表空间,可以同步删除从库的临时表空间。

2.3 检查确认空间是否释放

……

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值