欢迎投稿

今日深度:

4.事务提交过程,事务基本概念,Oracle中的事务生

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别,oraclesavepoint



  1. 事务提交过程

  1. 事务

基本概念

概念:一个或者多个DML语言组成

特点:要么都成功,要么都失败

事务的隔离性:多个客户端同时操作数据库的时候,要隔离它们的操作,

否则出现:脏读  不可重复读  幻读

Oracle默认情况下,事务是打开的

commit案例:

SQL> create table t1(tid int,tname varchar2(20));

 

表已创建。

 

SQL> select * from tab;

 

TNAME                          TABTYPE  CLUSTERID

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

BONUS                          TABLE

DEPT                           TABLE

EMP                            TABLE

EMP10                          TABLE

SALGRADE                       TABLE

T1                             TABLE

 

已选择6行。

 

SQL> insert into t1(tid,tname) values(1,'aaaaa');

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL> commit;

 

提交完成。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL>

rollback案例:

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL> insert into t1(tid,tname) values(2,'bbb');

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

         2 bbb

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

       TID TNAME

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

         1 aaaaa

SQL>

 

  1. Oracle中的事务生命周期

1.事务的起始标志 DML语言(oracle默认事务是打开的)

2.事务的结束标志

提交

显式提交commit

隐式提交

执行DDL语句

Eg:执行create table的时候还有1个隐式的功能

提交之前没有提交的DML语句(insert update

正常退出

回滚

显式rollback

隐式:掉电/宕机/非正常退出,这几者等价于系统出错了

4 保存点savepoint

案例:

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL> insert into t1(tid,tname) values(2,'bbb');

 

已创建 1 行。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

         2 bbb

 

SQL> rollback;

 

回退已完成。

 

SQL> select * from t1;

 

       TID TNAME

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

         1 aaaaa

 

SQL>

总结:最后一条insert语句没有插入进去,回滚到了指定的保存点

  1. 数据库的隔离级别

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题

脏读:对于两个事务T1,T2T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚。T1读取的内容就是临时且无效的。

不可重复读:对于两个事物T1,T2T1读取了一个字段,然后T2更新了该字段,之后T1再次读取同一个字段,值就不同了。

幻读:对于两个事务T1T2T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行。

数据库事务的隔离性:数据库系统必须具有隔离并发运行多个事务的能力,使它们不会相互影响,避免各种并发问题。

一个事务与其他事务隔离的程度称为隔离级别. 数据库规定了多种事务隔离级别, 不同隔离级别对应不同的干扰程度, 隔离级别越高, 数据一致性就越好, 但并发性越弱

数据库提供4中事务隔离级别:sql99

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE. Oracle 默认的事务隔离级别为: READ COMMITED

另外还支持一种隔离级别:read-only

Mysql 支持 4 中事务隔离级别. Mysql 默认的事务隔离级别为: REPEATABLE READ

 


Oracle怎显式开启事务,开始事务跟锁有什关系,在存储过程中有时怎开启与提交,回滚事务的

oracle使用语句savepoint sp_begintran开启显式事务,锁本身和事务是没有关系的,只要是数据库的操作都会产生锁。处于事务中的SQL语句只有这个事务提交(commit)之后,事务中的SQL语句影响的表记录上的锁才会释放。锁常见有共享锁(select语句产生)和排它锁(DML语句产生),如果一个表上加载有共享锁,还可以叠加共享锁,但不能叠加排它锁。如果一个表上加载有排他锁,就什么锁都不能加了,也就是说如果DML语句占用过多的时间,这些数据库效率就不高,就需要优化,当然select语句性能低了也不行。
每个存储过程可以不用显式事务,它本身就为你开启了一个隐式事务,如果需要开启显示事务,就通过savepoint sp_begintran开启,无论是不是显式还是隐式事务,你都得通过commit work提交事务,通过exception捕捉SQL语句异常,在异常发生时需要回滚事务(rollback work)。
 

对数据库事务处理的方法

一 事务处理介绍
事务是这样一种机制,它确保多个SQL语句被当作单个工作单
元来处理。事务具有以下的作用:
* 一致性:同时进行的查询和更新彼此不会发生冲突,其他
用户不会看到发生了变化但尚未提交的数据。
* 可恢复性:一旦系统故障,数据库会自动地完全恢复未完
成的事务。

二 事务与一致性
事务是完整性的单位,一个事务的执行是把数据库从一个一
致的状态转换成另一个一致的状态。因此,如果事务孤立执行时
是正确的,但如果多个事务并发交错地执行,就可能相互干扰,
造成数据库状态的不一致。在多用户环境中,数据库必须避免同
时进行的查询和更新发生冲突。这一点是很重要的,如果正在被
处理的数据能够在该处理正在运行时被另一用户的修改所改变,
那么该处理结果是不明确的。
不加控制的并发存取会产生以下几种错误:
1 丢失修改(lost updates)
当多个事务并发修改一个数据时,不加控制会得出错误的结
果,一个修改会覆盖掉另一个修改。
2 读的不可重复性
当多个事务按某种时间顺序存取若干数据时,如果对并发存
取不加控制,也会产生错误。
3 脏读(DIRDY DATA),读的不一致性
4 光标带来的当前值的混乱
事务在执行过程中它在某个表上的当前查找位置是由光标表
示的。光标指向当前正处理的记录。当处理完该条记录后,则指
向下一条记录。在多个事务并发执行时,某一事务的修改可能产
生负作用,使与这些光标有关的事务出错。
5 未释放修改造成连锁退出
一个事务在进行修改操作的过程中可能会发生故障,这时需
要将已做的修改回退(Rollback)。如果在已进行过或已发现错
误尚未复原之前允许其它事务读已做过修改(脏读),则会导致
连锁退出。
6 一事务在对一表更新时,另外的事务却修改或删除此表的
定义。
数据库会为每个事务自动地设置适当级别的锁定。对于前面
讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一
表更新时另外的事务却修改或删除此表的定义,数据库都会自动
解决。而另外的三个问题则需要在编程过程中人为地定义事务或
加锁来解决。
三 事务和恢复
数据库本身肩负着管理事务的责任。事务是最小的逻辑工作
单元,在这个工作单元中,对数据库的所有更新工作,要么必须
全部成功,要么必须全部失败(回退)。只要应用程序指定了某
段程序为一个事务并做了相应的处理(提交或回退),数据库系
统会自动维护事务本身的特性。

四 ORACLE数据库的事务定义
ORACLE事务从COMMIT、ROLLBACK、连接到数据库或开始第一
条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出
数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的
前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。
如果一个事务由于某些故障或者由于用户改变主意而必须在
提交前取消它,则数据库被恢复到这些语句和过程执行之前的状
态。
利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个
事务。可以回退整个事务,也可以会退部分事务,但是不能回退
一个已经被提交的事务。回退部分事务的ROLLBACK命令为:
ROLLBACK to savepoint 存储点名
存储点是用户放入事务中的标记,用来表示一个可被回退的
位......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3774.html NewsArticle 4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别,oraclesavepoint 事务提交过程 事务 基本概念 概念:一个或者多个 DML 语言组成 特点:要么都成...
评论暂时关闭