oracle只读事物,oracle的只读事务

一致性读是oracle区别于其他数据库的重要特点之一,但一般来说,这个一致性读是sql级别的,只针对单个sql有效。

由于业务逻辑需要,我们可能需要在一个事务中的多个sql也能实现读一致性,也就是说,数据源在事务开始时就定下来了,不受其他会话影响。oracle的只读事务可以实现这个功能,它可以在事务级别上实现读一致性。

看下面的实验:

SQL> select * from t1;

ID

---------------------------------------

1

SQL> set serverout on

SQL>

SQL> create or replace procedure p_test is

2 l_id int;

3 begin

4 select id into l_id from t1;

5 dbms_output.put_line(l_id);

6 dbms_lock.sleep(15);

7 select id into l_id from t1;

8 dbms_output.put_line(l_id);

9 end p_test;

10 /

Procedure created

SQL> exec p_test;

--在p_test运行期间(执行dbms_lock.sleep时),修改t1的数据:

SQL> update t1 set id=2;

1 row updated

SQL> commit;

Commit complete

--以下是输出结果

1

2

可以看到,由于第二次读取t1表的数据时,由于有其他会话修改并提交了t1表的数据,所以第二次得到的结果是2.

我们对这个p_test做一个简单的修改,设置只读事务:

SQL> create or replace procedure p_test is

2 l_id int;

3 begin

4 set transaction read only;

5 select id into l_id from t1;

6 dbms_output.put_line(l_id);

7 dbms_lock.sleep(15);

8 select id into l_id from t1;

9 dbms_output.put_line(l_id);

10 end p_test;

11 /

Procedure created

SQL> exec p_test;

--在p_test运行期间(执行dbms_lock.sleep时),修改t1的数据:

SQL> update t1 set id=3;

1 row updated

SQL> commit;

Commit complete

--以下是输出结果

2

2

可以看到,虽然第二次读取t1表的数据前,已经有其他会话修改并提交了t1表的数据,但第二次得到的结果仍然是2.

这就是只读事务的功能,它在整个事务中保证一致性读:在整个事务中的数据在事务开始时就决定,即使有其他会话在事务周期内修改并提交数据,也不会影响事务。可以认为在只读事务周期内,其他事务的对数据的改变就像不存在一样。

在显式提交或者回滚后、或执行ddl后,结束只读事务。需要注意:因为只读事务的原理是读取undo中数据的前镜像来实现一致性读的,所以,只读事务运行时间不能过长,否则会报0ra-01555。

还有一点,只读事务下是不能对数据做修改的:

suk@ORA10G> set transaction read only;

事务处理集。

suk@ORA10G> delete from test;

delete from test

*

第 1 行出现错误:

ORA-01456: 不能在 READ ONLY 事务处理中执行插入/删除/更新操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/571126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获得网页中元素的位置

网页大小: clientWidth和clientHeight。 最快速的方法:getBoundingClientRect() 获得top, right, bottom, left,是获得元素距离viewport的左上角。 获得元素的相对位置:不断向父元素获得offsetHeight和offsetWidth。 获得元素的绝…

实验一 软件工程准备

1、实验目的与要求 (1) 学习通过博客园软件开发者学习社区的协作与支持完成软件工程课程学习的技巧和经验。 (2) 掌握Github操作; 2、实验内容和步骤 任务1:在以下网址提交课程调查问卷:https:/…

matlab气相分解反应动力学,第十二章 化学动力学.ppt

快反应 慢反应 速控法 稳态法 (1) 一级反应 (2) 二级反应 高压时 低压时 RRKM理论 12.7 光化学反应 * 物理化学(下) PHYSICAL CHEMISTRY (11) 碰撞理论 单分子反应理论 过渡态理论 光化学反应 催化反应动力学 本章主要内容: 12 化学动力学基础(二) 反应速率理论 碰撞…

深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

http://blog.csdn.net/u014595019/article/details/52989301转载于:https://www.cnblogs.com/mdumpling/p/8527799.html

基础题

1,别名,内部,外部,hash优先级? 2,screen协助 1.一台screen -S 协助名称 2.另外一台screen -ls 列出目前开的协助会话(session),找到上面协助名称对应的session号。 3. sc…

oracle查询字段精度,【Oracle】查询字段的长度、类型、精度、注释等信息

在mysql中alter命令可以修改字段类型,长度,名称或一些其它的参数,下面我来给大家介绍alter函数修改字段长度与类型的两个命令,希望文章来给各位带来帮助. mysql 修改字段长度 alter table news modify column title varchar(130); alter table 表名 modify column 字段名 …

linux改文件后run,linux下.run文件如何安装与卸载

w 表示可写入,其中 u 表示该档案的拥有者,有个 uninstall 文件, r 表示可读取,利用 chmod 可以藉以控制档案如何被他人所调用。执行./uninstall就ok了 下面是其他网友的补充: 比如安装QT编程软件 安装方法如下 命令第一…

leetcode链表题

1. sort_list Sort a linked list in O(n log n) time using constant space complexity. 分析:时间复杂度是nlogn,所以可以考虑归并排序。取中点,对左边和右边分别递归排序,最后合并。 知识点:快慢指针,用来取链表中点…

linux进程管理之mm_struct,【转】Linux进程管理之SMP负载平衡(续二)

继续来分析balance_tasks()函数,结合代码中的注释,理解这段代码应该很容易,在这里主要分析它的两个重要的子函数,即can_migrate_task()和pull_task().先来看can_migrate_task().该函数用来判断当前进程是否能够迁移到目标cpu上,代码如下:staticint can_migrate_task(struct tas…

分治法求最大最小

分治法的基本思想&#xff1a;是将一个规模为n的原问题分解为k个规模较小的子问题&#xff0c;这些子问题互相独立且与原问题相同。递归地解这些子问题&#xff0c;然后将子问题的解合并为原问题的解。 1 #include<stdio.h>2 /* 分治法计算最大值和最小值的算法程序&…

linux安装程序乱码,linux远程桌面乱码解决及引起的相关问题、字库安装

一、解决linux中文乱码问题通过xmanager远程访问linux(我这里使用redhat as5)&#xff0c;原先本机可以看到的中文出现乱码(ssh终端访问时也是乱码)。如何解决这一问题&#xff1f;其实&#xff0c;很简单只要设置系统字符集就行。具体如下&#xff1a;1、修改/etc/sysconfig/i…

第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进

第12课第2.2节 字符设备驱动程序之LED驱动程序_测试改进 //仅用flash上的根文件系统启动后&#xff0c;手工MOUNT NFSmount -t nfs -o nolock,vers2 192.168.31.202:/work/nfs_root /mnt //在虚拟机中操作/work/nfs_root/tmp$ sudo chown book:book fs_mini_mdev -R //修改为可…

linux查看目录下文件个球,球服务翻译……只找到以前版本的。新版的服务名称改了……...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼还是优化的问题……看得懂地我就关了。比如蓝牙什么的……5985ms fedora-storage-init.service4451ms colord-sane.service3578ms udev-settle.service1545ms NetworkManager.service1492ms boot.mount1443ms systemd-vconsole-set…

大数据笔记(十三)——常见的NoSQL数据库之HBase数据库(A)

一.HBase的表结构和体系结构 1.HBase的表结构 把所有的数据存到一张表中。通过牺牲表空间&#xff0c;换取良好的性能。 HBase的列以列族的形式存在。每一个列族包括若干列 2.HBase的体系结构 主从结构&#xff1a; 主节点&#xff1a;HBase 从节点&#xff1a;RegionServer 包…

linux内核网络钩子函数使用,Linux内核IOCTL网络控制框架实现实例分析

4.6、inet_ioctl函数由于inet_ioctl函数内容分支很多,但功能、处理不难理解,所以我把一些不常见的内容都省去,挑简单重要的说,完全在于抛砖引玉:static int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg){…switch(cmd){case FIOSETOWN://设置属主cas…

(转)递归转非递归的思路和例子

转自&#xff1a;http://blog.51cto.com/cnn237111/1241956 某些算法逻辑&#xff0c;用递归很好表述&#xff0c;程序也很好写。理论上所有的递归都是可以转换成非递归的。如果有些场合要求不得使用递归&#xff0c;那就只好改成非递归了。 通常改成非递归算法的思路&#xff…

Linux自动亮度,ubuntu亮度无法自动调节终极解决方案

关于ubuntu亮度无法自动调节的问题&#xff0c;纠结了我快两年&#xff0c;主要是自己懒&#xff0c;写了个脚本来调节亮度&#xff0c;不过还是稍显不便。近日兴起折腾了一番&#xff0c;终于找到问题根结了。There are many ways to control brightness. According to this d…

NHibernate:no persister for 异常

几种原因&#xff1a; 1、配置文件后缀名写错 mapping file 必须是.hbm.xml结尾 2、Web.config配置里面引用实体 <session-factory> ........................ <mapping assembly"Project.DomainModel"/> <!-- Here --> </session-factory>…

拦截器的的调用顺序

拦截器的的调用顺序 a&#xff1a;首先&#xff0c;要找到它自己有没有声明拦截器的引用&#xff0c;即<action>元素有没有<interceptor-ref>子元素&#xff0c;如果有&#xff0c;则不用继续寻找&#xff08;即不会再使用b,c即默认的拦截器栈等&#xff09;&#…

嵌入式linux 试卷,嵌入式Linux模拟试卷

B. 在目标机上开发&#xff0c;在宿主机上运行C. 在宿主机上开发&#xff0c;在宿主机上运行D. 在目标机上开发&#xff0c;在目标机上运行10. ARM9寄存器组有______个寄存器。【2.0分】A. 7B. 32C. 6D. 3711. 以下叙述中&#xff0c;不符合RICS特征的是______。【2.0分】A. 指…