You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DB2交互式SQL中设置Read Stability等隔离级别并执行命令?

DB2隔离级别手动测试的正确操作方法

核心问题纠正

你遇到的报错有两个原因:

  1. DB2不支持RC这个隔离级别,DB2的标准隔离级别为**UR(未提交读)、CS(游标稳定)、RS(读稳定)、RR(可重复读)**四类,没有RC对应的级别。
  2. CHANGE ISOLATION不是DB2命令行处理器(CLP)的有效命令,正确的隔离级别设置方式有两种,适合手动会话操作的如下:

前提准备

所有测试会话都需要关闭自动提交(才能手动控制事务生命周期),并连接到目标数据库:

# 进入DB2交互模式并关闭自动提交
db2 +c
# 连接SAMPLE数据库
db2 => connect to sample
# 可验证自动提交状态(可选)
db2 => get command options | grep AUTOCOMMIT

方法1:为单个事务设置隔离级别

该方式仅对当前事务生效,事务结束(COMMIT/ROLLBACK)后恢复默认级别:

  • 设置Read Stability(RS):
    db2 => SET TRANSACTION ISOLATION LEVEL READ STABILITY;
    
  • 其他隔离级别对应语句:
    • RR(可重复读):SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    • CS(游标稳定):SET TRANSACTION ISOLATION LEVEL CURSOR STABILITY;
    • UR(未提交读):SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

执行完隔离级别设置后,即可执行查询、更新等操作,直到执行COMMIT或ROLLBACK结束当前事务。

方法2:为当前会话设置默认隔离级别

该方式会让当前会话的所有后续事务都使用指定级别,直到会话结束:

  • 设置Read Stability(RS):
    db2 => SET ISOLATION RS;
    
  • 其他隔离级别缩写:
    • RR:可重复读
    • CS:游标稳定
    • UR:未提交读

RS隔离级别测试示例(双会话)

会话1操作:

  1. 进入交互模式并连接数据库(已关闭自动提交)
  2. 设置RS隔离级别并执行查询:
    SET TRANSACTION ISOLATION LEVEL READ STABILITY;
    SELECT * FROM EMP WHERE DEPTNO = '10';
    
  3. 保持会话打开,不要执行COMMIT/ROLLBACK

会话2操作:

  1. 同样进入交互模式并连接数据库(关闭自动提交)
  2. 尝试更新会话1查询过的行:
    UPDATE EMP SET SALARY = SALARY * 1.1 WHERE DEPTNO = '10';
    
    此时会话2会被阻塞——RS隔离级别下,会话1的查询会对符合条件的所有行加共享锁,阻止其他事务修改这些行。

回到会话1:

执行COMMIT;提交事务,此时会话2的UPDATE操作会立即执行完成,即可观察到RS隔离级别的锁行为。

内容的提问来源于stack exchange,提问作者Paul A Jungwirth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:53:16