RAC中各实例使用各自的undo表空间。undo表空间满后的处理方式有两种:1、扩充undo表空间、2、创建新的undo表空间,并却换到新undo表空间。下面介绍第二种方式。
1、创建新的undo表空间
created tablespace undotbs3 datafile '+DATA/DSSP/DATAFILE/UNDOTBS03.dbf' size 10M autoextend on maxsize 200000M;
2、将新建的undo表空间设为本实例的undo表空间
alter system set undo_tablespace = 'UNDOTBS3' scope=both;
3、验证本实例的undo表空间
show parameter undo_tablespace;
4、等待原undo表空间offline
select r.status "status",
r.segment_name "Name",
r.tablespace_name "Tablespace",
s.extents "Extents",
TO_CHAR((s.bytes/1024/1024),'99999990.000') "Size"
FROM sys.dba_rollback_segs r, sys.dba_segments s
WHERE r.segment_name = s.segment_name
AND s.segment_type IN ('ROLLBACK', 'TYPE2 UNDO')
and r.tablespace_name='UNDOTBS1' and status='ONLINE' ;
如果上面有状态为online的对象,可以查处对应的sid,serial#。
5、查看当前是什么在使用这个回滚段
select r.name,s.sid,s.serial# serial
s.username ,s.machine ,
t.start_time,t.status ,
t.used_ublk ,
substr(s.program, 1, 15) "operate"
FROM v$session s, v$transaction t, v$rollname r,v$rollstat g
WHERE t.addr = s.taddr
AND t.xidusn = r.usn
AND r.usn = g.usn
ORDER BY t.used_ublk desc;
6、根据sid查处具体的sql
select sql_text from v$session a,v$sqltext_with_newlines b
where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
and a.sid=&sid order by piece;
如果查出的sql不重要可以kill掉。
7、删除原undo表空间
drop tablespace undotbs2 including contents and datafiles;
查看表空间及数据文件是否已被删除。
如果不成功,可参考博文:undo无法drop。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26690043/viewspace-1327062/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26690043/viewspace-1327062/