Oracle 并发回滚
问题描述:
数据库突然出现大量的回滚进程。
问题分析:
从v
s
e
s
s
i
o
n
中
看
到
操
作
的
对
象
是
T
A
B
1
及
表
上
的
索
引
。
但
是
为
什
么
会
使
用
并
发
来
回
滚
呢
?
查
询
视
图
v
session中看到操作的对象是TAB1及表上的索引。但是为什么会使用并发来回滚呢? 查询视图v
session中看到操作的对象是TAB1及表上的索引。但是为什么会使用并发来回滚呢?查询视图vfast_start_transactions
点击(此处)折叠或打开
select usn,slt,seq,state,undoblockstotal,undoblocksdone,xid,rcvservers from v$fast_start_transactions;
USN SLT SEQ STATE UNDOBLOCKSTOTAL UNDOBLOCKSDONE XID RCVSERVERS
34 24 5044735 RECOVERED 40861 40861 00220018004CF9FF 256
45 26 2937596 RECOVERED 40862 40862 002D001A002CD2FC 256
45 7 2935629 RECOVERED 40861 40861 002D0007002CCB4D 256
46 14 2594590 RECOVERED 60436 60436 002E000E0027971E 256
15 19 3116186 RECOVERED 40863 40863 000F0013002F8C9A 256
48 9 1713657 RECOVERED 29744 29744 00300009001A25F9 256
16 44 3088013 RECOVERED 16098 16098 0010002C002F1E8D 256
39 25 5180630 RECOVERED 18 18 00270019004F0CD6 1
39 42 5314292 RECOVERED 40861 40861 0027002A005116F4 256
7 21 3077967 RECOVERED 40862 40862 00070015002EF74F 256
42 24 3950504 RECOVERED 40861 40861 002A0018003C47A8 256
43 11 3892882 RECOVERED 40862 40862 002B000B003B6692 256
21 23 3309555 RECOVERED 112751 112751 0015001700327FF3 256
10 38 3186672 RECOVERED 29632 29632 000A002600309FF0 256
14 rows selected.
smon trace文件:
点击(此处)折叠或打开
Dead transaction 0x0020.02f.00471f24 recovered by 128 server(s)
Dead transaction 0x0024.00f.004430af recovered by 1 server(s)
Dead transaction 0x0012.020.002c6126 recovered by 1 server(s)
Dead transaction 0x0025.00a.00416a26 recovered by 1 server(s)
Dead transaction 0x000d.01a.0029c77e recovered by 1 server(s)
Dead transaction 0x0001.019.002a55d8 recovered by 1 server(s)
根据对12/9 12:59和17:30左右时间点的redo进行logminer解析,导致回滚的语句是对表TAB2更新。其中对TAB2的更新触发了trigger。
该trigger更新了表TAB1。
- 下面是从17:21~ 17:29对象redo使用排序,其中TAB2有19万条记录更新。
点击(此处)折叠或打开
SEG_NAME CNT
5457509
TAB1 923207
…
…
TAB2 190329
2. 其中update语句使用的是同一个xid 0027002A005116F4,这个xid和trace文件中进行recover 事务号一致。