Oracle undo表空间爆满的解决

 
1. 查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间:
Show parameter undo_tablespace。
 


2. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置;
select file_name, bytes / 1024 / 1024 / 1024
  from dba_data_files
 where tablespace_name like 'UNDOTBS%';
 
3. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
select s.username, u.name
  from v$transaction t, v$rollstat r, v$rollname u, v$session s
 where s.taddr = t.addr
   and t.xidusn = r.usn
   and r.usn = u.usn
 order by s.username;
 
查询结果为空的话就能删除。
 
4. 检查UNDO Segment状态;
select usn,
       xacts,
       rssize / 1024 / 1024 / 1024,
       hwmsize / 1024 / 1024 / 1024,
       shrinks
  from v$rollstat
 order by rssize;
 
这还原表空间中还存在12个回滚的对象。
 
5. 创建新的UNDO表空间,并设置自动扩展参数;
 create undo tablespace undotbs2 datafile '/dbfile/jjywjzjy3/undotbs02.dbf' size 128m reuse autoextend on next 100m maxsize unlimited;
 alter  tablespace undotbs2 add datafile  '/dbfile/jjywjzjy3/undotbs021.dbf' size 128m reuse autoextend on next 100m maxsize unlimited;
 
 
6. 切换UNDO表空间为新的UNDO表空间 , 动态更改spfile配置文件;
 
alter system set undo_tablespace=undotbs2 scope=both;  


drop tablespace undotbs1 including contents and datafiles;
 
7.验证当前数据库的 UNDO表空间
SQL> show parameter undo
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2


7. 等待原UNDO表空间所有UNDO SEGMENT OFFLINE;
select usn,
       xacts,
       status,
       rssize / 1024 / 1024,
       hwmsize / 1024 / 1024,
       shrinks
  from v$rollstat
 order by rssize;
 
select usn,
       xacts,
       status,
       rssize / 1024 / 1024,
       hwmsize / 1024 / 1024,
       shrinks
  from v$rollstat
 order by rssize;
select t.segment_name, t.tablespace_name, t.segment_id, t.status
  from dba_rollback_segs t;


8.到$ORACLE_HOME/dbs/init$ORACLE_SID.ora如下内容是否发生变更:
#cat $ORACLE_HOME/dbs/initddptest.ora
……
*.undo_management=’AUTO’
*.undo_retention=10800
*.undo_tablespace=’UNDOTBS2’
……


 
9. os级别释放undo数据文件;
 
到root下执行
lsof |grep /u02/pnrdb/undotbs01.dbf
 
lsof |grep /u02/pnrdb/undotbs01.dbf |awk '{printf"kill -9 "$2"\n"}'

你可能感兴趣的:(ORACLE,ORACLE,undo,空间满)