Oracle并发问题:死锁、活锁现象的示例
在Oracle数据库中,并发问题主要表现为两种极端情况:死锁和活锁。
死锁示例:
假设有两个事务T1和T2,它们对资源R1和R2有需求:
- T1需要R1和R2(假设顺序是R1 -> R2)
- T2需要R2和R1(假设顺序是R2 -> R1)
在Oracle中,如果T1获取了R1,然后试图获取R2,而此时T2已经获取了R2并开始尝试获取R1。这样的循环会导致死锁。
活锁示例:
活锁通常是因为多个事务对资源的访问顺序不一致,导致每个事务都无法继续进行。
例如,两个事务T1和T2,它们都需要从表中选择数据。假设T1先选择了A1的数据,然后尝试获取B1的数据;而此时T2还没有开始选择,它直接选择了B1的数据并尝试获取A1的数据。
由于T1的两次请求都在等待T2释放资源,而T2在释放前又会等待T1释放,形成了死循环。这样的情况就属于活锁现象。
还没有评论,来说两句吧...