Linux Oracle并发控制方法
一 核心机制
二 并发控制手段与SQL实践
SELECT … FOR UPDATE [OF 列] [NOWAIT|SKIP LOCKED](获取行级锁,避免脏写;NOWAIT/SKIP LOCKED用于冲突快速失败或跳过已锁行)。LOCK TABLE … IN [ROW SHARE|ROW EXCLUSIVE|SHARE|SHARE ROW EXCLUSIVE|EXCLUSIVE] MODE [NOWAIT](控制更强,谨慎使用)。ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED|SERIALIZABLE;SET TRANSACTION ISOLATION LEVEL READ COMMITTED|SERIALIZABLE;(必须是事务首条语句)。FOR UPDATE或适当表级锁提前加锁,适合冲突频繁、强一致要求场景。三 锁类型与兼容性要点
| 模式 | 简称 | 典型SQL/操作 | 主要相容性约束 |
|---|---|---|---|
| Row Share | RS/SS | SELECT … FOR UPDATE |
与SX/S/SSX/X互斥 |
| Row Exclusive | RX/SX | INSERT/UPDATE/DELETE |
与S/SSX/X互斥 |
| Share | S | CREATE INDEX、LOCK TABLE … IN SHARE MODE |
与RX/SX/SSX/X互斥 |
| Share Row Exclusive | SRX/SSX | LOCK TABLE … IN SHARE ROW EXCLUSIVE MODE |
与S/RX/SX/X互斥 |
| Exclusive | X | ALTER TABLE/DROP/TRUNCATE、LOCK TABLE … IN EXCLUSIVE MODE |
与所有模式互斥 |
四 监控 诊断 与调优
SELECT * FROM v$lock;、SELECT * FROM v$session; 结合 v$sqlarea 定位SQL;必要时用 ALTER SYSTEM KILL SESSION 'SID,SERIAL#'; 终止阻塞会话(需谨慎)。