回滚段

--如果你发现有回滚段的数据文件丢失或者损坏了,而此时的数据库是处于打开的状态下并且在运行,就千万不要关闭它,因为在大多数的情况下,打开的
--时候比关闭的时候好解决问题一些。


--创建撤销表空间
CREATE SMALLFILE UNDO TABLESPACE "ROLLBACK" DATAFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ALASKA\rollback' SIZE 50M REUSE autoextend on


--创建手动回滚段
CREATE PUBLIC ROLLBACK SEGMENT "RBS1" TABLESPACE "RBS" STORAGE (INITIAL 1M NEXT 1M OPTIMAL 8M MINEXTENTS 8 MAXEXTENTS UNLIMITED )
ALTER ROLLBACK SEGMENT "RBS1" ONLINE


--查看所有的回滚段,shrinks很大,可以认为回滚段设置太小或者optimal设置太小;waits太大,是回滚段个数少
select a.usn,b.segment_name,a.rssize "大小",a.waits,a.wraps "环绕次数",a.shrinks "回缩次数" from v$rollstat a,dba_rollback_segs b where a.usn=b.segment_id;

--指定事务使用哪些回滚段
set transaction use rollback segment XXX; 

--Extent的使用从一个跨越到另一个的次数
select usn,wraps from v$rollstat;

--假设USN为n,则回滚段头class为11+2n,回滚段块为12+2n
select class,count(*) from x$bh where class>10 group by class;

--回滚段不能越过未提交的事务extent而循环使用,这时候就须要扩展了。在扩展后,是要回缩的

--根据flashback功能的需要来设定undo_retention的时间长度(在被覆盖前保留的最长时间,秒)

--修改文件/opt/..../admin/pfile/init.ora.162007221035,如下:
 undo_management=manual
 undo_retention=10800
 undo_tablespace=undotBS2
 _CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)    --(注:允许在rollback segments损坏的情况下启动数据库)
 _allow_resetlogs_corruption=true     --(注:允许在数据库文件SCN不一致的情况下启动数据库)

--删除回滚段
alter rollback segment rbs1 offline;
drop rollback segment rbs1;
--经过offline操作仍然是online,说明回滚段内有活动的事务,如果状态为pending offline表示很快就会offline
select segment_name ,xacts active_TX,v.status from v$rollstat v,dba_rollback_segs where tablespace_name='HHH' and segment_id=usn;
--查询哪些用户占用了回滚段
select s.sid,s.serial#,s.username,r.name rollback from v$session s,v$transaction t,v$rollname r where r.name in ('','') and s.taddr=t.addr and t.xidusn=r.usn;
--通知用户自己回滚或提交,不能做到的话就强关它
alter system kill session ',';

--删除损坏的undotbs1表空间,需要提醒的是,在删除损坏的重做表空间时,一定要先offline,否则注释掉隐含参数后,启动就会出现下面的情况。
--ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> alter tablespace undotbs1 offline normal;
SQL> drop tablespace UNDOTBS1 including contents and datafiles;

--查看回滚段头和回滚段块的争用,如果严重增加回滚段个数和增大回滚段大小
select * from v$waitstat where class like 'undo%';

--查询当前某个session的事所使用的回滚段大小
select b.sid,a.xidusn,a.used_ublk from v$transaction a,v$sessio
n b where a.addr=b.taddr;

--查询到底是什么session阻塞了别的session,引发锁等待(RDBMS\Admin\utllockt.sql更强大)
select username,v$lock.sid,trunc(id1/power(2,16)) rbs,bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 seq,lmode,request from v$lock,v$session where v$lock.type='TX' and v$lock.sid=v$session.sid and v$session.username=user;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cyco008/archive/2008/03/16/2187821.aspx

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22123669/viewspace-675609/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22123669/viewspace-675609/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值