0
点赞
收藏
分享

微信扫一扫

Oracle数据库临时表空间占用空间太大解决

您好 2022-03-21 阅读 31
dba

一、新建UNDO表空间,替换原来的UNDO表空间
查看所有表空间名字

select name from v$tablespace;

1.创建一个新的小的undo表空间
执行

CREATE UNDO TABLESPACE UNDOTBS01  DATAFILE 'D:\app\dbtemp\UNDOTBS01.DBF' SIZE 100M REUSE AUTOEXTEND ON;

其中 ‘D:\app\dbtemp\UNDOTBS01.DBF’ 为表空间文件想要存储的位置,100M 表示新的表空间的初始大小。

2.设置新的表空间为系统的Undo表空间
执行

ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS01;

3.重启数据库(重启数据库服务)

4.删除旧的Undo表空间
依旧使用sys用户登录,执行

DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES;

原文件UNDOTBS01.DBF会直接被删除

二、新建TEMP表空间,替换原来的TEMP表空间
1、首先查看当前的数据库默认表空间:

select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

确认当前的临时表空间为TEMP

2.创建新的临时表空间temp01

create temporary tablespace temp01 tempfile 'D:\app\dbtemp\temp01.dbf' size 512M;

3.把新建的临时表空间换成数据库的默认临时表空间

alter database default temporary tablespace temp01;

4.确认目前数据库的默认临时表空间

select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

5.在删除temp临时表空间之前,查看temp临时表空间正在运行的sql

Select se.username,se.sid,se.serial#,su.extents,su.blocks*to_number(rtrim(p.value))as Space,
tablespace,segtype,sql_text
from v$sort_usage su,v$parameter p,v$session se,v$sql s
where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash
and s.address=su.sqladdr
order by se.username,se.sid;

kill掉:

alter system kill session '8,2';

(8为SID、2为serial)

5.删除temp临时表空间(文件太大删除不了可手动删除,前提是以上操作都成功)

drop tablespace temp including contents and datafiles;
alter database tempfile 'D:\app\db\TEMP01.DBF' drop;

6.可以重复以上操作把temp再恢复到原来位置

7.重启数据库服务

举报

相关推荐

0 条评论