`
rmzdb
  • 浏览: 81312 次
  • 性别: 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中使用事务

    只读事务不允许数据修改操作,而回滚段用于存储回滚信息,以支持事务的回滚操作。例如: ```sql SET TRANSACTION READ ONLY; ``` 这将开启一个新的只读事务,限制了在该事务中能执行的操作类型。常见的限制包括:...

    oracle事务处理

    Oracle 事务处理是数据库管理中...总的来说,Oracle的事务处理机制是确保数据库操作正确性和一致性的重要工具,通过合理使用提交、回滚、保存点以及只读事务,可以有效地管理复杂的数据库操作,并保证数据的准确无误。

    Oracle事务、锁表查询及相关实用查询SQL语句

    ### Oracle事务、锁表查询及相关实用查询SQL语句 #### 一、Oracle事务管理 在Oracle数据库中,事务是作为一组逻辑操作单元处理的一系列数据库操作。这些操作要么全部成功,要么全部失败,确保了数据的一致性和完整...

    oracle 事务实验

    只读事务 - **作用**:用于读取数据,不能进行任何修改操作。 - **示例**: ```sql SQL> set transaction readonly; ``` 尝试插入数据: ```sql SQL> insert into t1 values(1); ERROR at line 1: ORA-...

    07.Oracle事务1

    另外,可以使用`set transaction`语句来配置事务的特性,如设置事务为只读或读/写,选择不同的隔离级别,分配事务名称或回滚段等。例如: ``` set transaction read only; set transaction isolation level ...

    Oracle事务概念及基础知识.pdf

    只读事务也是一种特殊类型,不参与并发控制,无法修改数据。 5. **事务的开始和结束** 在Oracle中,事务始于DML(数据操纵语言)操作,如INSERT、UPDATE或DELETE,直到遇到`COMMIT`或`ROLLBACK`语句结束。`...

    分布式事务

    #### 六、Oracle 实验室测试与分布式事务 - **实验测试**:在正式部署之前,通过实验室环境模拟实际场景,测试分布式事务的性能和稳定性。 - **PL/SQL 与 XA**:在 Oracle 数据库中使用 PL/SQL 进行编程时,需要...

    05oralce的事务 PPT

    在Oracle中,可以使用`SET TRANSACTION READ ONLY`命令开始一个只读事务,例如: ``` BEGIN TRANSACTION; SET TRANSACTION READ ONLY; -- 执行查询操作 COMMIT; ``` 这样可以提高并发性能,因为只读事务不需要锁定...

    JAVA(Spring)事务管理.doc

    接着,`TransactionDefinition`接口是事务的定义信息,它包含了事务的隔离级别、传播行为、超时设置以及是否为只读事务。隔离级别是防止并发事务之间数据冲突的重要手段,常见的隔离级别有READ_UNCOMMITTED、READ_...

    oracle数据库的并发控制.docx

    Oracle支持只读事务,其特点是: - 在事务中仅允许查询操作。 - 其他事务可以修改和查询数据。 - 在事务期间,不会看到其他用户的任何修改。 只读事务可以通过`SET TRANSACTION READ ONLY`语句创建,并且可以通过`...

    韩顺平玩转oracle学习笔记

    - 只读事务用于只读取数据而不进行任何更新操作。可以通过设置`Connection`对象的`setReadOnly(true)`方法来启用。 #### 六、Oracle函数 - Oracle提供了丰富的内置函数,如数学函数、日期函数、转换函数等。 ####...

    oracle数据库回滚段专题解析

    1. **设置事务为只读**:`SET TRANSACTION READ ONLY;` 2. **设置事务的序列化级别**:`SET TRANSACTION SERIALIZABLE;` 需要注意的是,第二种方法虽然能提供更严格的事务隔离级别,但它可能会对数据库的并发性能...

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

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

    Oracle 12c受限模式 只读模式 静默模式 延迟模式

    以上介绍了Oracle 12c中四种特殊的运行模式——受限模式、只读模式、静默模式和延迟模式。这些模式各有其独特的用途,可以帮助DBA们更高效、安全地管理数据库。理解并熟练掌握这些模式对于日常的数据库管理和维护...

    ORACLE的隔离级别

    只读事务保证了事务级的读一致性,但不允许任何数据修改操作。 在提交读(read committed)级别,Oracle确保事务不会读取未提交的更改,但可能会发生幻像读。例如,如果事务A在两次查询之间有事务B插入满足条件的新...

    Oracle.jdbc for win

    这个包包含了Java Database Connectivity (JDBC)驱动程序,使得Java应用程序能够与Oracle数据库进行交互。JDBC是Java平台的标准API,它允许Java程序员使用SQL语言来访问和操作数据库。 在Oracle.jdbc中,主要有以下...

    DB2和 Oracle的并发控制

    例如,IS锁用于只读操作,S锁允许其他只读事务,而X锁则提供读写权限。行锁也有多种模式,它们与表锁相互配合,共同确保并发访问的正确性。 【DB2锁升级】为优化内存使用,DB2允许锁升级。当一个事务对表的操作增多...

    Oracle DBA 面试题

    15. 数据并发与一致性(Data Concurrency and Consistency):了解Oracle提供的锁机制、事务的隔离级别、如何解决死锁等问题,以确保数据的一致性和并发性能。 16. Oracle实例架构(Oracle Instance Architecture)...

    Oracle GoldenGate 19c 白皮书.pdf

    7. **多平台支持**:Oracle GoldenGate支持各种来源和目标,包括大数据环境,如SQL Server Always On的只读副本和DB2的Schema变更跟踪及长事务监控。 8. **安全性和性能**:支持SSL和数据加密,确保数据安全;采用...

Global site tag (gtag.js) - Google Analytics