数据库突然,把磁盘空间占满,经常是由于回滚段空间导致,所以需要清理回滚段
step 1、查看正在使用的回滚段表空间
SELECT T.tablespace_name FROM dba_tablespaces t WHERE t.contents = 'UNDO';
step 2、查看回滚段表空间文件路径
这里查看路径后以便 后面创建新的回滚段空间
SELECT t.file_name FROM dba_data_files t where t.tablespace_name='UNDOTBS1';
step 3、重新创建一个临时表空间
create undo tablespace UNDOTBS2
datafile '/app/data/dmispdb/undo/undotbs201.dbf' size 34358689792
;
step 4、 切换表空间
alter system set undo_tablespace = temp_undo scope=both;
step 5、删除回滚表空间以及文件
Drop tablespace UNDOTBS1 including contents and datafiles;
报错 后 重启数据库
step 6 、删除表空间错误处理
重启数据库删除还报错, ora-30013
--查看事务
select * from dba_rollback_segs
where tablespace_name='UNDOTBS1' and status = 'ONLINE';
--找到session
select SID, substr(username, 1, 10) username, serial#, segment_name
from v$transaction, dba_rollback_segs, v$session
where saddr = ses_addr
and xidusn = segment_id;
-- 杀进程
alter system kill session 'SID,SERIAL#' immediate;
step 7、 检查磁盘空间
df -h
删除表空间文件后,检查磁盘空间 ,发现空间还未释放
然后百度说可能是还有其他进程在使用undo,只是 之前没有杀进程时,没有查到。需要再次重启数据库,
重启后,发现磁盘空间已经是否,不再占用100%