set transaction 命令有以下功能

1、给一个事物命名

set transaction  name  “tname”;

2、指定一个事物使用回滚段

set  transaction use rollback segment “回滚段名";

3、建立事物隔离级

set transaction  isolation level serializable;如果在设置隔离级前有更新表t1没有提交,在设置隔离级后,更新表会等待,先前的提交后,隔离级里的会报错);

set transaction level read commited(默认情况的设置,如果在设置隔离级前有更新表t1没有提交,在设置隔离级后,更新表会等待,先前的提交后,隔离级里的会执行);

4、指定事物是read-only or read/write

set transaction read only;(只能读,不能进行dml操作)(只能看到设置事物前数据的变化,看不到设置事物后数据的改变)

set transaction  read write;(默认情况是read write)(只能看到设置事物后数据的变化)

Restriction on Read-only Transactions Only the following statements are permitted in a read-only transaction:

  • Subqueries—SELECT statements without the for_update_clause

  • LOCK TABLE

  • SET ROLE

  • ALTER SESSION

  • ALTER SYSTEM

DECLARE
  daily_order_total    NUMBER(12,2);
  weekly_order_total   NUMBER(12,2);
  monthly_order_total  NUMBER(12,2);
BEGIN
   COMMIT; -- end previous transaction
   SET TRANSACTION READ ONLY NAME 'Calculate Order Totals';

SELECT SUM (order_total)
   INTO daily_order_total
   FROM orders
   WHERE order_date = SYSDATE;

SELECT SUM (order_total)
   INTO weekly_order_total
   FROM orders
   WHERE order_date = SYSDATE - 7;

SELECT SUM (order_total)
   INTO monthly_order_total
   FROM orders
   WHERE order_date = SYSDATE - 30;

COMMIT; -- ends read-only transaction
END;
/

set transaction语法:

一个事物隐式开始是以获取tx锁。例如 1、修改数据

2、SELECT ...FORUPDATE

                              3、使用SET TRANSACTION statement or theDBMS_TRANSACTION package

以commited 或者rollback,或者执行了ddl语句隐式提交结束事物;

试验1:

1在一个session 1中执行set transaction read only,查看表t1中的数据

2在sesssion 2 中修改数据,并且提交

3在session 1中查看表t1中的数据

4 在session 1 中查看数据

SQL> set transaction  read only;

事务处理集。

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                           777                    20
      7369 SMITH   CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN   SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD    SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES   MANAGER                  7839 02-4月 -81           2975                    20
      7654 MARTIN  SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE   MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK   MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING    PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER  SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES   CLERK                    7698 03-12月-81            950                    30
      7902 FORD    ANALYST                  7566 03-12月-81           3000                    20
      7934 MILLER  CLERK                    7782 23-1月 -82           1300                    10

已选择13行。

在session 2中修改表中的数据:

SQL> update t1 set sal=0 ;

已更新13行。

SQL> commit;

提交完成。

SQL> select *from t1;

EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                                          0                    20
      7369 SMITH                CLERK                    7902 17-12月-80              0                 20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81              0        300      30
      7521 WARD                 SALESMAN                 7698 22-2月 -81              0        500      30
      7566 JONES                MANAGER                  7839 02-4月 -81              0                 20
      7654 MARTIN               SALESMAN                 7698 28-9月 -81              0       1400      30
      7698 BLAKE                MANAGER                  7839 01-5月 -81              0                 30
      7782 CLARK                MANAGER                  7839 09-6月 -81              0                 10
      7839 KING                 PRESIDENT                     17-11月-81              0                 10
      7844 TURNER               SALESMAN                 7698 08-9月 -81              0          0      30
      7900 JAMES                CLERK                    7698 03-12月-81              0                 30
      7902 FORD                 ANALYST                  7566 03-12月-81              0                 20
      7934 MILLER               CLERK                    7782 23-1月 -82              0                 10

已选择13行。

查看session 1中的数据

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                           777                    20
      7369 SMITH   CLERK                    7902 17-12月-80            800                   20
      7499 ALLEN   SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD    SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES   MANAGER                  7839 02-4月 -81           2975                    20
      7654 MARTIN  SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE   MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK   MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING    PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER  SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES   CLERK                    7698 03-12月-81            950                    30

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD    ANALYST                  7566 03-12月-81           3000                    20
      7934 MILLER  CLERK                    7782 23-1月 -82           1300                    10

已选择13行。

在session 1中更新数据:

SQL> update t1 set sal=2;
update t1 set sal=2
*
第 1 行出现错误:
ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作

结论:1、从上述试验可以发现 设置了set transaction read only后,其他session修改t1表工资,在当前事物中的所有查询,只能看到这个事物开始前的所有变化,看不到这个事物开始后的所有表的变化。

2、set transaction read only 的当前session中只能读取数据,不能进行dml操作;

set transaction read only  不适合用在sys用户。

试验2:

1在一个session 1中执行set transaction read write,查看表t1中的数据

2在sesssion 2 中修改数据,并且提交

3在session 1中查看表t1中的数据

SQL> set transaction read write name 'aa';

事务处理集。

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                             0                    20
      7369 SMITH   CLERK                    7902 17-12月-80              0                    20
      7499 ALLEN   SALESMAN                 7698 20-2月 -81              0        300         30
      7521 WARD    SALESMAN                 7698 22-2月 -81              0        500         30
      7566 JONES   MANAGER                  7839 02-4月 -81              0                    20
      7654 MARTIN  SALESMAN                 7698 28-9月 -81              0       1400         30
      7698 BLAKE   MANAGER                  7839 01-5月 -81              0                    30
      7782 CLARK   MANAGER                  7839 09-6月 -81              0                    10
      7839 KING    PRESIDENT                     17-11月-81              0                    10
      7844 TURNER  SALESMAN                 7698 08-9月 -81              0          0         30
      7900 JAMES   CLERK                    7698 03-12月-81              0                    30

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD    ANALYST                  7566 03-12月-81              0                    20
      7934 MILLER  CLERK                    7782 23-1月 -82              0                    10

已选择13行。

在session  2中更新sal

SQL> update t1 set sal=1 ;

已更新13行。

SQL> commit;

提交完成。

在session 1 中查看结果

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                             1                    20
      7369 SMITH   CLERK                    7902 17-12月-80              1                    20
      7499 ALLEN   SALESMAN                 7698 20-2月 -81              1        300         30
      7521 WARD    SALESMAN                 7698 22-2月 -81              1        500         30
      7566 JONES   MANAGER                  7839 02-4月 -81              1                    20
      7654 MARTIN  SALESMAN                 7698 28-9月 -81              1       1400         30
      7698 BLAKE   MANAGER                  7839 01-5月 -81              1                    30
      7782 CLARK   MANAGER                  7839 09-6月 -81              1                    10
      7839 KING    PRESIDENT                     17-11月-81              1                    10
      7844 TURNER  SALESMAN                 7698 08-9月 -81              1          0         30
      7900 JAMES   CLERK                    7698 03-12月-81              1                    30

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD    ANALYST                  7566 03-12月-81              1                    20
      7934 MILLER  CLERK                    7782 23-1月 -82              1                    10

已选择13行。

结论:事物默认情况是read write的,从上述试验可以发现 设置了set transaction read write后,其他session修改工资,在当前事物中的所有查询,可以看到这个事物开始后的所有变化。

试验3:

SQL> set transaction name 'aa';

SQL> update t1 set sal=2;

已更新13行。

SQL> select xidusn,xidslot,xidsqn,used_ublk,used_urec,name from v$transaction;

XIDUSN    XIDSLOT     XIDSQN  USED_UBLK  USED_UREC NA
---------- ---------- ---------- ---------- ---------- --
        25          4        241          1          1 aa

结论:可以看到事物的命名

实验:set transaction isolation level serializable name 'aa';

1在session  2中更新t1表工资,并且不提交

2在session 1 中开始串行隔离级,并且更新t1表工资,不提交

3 session  2 提交事物

4 查看session 1

session 2:

SQL> update t1 set sal=1;

已更新13行。

SQL> select *from t1;

EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                                          1                    20
      7369 SMITH                CLERK                    7902 17-12月-80              1                 20
      7499 ALLEN                SALESMAN                 7698 20-2月 -81              1        300      30
      7521 WARD                 SALESMAN                 7698 22-2月 -81              1        500      30
      7566 JONES                MANAGER                  7839 02-4月 -81              1                 20
      7654 MARTIN               SALESMAN                 7698 28-9月 -81              1       1400      30
      7698 BLAKE                MANAGER                  7839 01-5月 -81              1                 30
      7782 CLARK                MANAGER                  7839 09-6月 -81              1                 10
      7839 KING                 PRESIDENT                     17-11月-81              1                 10
      7844 TURNER               SALESMAN                 7698 08-9月 -81              1          0      30
      7900 JAMES                CLERK                    7698 03-12月-81              1                 30

EMPNO ENAME                JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD                 ANALYST                  7566 03-12月-81              1                 20
      7934 MILLER               CLERK                    7782 23-1月 -82              1                 10

已选择13行。

session 1:

SQL> set transaction isolation level serializable name 'aa';

事务处理集。

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
         1 a                                                           777                    20
      7369 SMITH   CLERK                    7902 17-12月-80            800                    20
      7499 ALLEN   SALESMAN                 7698 20-2月 -81           1600        300         30
      7521 WARD    SALESMAN                 7698 22-2月 -81           1250        500         30
      7566 JONES   MANAGER                  7839 02-4月 -81           2975                    20
      7654 MARTIN  SALESMAN                 7698 28-9月 -81           1250       1400         30
      7698 BLAKE   MANAGER                  7839 01-5月 -81           2850                    30
      7782 CLARK   MANAGER                  7839 09-6月 -81           2450                    10
      7839 KING    PRESIDENT                     17-11月-81           5000                    10
      7844 TURNER  SALESMAN                 7698 08-9月 -81           1500          0         30
      7900 JAMES   CLERK                    7698 03-12月-81            950                    30

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM     DEPTNO
---------- ------- ------------------ ---------- -------------- ---------- ---------- ----------
      7902 FORD    ANALYST                  7566 03-12月-81           3000                    20
      7934 MILLER  CLERK                    7782 23-1月 -82           1300                    10

已选择13行。

SQL> update t1 set sal=2;

等待中

session 2:

commit

查看session 1:

SQL> update t1 set sal=2;
update t1 set sal=2
       *
第 1 行出现错误:
ORA-08177: 无法连续访问此事务处理

结论:如果在设置串行隔离级前如果修改了t1表,并且没有提交,再设置了串行隔离级后,修改t1表就会出现等待,并且如果设置隔离级之前的修改提交后,此表在隔离级里是不能被修改,会报错,这样保证了数据的一致性。

实验:set transaction isolation level READ COMMITTED name 'aa';

1在session  2中更新t1表工资,并且不提交

2在session 1 中开始隔离级 READ COMMITTED,并且更新t1表工资,不提交

3 session  2 提交事物

4 查看session 1

session 2:

SQL> update t1 set sal=1;

已更新13行。

session 1 :

SQL> set transaction isolation level READ COMMITTED name 'aa';

事务处理集。

SQL> select *from t1;

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM
---------- ------- ------------------ ---------- -------------- ---------- ---------- -
         1 a                                                           777
      7369 SMITH   CLERK                    7902 17-12月-80            800
      7499 ALLEN   SALESMAN                 7698 20-2月 -81           1600        300
      7521 WARD    SALESMAN                 7698 22-2月 -81           1250        500
      7566 JONES   MANAGER                  7839 02-4月 -81           2975
      7654 MARTIN  SALESMAN                 7698 28-9月 -81           1250       1400
      7698 BLAKE   MANAGER                  7839 01-5月 -81           2850
      7782 CLARK   MANAGER                  7839 09-6月 -81           2450
      7839 KING    PRESIDENT                     17-11月-81           5000
      7844 TURNER  SALESMAN                 7698 08-9月 -81           1500          0
      7900 JAMES   CLERK                    7698 03-12月-81            950

EMPNO ENAME   JOB                       MGR HIREDATE              SAL       COMM
---------- ------- ------------------ ---------- -------------- ---------- ---------- -
      7902 FORD    ANALYST                  7566 03-12月-81           3000
      7934 MILLER  CLERK                    7782 23-1月 -82           1300

已选择13行。

SQL> update t1 set sal=2;

出现等待

session 2:

SQL> commit;

提交完成。

查看session 1:

SQL> update t1 set sal=2;

已更新13行。

结论:如果在设置read commited隔离级前如果修改了t1表,并且没有提交,再设置了read commited隔离级后,修改t1表就会出现等待,并且如果设置隔离级之前的修改提交后,此表在隔离级里的等待消失,更新数据,这样保证了数据的一致性。

查看当前session的事物隔离级:

select decode(Bitand(Flag,268435456),268435456,'Serializable','Non-Serializable')
 From V$Transaction, V$Session
 Where Taddr=Addr and
 Sid=(SELECT USERENV('SID') FROM DUAL);

DECODE(BITAND(FLAG,268435456),26
--------------------------------
Non-Serializable

SQL> set transaction isolation level serializable name 'aa';

事务处理集。

SQL> update t1 set sal=1;

已更新13行。

SQL> select decode(Bitand(Flag,268435456),268435456,'Serializable','Non-Serializable')
  2   From V$Transaction, V$Session
  3   Where Taddr=Addr and
  4   Sid=(SELECT USERENV('SID') FROM DUAL);

DECODE(BITAND(FLAG,268435456),26
--------------------------------
Serializable

查看其他session是否隔离级

SQL> select decode(Bitand(Flag,268435456),268435456,'Serializable','Non-Serializable')
  2   From V$Transaction, V$Session
  3   Where Taddr=Addr and
  4   Sid=162;

https://cn.forums.oracle.com/forums/thread.jspa?messageID=10713568

set transaction相关推荐

  1. java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction. in /U

    错误内容如下 java.lang.IllegalStateException: Cannot modify managed objects outside of a write transaction ...

  2. redis 在 php 中的应用(事务 [ Transaction ] 篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: Transaction(事务) WATCH UNWATCH ...

  3. Oracle Block浅析2:ITL(Interested Transaction List)

    一.ITL(Interested Transaction List): ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block ...

  4. Fragment提交transaction导致state loss异常

    下面自从Honeycomb发布后,下面栈跟踪信息和异常信息已经困扰了StackOverFlow很久了. java.lang.IllegalStateException: Can not perform ...

  5. sql server 2005 T-SQL BEGIN TRANSACTION (Transact-SQL)

    标记一个显式本地事务的起始点.BEGIN TRANSACTION 使 @@TRANCOUNT 按 1 递增. Transact-SQL 语法约定 语法 BEGIN { TRAN | TRANSACTI ...

  6. mysql中transaction的实现

    transaction在数据库编程中是一个重要的概念,这样做可以控制对数据库操作的事务提交. 但是要想在程序中实现事务,要求数据库本身支持事务. 现在的关系型数据库,我们日常使用的mysql,orac ...

  7. ACID+CAP+BASE+Transaction(事务)

    ACID+CAP+BASE+Transaction(事务) 数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity).一致性(Consis ...

  8. CRM User Status profile中Business Transaction字段的用途

    有朋友问到User Status profile中Business Transaction字段的用途,如下图INPR, FINI所示. 实际上,这个字段作为一个桥梁,连接了User Status和Sy ...

  9. SAP QM 执行事务代码QS51维护使用决策的选择集,系统报错 – Transaction no longer valid for catalog ‘3’ -

    SAP QM 执行事务代码QS51维护使用决策的选择集,系统报错 – Transaction no longer valid for catalog '3' - 执行事务代码QS51,试图为工厂NMD ...

  10. We cannot activate inspection type for article master in transaction code MM41?

    We cannot activate inspection type for article master in transaction code MM41? Is it possible to pl ...

最新文章

  1. python yaml用法详解
  2. matlab水印剪切攻击程序,可以运行的水印matlab程序(嵌入,提取,攻击测试等).doc
  3. 第二部分:浅析 Linux 初始化 init 系统:upstart
  4. I00029 C语言程序-打印九九乘法表
  5. php intval 运算,PHP Intval 的 8、7 運算 8、7 問題
  6. 9:01 2009-7-20
  7. BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】
  8. 从零开始之驱动发开、linux驱动(二十六、三星平台framebuffer)
  9. java实现关注微信公众号推送模板消息
  10. 刀塔自走棋无限寻找服务器怎么办,刀塔自走棋无法连接服务器怎么办_刀塔自走棋无法连接服务器解决办法_玩游戏网...
  11. Visual Studio中输入英文会在字母之间自动增加空格
  12. 【mysql】mysql查询结果添加固定值
  13. 服务器光纤信号灯,光纤收发器的六个指示灯都代表什么?
  14. python多核运行程序_python单进程能否利用多核cpu的测试结论
  15. sparksql语法,读json
  16. 第一阶段项目(2 body)
  17. Java OpenCV 图像白平衡算法
  18. 上海西门子培训-第四天(周三)
  19. 如何安装linux_在Ubuntu系统上如何制作Linux安装U盘
  20. 【CRISPR-Cas9神助攻】 Cas9稳定表达细胞系、CRISPR/Cas9敲除细胞系

热门文章

  1. Chrome Network面板工具之万文多图详解
  2. java多线程归并排序_并行计算实验-串、并行排序算法
  3. 机器学习6-强化学习
  4. html有序列表序号字体大小,css – 对不同字体大小的排序列表编号进行样式化
  5. php7 获取客户端 ip 地址
  6. CESM学习笔记(CIME)1 :介绍和query_config
  7. UE、UI、UCD、UED?你知道你是干啥的吗
  8. 微信小程序抓包教程:Burpsuite版 附所需工具
  9. 没有期刊申请清华博士_清华大学官方:“博士生无须发表论文”理解有误!
  10. windows下如何查看本机所在局域网内所有可以访问的IP