一般事务(DML)即数据修改(增、删、改)的事务
事务会将所有在事务中被修改的数据行加上锁(行级锁),来阻止其它人(会话)同时对这些数据的修改操作。
当事务被提交或回滚后,这些数据才会被释放锁。
举个例子:
当A操作一条数据N1后,暂未提交事务 ,此时B又上来操作同一条数据N1,这时的情况是:
1、所有除A以外的人看不到被A所修改后的数据
2、B会处于等待状态,直到A提交或回滚了针对这条数据的修改(这也就是行级锁的概念)
3、当A提交事务后,所有人可以看到被A修改后的数据,看不到B修改后的数据。但B能看到自己修改后的数据(与A一样,因为B还未提交事务)。
4、当B提交事务后,所有人可以看到被B修改后的数据。
由上可以看出,对同一条数据的事务处理,必须按先后顺序进行。
即:A先提交了事务后,B才可以提交事务,否则B将无法对这条数据进行修改(B会在操作这条数据时处于等待状态,直到A提交或回滚了事务,释放了这行数据的锁)。
这里注意一点,这里所说有A与B并不是指二个ORACLE帐户,而是二个连接会话。上面只是为了方便举例。
就是说即使是在同一台电脑上用同一个ORACLE帐户,但同时分别打开了二个连接会话(比如同时打开二个PL/SQL并用相同帐户连接到同一个库中),就会被视为A、B两个人。
在PS/SQL中,对数据修改完后,如果用户未提交事务,但关闭或断开了PS/SQL,此时ORACLE会立即提交此会话的事务。
我们可以事务中使用保存点来回滚到指定的时间节点上来,但如果用提交事务(commit)后,所有保存点将被删除。
举个举子:
savepoint a1; --设置一个保存点 a1;
update tmp set username='张三' where userid='101' --修改一条数据
savepoint a2; --设置一个保存点 a1;
update tmp set username='李四' where userid='102 --再修改一条数据
rollback to a2; --回滚到a2 保存点。 此时在 a2 保存点之后的所有数据修改视为无效。
rollback to a1; --这里可以再从a2保存点再回滚到a1 保存点。 此时在 a1 保存点之后的所有数据修改视为无效。
rollback; --回滚全部。即撤消至上一次提交事务后的所有数据修改。
commit; --提交事务 将回滚后的事务提交,并会删除所有保存点。
注意:我们可以从a2向前再回滚到a1 ,但无法从a1回滚到a2。也就是只能向前回滚,不能从前面的点再向后回滚!
只读事务 即,只用于select 查询的事务
只读事务主要用于在某一个时间点对数据的查询统计。如:在18:00创建一个只读事务,然后可以开始统计某张表的记录数。此时18:00之后新添加到这张表中的数据就不会进入到统计中去。也就是创建只读事务的会话连接人,将无法看到在创建只读事务之后其它任何人对数据的真实修改。
方法是:
set transaction read only; --在此之后,拥有此会话的连接人将无法看到其它人对数据的任何改动。用户可以用select 进行此时间点的统计查询
set transaction read write; --取消只读事务
只读事务没有回滚和提交的功能也不记录回滚LOG。
只读事务最大的用处是保证在某个时间点查询结果的一致性。换句话说,如果你要统计很多信息,有多个select查询时,但你执行完第一个查询后(如用户信息统计),可能其它人进来修改了某些数据你正在查询的数据。这时你再进行第二个查询(如用户信息的统计或其它有关用户信息的查询)。这时候将出现数据查询结果的不一致,第二次查询的结果会由于数据被修改了而与第一次查询结果一不样。只读事务正是解决这类问题的办法。
其实ORACLE为了优化查询在对于单条查询时也会启动只读事务(就是在你开始执行查询时会有一个只读事务点,到查询结束前,在这期间的数据修改都被无视掉),你无须手动创建只读事务。但多条查询时我们就必须手动创建只读事务。
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-07/66120.htm
相关推荐
Oracle数据库的锁机制是保证数据并发访问安全的重要手段,它主要分为行级锁(TX锁)和表级锁(TM锁)。行级锁确保在多用户环境下,同一时间只有一个用户可以更新特定的数据行,而其他用户可以读取,但不能进行修改。...
Oracle事务与锁定是数据库管理系统中的核心概念,它们对于确保数据的完整性和一致性至关重要。事务是数据库操作的基本单元,它封装了一系列的数据库操作,确保这些操作要么全部成功,要么全部失败,从而保持数据库的...
Oracle行级锁是数据库管理系统中用于确保数据并发访问安全的重要机制。它主要针对单个行或者一组行进行锁定,以防止多个事务同时修改相同的数据,从而避免数据的不一致性。行级锁相比于表级锁提供了更高的并发性能,...
- `SAVEPOINT`:设置保存点,在事务中保存当前状态,之后可以回滚到这个保存点。 - `SET TRANSACTION`:设置事务的属性,如只读或读写。 #### 二、锁表机制 在Oracle中,为了防止并发操作导致的数据不一致问题,...
Oracle 事务处理是数据库管理中...总的来说,Oracle的事务处理机制是确保数据库操作正确性和一致性的重要工具,通过合理使用提交、回滚、保存点以及只读事务,可以有效地管理复杂的数据库操作,并保证数据的准确无误。
当一个事务提交或回滚后,所有由该事务产生的锁都会被自动释放。如果需要强制解锁特定的会话,可以使用`ALTER SYSTEM KILL SESSION 'SID,SERIAL#'`命令,其中`SID`和`SERIAL#`是目标会话的会话ID和序列号。 #### ...
Oracle事务管理 Oracle事务是指一组数据库命令,构成单一逻辑工作单元的操作集合。事务是访问并可能更新各种数据项的一个程序执行单元,是不可分割的工作逻辑单元。执行并发操作的最小控制单位。 事务的特性包括...
Oracle数据库的事务管理和锁机制是确保数据库稳定性和数据一致性的重要组成部分。事务是数据库操作的基本逻辑单元,具有四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性...
Oracle数据库的事务管理和锁机制是确保数据完整性和一致性的重要...此外,Oracle的锁定机制(如行级锁、表级锁、读锁、写锁等)也在此起着重要作用,它们帮助协调并发事务,防止数据冲突,确保数据库系统的稳定运行。
TX锁在事务开始修改时获得,直到事务提交或回滚才释放。 - DDL锁(Data Definition Language Locks):用于保护数据库对象的创建,如视图、索引、存储过程等。包括排他DDL锁、共享DDL锁和可中断解析锁,主要用于DDL...
本篇笔记主要围绕相克军老师的ORACLE锁讲座内容展开,详细介绍了Oracle中的锁类型、行级锁与表级锁的使用,以及锁的兼容性和相关视图。 1. **ORACLE 锁类型** - **Latch 锁**:Latch 是一种轻量级锁,用于保护...
- 使用COMMIT提交事务释放锁,或者使用ROLLBACK回滚事务并释放锁。 4. **并发控制与死锁**: 虽然悲观锁能有效防止数据冲突,但它可能导致高并发环境下的性能问题和死锁。死锁是两个或更多事务因互相等待对方释放...
三、Oracle事务 事务是数据库操作的基本单元,它包含了一组逻辑操作,这些操作要么全部成功,要么全部回滚。Oracle中,事务的开始、提交和回滚通过以下命令完成: ```sql BEGIN; -- 开始事务 -- 执行SQL操作 COMMIT;...
MySQL数据库在处理并发操作时,为了保证数据的一致性和完整性,使用了不同的锁机制,包括行级锁、表级锁和页级锁。这三种锁的粒度不同,各有优缺点,适用于不同的场景。 行级锁是MySQL中最细粒度的锁,仅锁定操作的...
- Oracle提供了保存点(SAVEPOINT)的功能,允许用户回滚事务到指定的保存点,而不需要回滚整个事务。 - SQL Server同样支持保存点的概念,使用SET TRANSACTION ISOLATION LEVEL语句可以设置事务的隔离级别,控制...
一旦事务提交或回滚,所有由该事务获取的锁将被释放。 Oracle数据库通过内部机制自动管理锁的获取和释放,但在高并发环境下,了解锁的行为和避免死锁对于优化应用程序性能至关重要。 #### 结论 理解Oracle数据库...
在数据块的dump分析中,我们可以看到一些关键信息,如最后一次cleanout的SCN、事务ID(Xid)、回滚段地址(Uba)、事务标志位(Flag)以及事务的状态(如已提交、未提交或活动状态)。每个记录的行级锁信息(lb)与...