关于ORACLE事务处理的一些笔记

这是2013年在看ORACLE概念手册的时候的一些笔记,现在整理如下(可能跟其他一些文章的内容有重复):

20131012 周六

oracle概念手册中文版 第4章 事务管理

  事务具有原子性,要么全部提交,要么全部回滚。

  事务开始于第一条可执行的sql语句,结束语commit或者rollback操作。执行一个ddl操作可以自动的触发commit操作。

  下列java代码:
DataSource ds = DataSourceGen.getDataSourceFromXML();

Connection conn = ds.getConnection();

PreparedStatement ps = conn.prepareStatement("update pub_organ o set o.organ_name = ‘221112‘ where o.organ_id = ‘O50649824‘");

ps.executeUpdate();

ps = conn.prepareStatement("update pub_organ o set o.in_use = ‘1111‘ where o.organ_id = ‘O50649824‘");//此处会报错 因为in_use只能有一位

ps.executeUpdate();

conn.close();

每次执行executeUpdate都会自动触发commit操作,所以第二个报错,第一个仍然后执行成功。

如果加上conn.setAutoCommit(false);那么将不会再executeUpdate的时候自动触发commit,这种情形下将会在两种commit,一个是commit代码,一个是关闭conn自动触发commit。

也就是说如果不加conn.setAutoCommit(false);,那么每条sql都是一个事务。

  执行一个ddl操作可以自动的触发commit操作。

begin

update pub_organ o set o.organ_name = ‘1‘ where o.organ_id = ‘O50649824‘; --事务开始第一个可执行语句

execute immediate ‘create or replace view vvvv as select * from pub_organ‘;--ddl操作结束上一个事务 并commit(ddl操作本身要占用一条事务)

update pub_organ o set o.organ_name = ‘2‘ where o.organ_id = ‘O50649824‘; --新事务开始

update pub_organ o set o.in_use = ‘ddd0‘ where o.organ_id = ‘O50649824‘;--此处会报错 rollback

commit;

end;

oracle概念手册中文版 第13章 事务管理

  oracle强制实现语句级读一致性。一个再复杂的查询,即使耗时很长,它最终执行获取的数据都是执行开始那个时间点的数据,执行过程中其他用户提交的改变不会造成影响。

  隐式的查询,如delete和update中的where字句,insert中的子查询等,都能保证语句级读一致性。

  如果 SELECT 列表中存在 PL/SQL 函数,那么函数中包含的 SQL 语句将遵从其自身的语句级读一致性,而非其所在 SQL 的读一致性.

  当一个事务运行在串行化模式(serializable mode)下时,Oracle 还能够实现事务级读一致性(transaction-level  read consistency),事务内所有数据访问均反映的是事务开始时的数据状态。

  需要预防的现象:
5.1 脏读 读取到其他用户未提交的数据oracle实现了语句读一致性,所以不可能出现脏读的现象。
5.2 不可重复读 同一条数据两次读取的结果不一样
5.3 幻读 同一个where条件过滤 两次读取结果集不一样

  隔离级别
已提交读取:默认的隔离级别。可以防止脏读。
串行化读取:oracle从已提交读取直接跳到了串行化读取,没有针对不可重复读和幻读分别提供隔离级别。
只读模式:只读事务只能看到事务执行前就已经提交的数据,且事务中不能执行 INSERT,UPDATE,及DELETE 语句。这个是oracle的创新,不是sql的标准。

分析:oracle这种设计,你要么使用默认的隔离级别,要么就串行。只读模式应用场景较少。

  设置事务的隔离级别。
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
SET TRANSACTION READ ONLY;

  已提交读取和串行化读取中:
 读操作都不会阻塞其他用户的写操作。
 已提交读取中sql的执行查询到的是sql执行那一点的数据状态。
 串行化读取中slq的执行查询到的是事务开始那一点的数据状态。

  串行化读取并不是真的串行的。串行事务中读取的内容可以被其他用户修改并提交,只是当前事务看不到而已。串行事务不能解决所有的问题,有时候需要在应用层开发代码来进行控制。

20131014 周一

oracle概念手册中文版 第13章 事务管理

  如果系统中存在长时间运行的写事务,且其所操作的数据同时还会被大量的小事务更新,则此类系统不应采用串行化模式。因为长事务所需更新的数据可能会被其他事务抢先更新,则长事务可能需要重复地回滚,浪费系统资源。需要注意的是,其他数据库管理系统所实现的串行化隔离(使用读取锁(read-locking))同样不适合上述情况,因为长事务(即便是只执行读取操作的事务)会和短小的写事务相互阻塞。

  使用select * form ttt for update;(在存储过程中需要在execute immediately中执行)可以获取对应行的排他锁。排他锁是一种阻止其他事务进行更新的锁。

  获取表的排他锁:
 lock table pub_organ in exclusive mode;锁定整张表其他用户不可以执行dml操作,也不可以获取其他任何锁。

获取表的共享锁: 
lock table pub_organ in share mode;;锁定整张表其他用户不可以执行dml操作,但是也可以获取共享锁。

不管是那种模式,lock table的代码就像一句update的代码一样,遇到commit或者rollback后才会解除lock。如果表中的某一行被更新未提交,或者插入为提交,那么lock操作将阻塞。

  自治事务:如果对一个过程设置了自治事务,那么调用它的外层和它本身使用两个事务,互不影响。

时间: 2024-12-27 04:56:39

关于ORACLE事务处理的一些笔记的相关文章

oracle事务处理及实例演示jdbc操作批量删除

事务 作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成.当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个很好的应用. 对于事务的基本性质在另一篇中有所叙述:SQL 事务及实例演示 oracle和sql server在事务上区别 sql server中的事务一般分为隐式事务.显式事务.自动提交事务. 自动事务:对于sql server来说,当客户端提交一条sql语句时,这时候sql server都会自动启动一个事务:对于这样的事务,在执行完sql语句后会自动提交

oracle 电子商务解决方案演讲会笔记

1. 电商营销(CRM) - 高端客户的体验 2. 当当网李国庆做 "千人千面"的购物体验 3. 唯品会使用了oracle的CRM 4. 个性化的东西,得用户体验者得天下. 5. 奖励长期关系,维护客户忠诚度. 6. ebay产品推荐用oracle的 7. Atg + Endeca + Fatwire 8. Nike 鞋子定制,彰显个性,私有定制. 9. 电商给客户的体验是一对一的专属服务,区别于淘宝的大众化消费体验. 10. 电子商务重在营销和运营 11.宝格丽的营销策略是私人定制,

oracle事务处理及实例演示jdbc操作批量删除 2014年8月11日

事务 作为逻辑处理的基本单位,对于数据库操作来说由一条或者多条sql语句来构成.当然还有针对非数据库操作的,如在计算机中设置的还原点即是一个很好的应用. 对于事务的基本性质在另一篇中有所叙述:SQL 事务及实例演示 oracle和sql server在事务上区别 sql server中的事务一般分为隐式事务.显式事务.自动提交事务. 自动事务:对于sql server来说,当客户端提交一条sql语句时,这时候sql server都会自动启动一个事务:对于这样的事务,在执行完sql语句后会自动提交

MS SQL到Oracle的数据迁移笔记

MS SQL到Oracle的数据迁移笔记 一.任务背景 旧系统使用MS SQL Server数据库,新系统使用Oracle数据库,现在需要将旧系统中的数据迁移到新系统中,旧数据按照约定的规则转换后,能够在新系统中使用或查询.另外,新系统的实施人员并不清楚旧系统的数据结构,且两个新旧两个系统的使用的数据结构有较大的差异.为了叙述方便,将旧系统维护人员简称为A,新系统实施人员简称为B. 二.总体思路 1.  A与B根据各自了解的信息,一起制定中间表: 2.  A从MS SQL Server提取数据,

oracle 事务处理 注意事项(笔记)

事务:一个独立的逻辑工作单元.它有特定的一系列必须作为一个整体一起成功或者失败的SQL语句组成.是一个要么全有要么全无,很个性的一个东东. 事务的四大属性——ACID属性:原子性(atomicity).一致性(consistency).隔离性(isolation).持久性(durability) 原子性:事务中的所有任务都必须执行,或者不执行.不存在部分事务. 一致性:事务将数据库从一个一致性状态带到另一个一致性状态. 隔离性:一个事务所带来的影响知道该事物提交之前对其他事务来说都是不可见得.

Oracle事务处理

原文转自:(http://www.cnblogs.com/ITtangtang/archive/2012/04/23/2466554.html) 一.事务概念事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据操作语言,增删改,没有查询)语句要么全部成功,要么全部失败.如:网上转账就是典型的要用事务来处理,用于保证数据的一致性. 二.事务和锁当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户修改表的结构.这里对我们的用户来讲是非常重要的. 三.提

常用oracle语句-------------------------------------------》(笔记)

  Orale常用语句 1:查询指定表名的字段 select * from sys.user_tab_columns where table_name=表名 //查询指定表名的字段 2: 查询数据库参数 show parameter db; 3:查询数据库的实例名 select instance_name from v$instance; 3:数据库安装结束后,如果要知道正在运行额数据库是否有域名以及数据库域名名称可以用 select value from v$parameter where n

Oracle.PL.SQL.程序设计笔记 day01

自定义变量 variable x varchar(20) 注:在变量x前加冒号,是表示这是一个变量. 设置了x变量,当CMD窗口关闭后,变量失效. [glogin.sql] D:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\glogin.sql ---- Copyright (c) 1988, 2005, Oracle.  All Rights Reserved.---- NAME--   glogin.sql---- DESC

oracle grid 11g学习笔记-安装配置

目录说明: -安装准备 1.1 环境信息 1.2 需要安装依赖包 1.3 用户配置 1.4 存储安装配置 1.5 操作系统参数配置 1.6 环境变量配置 1.7 ssh信任配置 1.8 vnc配置 1.9 asm存储配置 -oracle软件安装 2.1 grid安装 2.2 oracle安装 2.3 asm磁盘划分 2.4 数据库实例安装 -安装问题 3.1 问题1 3.2 问题2 3.3 问题3 3.4 问题4 3.5 问题5 一 安装准备 当企业对于数据库要求比较高,或负载压力比较大的时候,