`
rmzdb
  • 浏览: 78497 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

【转】oracle 只读事务 与 没有事务

 
阅读更多

概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据)

 

应用场合:

如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性; 
如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
【注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务】

 

怎样设置:

对于只读查询,可以指定事务类型为readonly,即只读事务。
由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段,例如Oracle对于只读事务,不启动回滚段,不记录回滚log。

(1)在JDBC中,指定只读事务的办法为: connection.setReadOnly(true);

(2)在Hibernate中,指定只读事务的办法为: session.setFlushMode(FlushMode.NEVER); 
此时,Hibernate也会为只读事务提供Session方面的一些优化手段

(3)在Spring的Hibernate封装中,指定只读事务的办法为: bean配置文件中,prop属性增加“readOnly”
或者用注解方式@Transactional(readOnly=true)
【 if the transaction is marked as read-only, Spring will set the Hibernate Session’s flush mode to FLUSH_NEVER, 
and will set the JDBC transaction to read-only】也就是说在Spring中设置只读事务是利用上面两种方式

 

 

 

看下面的实验:
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

分享到:
评论

相关推荐

    oracle笔记(韩顺平oracle视频教学整理)

    只读事务是指只允许执行查询的操作,而不允许执行任何其它 dml 操作的事务, 使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天 18 点开始统计今天的销售情况,这时可以使用只读事务。

    ORACLE9i_优化设计与系统调整

    第一部分 ORACLE系统优化基本知识 23 第1章 ORACLE结构回顾 23 §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) n(-84~127) 可以存储正数、负数、零、定点数和精度为38位的浮点数...

    精通Oracle.10g.PLSQL编程

    使用SQL语句 4.1 使用基本查询 4.1.1 简单查询语句 4.1.2 使用...只读事务 4.3.5 顺序事务 4.4 数据分组 4.4.1 分组函数 4.4.2 GROUPBY和HAVING 4.4.3 ROLLUP和CUBE 4.4.4 ...

    oracle动态性能表

    它将指出是否系统主要用于只读访问或是主要进行诸多数据操作(如:inserts/updates/deletes) 公式:db block changes / session logical reads 执行: select a.value/b.value from v$sysstat a,v$sysstat b ...

    oracle数据库经典题目

    尤其适合多用户环境中,可以生成唯一的序列号而没有磁盘I/O或事务处理锁定开销。 21. 一个表空间具有离线(OFFLINE)、在线(ONLINE)、只读(READ ONLY)、读写(READ WRITE)状态。 二、选择 1.在全局存储区SGA中,哪...

    精通SQL 结构化查询语言详解

    18.5.2 设置只读事务(READ ONLY)  18.5.3 Oracle中的隔离级别  第19章 嵌入式SQL  19.1 SQL的调用  19.1.1 直接调用SQL 19.1.2 嵌入式SQL  19.1.3 SQL调用层接口(CLI)  19.2 嵌入式SQL的使用  ...

    oracle 11g overview

    轻松添加具有默认值的列,浏览不可见的索引、虚拟列和只读表。 SQL 计划管理 使用在每次选择正确计划的绑定变量,并确保新的执行计划在使用前已经过完善。 SQL Performance Analyzer 准确评估重新编写 SQL 语句...

    ORACLE DBA 手册

    对只读类数据的设计规化 5 二、部署时调优 6 系统参数调整 6 调整LGWR 6 调整DBWR写进程 6 调整LGWR I/O 7 调整Dml_locks 8 调整Open_cursors 8 调整Data_links 8 调整系统进程数Processes 9 调整会话Sessions 9 ...

    精通SQL--结构化查询语言详解

    第1章 数据库与sql基础 1 1.1 数据库的基本概念 1 1.1.1 数据库的由来 1 1.1.2 数据库系统的概念 3 ...18.1.3 sql中与事务有关的语句 374 18.2 事务控制的具体实现 376 18.2.1 开始事务 376 18.2.2 set ...

    Spring.html

    requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:使用数据库默认的隔离级别(mysql:可重复读,oracle:读...

    高频大数据解决方案.pptx

    整合:高性能导出 并行导出 接近最大线速 基于事先建立的连接 Hadoop CSV JDBC (PostgreSQL, MySQL, Oracle) Netezza Vertica VoltDB 建立了一个基于事务的,可持久化的导出框架 在VoltDB完成高质量、实时分析、...

    SQL语法大全

    EditMode 只读 只读 只读 只读 EOF 只读 只读 只读 只读 Filter 可读写 可读写 可读写 可读写 LockType 可读写 可读写 可读写 可读写 MarshalOptions 可读写 可读写 可读写 可读写 MaxRecords 可读写 可读写 可读写 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例157 设置文本框的只读属性 188 实例158 自动计算金额 189 实例159 为文本框设置默认值 190 实例160 设置文本框的样式 191 实例161 文本域的滚动条 192 3.3 下拉列表的应用 193 实例162 省市级联动菜单 193 实例...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例157 设置文本框的只读属性 188 实例158 自动计算金额 189 实例159 为文本框设置默认值 190 实例160 设置文本框的样式 191 实例161 文本域的滚动条 192 3.3 下拉列表的应用 193 实例162 省市级联动菜单 193 实例...

    asp.net知识库

    .net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下...

    spring3.2+strut2+hibernate4

    --将action内容放在package元素下,package元素的name值与extends值可以使用默认值,如下所示 --> <interceptors> <interceptor name="authority" class="com.sbz.application.common.LoginIntercepter" /> ...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...

Global site tag (gtag.js) - Google Analytics