资源描述
Click to edit Master title style,First Level,Second Level,Third Level,Fourth Level,Fifth Level,*,-50,事务,目标,通过本章学,习,习,您将可,以,以:,使用,DML,语句,向表中插入,数,数据,更新表中数,据,据,从表中删除,数,数据,将表中数据,和,和并,控制事务,事务概念,包含一组数,据,据库命令,,构,构成单一逻,辑,辑工作单元,的,的操作集合,访问并可能,更,更新各种数,据,据项的一个,程,程序执行单,元,元,是不可,分,分割的工作,逻,逻辑单元,执行并发操,作,作的最小控,制,制单位,事务的特性,原子性(,AAtomicity),一致性(,CConsistency),隔离性(,IIsolation),持久性(,DDurability),原子性、,一致性,原子性:,就,就是事务应,作,作为一个工,作,作单元,事,务,务处理完成,,,,所有的工,作,作要么都在,数,数据库中保,存,存下来,要,么,么完全回滚,,,,全部不保,留,留,一致性:,事务完成或,者,者撤销后,,都,都应该处于,一,一致的状态,隔离性、永,久,久性,隔离性,多个事务同,时,时进行,它,们,们之间应该,互,互不干扰.,应,应该防止一,个,个事务处理,其,其他事务也,要,要修改的数,据,据时,不合,理,理的存取和,不,不完整的读,取,取数据,永久性,事务提交以后,,所,所做的工作就被,永,永久的保存下来,事务并发处理会,产,产生的问题,丢失更新,当两个或多个事,务,务选择同一行,,然,然后基于最初选,定,定的值更新该行,时,时,会发生丢失,更,更新问题、每个,事,事务都不知道其,它,它事务的存在。,最,最后的更新将重,写,写由其它事务所,做,做的更新,这将,导,导致数据丢失。,丢失更新:,假设产品的当前,库,库存60,现有,两,两个事务:,T1,购入400个,,T2,卖出40,顺序,事务,步骤,存储的值,1,T1,读在库数量,60,2,T2,读在库数量,60,3,T1,在库数量=60+400,4,T2,在库数量=60-40,5,T1,写在库数量,460(将被丢失),6,T2,写在库数量,20,正常执行过程:,假设产品的当前,库,库存60,现有,两,两个事务:,T1,购入400个,,T2,卖出40,顺序,事务,步骤,存储的值,1,T1,读在库数量,60,2,T1,在库数量=60+400,3,T1,写在库数量,460,4,T2,读在库数量,460,5,T2,在库数量=460-40,6,T2,写在库数量,420,脏读,当第二个事务选,择,择其它事务正在,更,更新的行时,会,发,发生未确认的相,关,关性问题。,第二个事务正在,读,读取的数据还没,有,有确认并且可能,由,由更新此行的事,务,务所更改。,T2,使用,T1,未提交数据:,假设产品的当前,库,库存60,现有,两,两个事务:,T1,购入400个,,在,在没有提交前撤,消,消了该操作,,T2,卖出40,顺序,事务,步骤,存储的值,1,T1,读在库数量,60,2,T1,在库数量=60+400,3,T1,写在库数量,460,4,T2,读在库数量,460(读未提交数据),5,T2,在库数量=460-40,6,T1,rollback,60,6,T2,写在库数量,420,正常执行过程:,假设产品的当前,库,库存60,现有,两,两个事务:,T1,购入400个,,在,在没有提交前撤,消,消了该操作,,T2,卖出40,顺序,事务,步骤,存储的值,1,T1,读在库数量,60,2,T1,在库数量=60+400,3,T1,写在库数量,460,4,T1,RollBack,60,5,T2,读在库数量,60,6,T2,在库数量=60-40,7,T2,写在库数量,20,脏读,会话,A,Updateemp setsal=2000 where ename=SCOTT,;,会话,B,Selectsal from emp where ename=scott;,数据库事务,数据库事务由以,下,下的部分组成,:,一个或多个,DML,语句,一个,DDL,语句,一个,DCL,语句,数据库事务,以第一个,DML,语句的执行作为,开,开始,以下面的其中之,一,一作为结束,:,COMMIT,或,ROLLBACK,语句,DDL,或,DCL,语句(自动提交,),),用户会话正常结,束,束,系统异常终了,show autocommit,set autocommiton;,Commit,事务提交命令。,在,Oracle,中,在内存中将,为,为每个客户机建,立,立工作区,客户,机,机对数据库进行,操,操作处理的事务,都,都在工作区内完,成,成,只有在输入,commit,命令后,工作区,内,内的修改内容才,写,写入到数据库上,,,,称为物理写入.,这样可以保证在,任,任意的客户机没,有,有物理提交修改,以,以前,别的客户,机,机读取的后台数,据,据库中的数据是,完,完整的、一致的.,COMMIT,和,ROLLBACK,语句的优点,使用,COMMIT,和,ROLLBACK,语句,我们可以,:,确保数据完整,性,性。,数据改变被提,交,交之前预览。,将逻辑上相关,的,的操作分组。,当执行了,Commit,语句之后,会,确,确认事务变化,、,、结束事务、,删,删除保存点、,释,释放锁。当使,用,用,commit,语句后,其他,会,会话将可以看,到,到事务变化后,的,的新数据,ORACLE,事务控制-回,退,退段,ORACLE,为了适应事务,控,控制设置了,回退段,这一数据库对,象,象.系统利用,回,回退段来确保,诸,诸如读一致性,、,、数据库恢复,等,等管理功能。,ORACLE,在缺省情况下,读数据不加,锁,锁,通过回退,段,段(,Rollback Segment),保证用户不读,脏,脏数据和可重,复,复读.,表空间中的数,据,据按段来组织,数据段、索,引,引段、暂存段,和,和回退段,回,退,退段是一块磁,盘,盘存储区域,,回退段可以由,用,用户创建,,但只能由系,统,统进程使用。,ORACLE,事务控制-回,退,退段,事务的执行过,程,程(采用日志,和,和回退段双重,记,记录事务活动,),):,进入回退段,写,写入回退信息,从数据段读入,缓,缓冲区,SQL,处理,记载日志文件,提交,写更改,结,结果到磁盘,回退,写回退,信,信息到磁盘,事务第一条更,新,新语句,事务结束,N,Y,Updatet setcol=0 where col=123;commit;,数据库首先把,该,该语句的整个,操,操作包括数据,0与123写入日,志,志缓冲区,然后把123和一些信,息,息写入回滚段,,,,,最后把0,修,修改到数据缓,冲,冲区。,当发出提交命,令,令时,如果日,志,志缓冲区内容,没,没有写入日志,文,文件则必须写,入,入日志文件,,回,回滚段把该事,务,务标记为已经,提,提交,数据缓,冲,冲区中的这个,事,事务也标记为,已,已提交,如果回退这个,事,事务,则数据,库,库将回滚段中123读出写,回,回数据缓冲区,,,,这个回退变,化,化也被写入日,志,志文件。,自动提交事务,当执行,DDL,语句时会自动,提,提交事务,,当执行,DCL,语句(,grantrevoke),当退出,SQL*Plus,时,将某一事务设,为,为只读事务,Set transaction read only,只读事务,不,生,生成回滚信息,,,,在整个事务,中,中就不能有修,改,改操作,注意是针对当,前,前事务,不是,另,另一个事务,Set transaction read only|read write,通过,rollback,取消设定。,只读事务,只读事务只允,许,许执行查询操,作,作,而不允许,执,执行任何,DML,操作事务。,当使用只读事,务,务可以确保取,得,得特定的时间,点,点的数据。,例如:,假定企业需要,在,在每天16点,统,统计最近24,小,小时的销售信,息,息,而不统计,当,当天16点之,后,后的销售信息,,,,那么用户可,以,以使用只读事,务,务。,在设置了只读,事,事务之后,尽,管,管其他事务可,能,能会提交新事,务,务,但只读事,务,务不会取得新,的,的数据变化。,示例:,会话,A:,Set transaction read only;,会话,B:,Updateemp set sal=3000whereename=,SMITH,;,会话,A:,Selectsal from emp where ename=SMITH;,Set transaction isolation level serializable;,顺序事务,在,只,只读事务的基,础,础特性上还可,以,以对数据进行,DML,操作,控制事务,保存点,B,保存点,A,DELETE,INSERT,UPDATE,INSERT,COMMIT,Time,事务,ROLLBACK,to SAVEPOINTB,ROLLBACK,to SAVEPOINTA,ROLLBACK,UPDATE.,SAVEPOINT update_done;,Savepoint created.,INSERT.,ROLLBACK TOupdate_done;,Rollback complete.,回滚到保留点,使用,SAVEPOINTSAVEPOINTname,语句在当前事,务,务中创建保存,点,点。,使用,ROLLBACK TOSAVEPOINTname,语句回滚到创,建,建的保存点。,用于取消部分,事,事务,自动提交在以,下,下情况中执行,:,DDL,语句。,DCL,语句。,不使用,COMMIT,或,ROLLBACK,语句提交或回,滚,滚,正常结束,会,会话。,会话异常结束,或,或系统异常会,导,导致自动回滚,。,。,事务进程,提交或回滚前,的,的数据状态,改变前的数据,状,状态是可以恢,复,复的,其他用户不能,看,看到当前用户,所,所做的改变,,直,直到当前用户,结,结束事务。,DML,语句所涉及到,的,的行被锁定,其他用户不能,操,操作。,提交后的数据,状,状态,数据的改变已,经,经被保存到数,据,据库中。,改变前的数据,已,已经丢失。,所有用户可以,看,看到结果。,锁被释放,其他用户可以,操,操作涉及到的,数,数据。,所有保存点被,释,释放。,COMMIT;,Commitcomplete.,改变数据,提交改变,DELETEFROMemployees,WHEREemployee_id=99999;,1 rowdeleted.,INSERTINTOdepartments,VALUES(290,CorporateTax,NULL,1700);,1 rowinserted.,提交数据,数据回滚后的,状,状态,使用,ROLLBACK,语句可使数据,变,变化失效,:,数据改变被取,消,消。,修改前的数据,状,状态可以被恢,复,复。,锁被释放。,DELETEFROMcopy_emp;,22 rows deleted.,ROLLBACK;,Rollback complete.,语句级回滚,单独,DML,语句执行失败,时,时,只有该语,句,句被回滚。,Oracle,服务器自动创,建,建一个隐式的,保,保留点。,其他数据改变,仍,仍被保留。,用户应执行,COMMIT,或,ROLLBACK,语句结束事务,。,。,锁,Oracle,数据库中,锁,是,是,:,并行事务中避,免,免资源竞争。,避免用户动作,。,。,自动使用最低,级,级别的限制。,在事务结束结,束,束前存在。,两种类型,:,显示和隐式。,锁,两种模式,:,独占锁,:,屏蔽其他用户,。,。,共享锁,:,允许其他用户,操,操作。,高级别的数据,并,并发性,:,DML:,表共享,行独,占,占,Queries:,不需要加锁,DDL:,保护对象定义,提交或回滚后,锁,锁被释放。,排它锁:若事,务,务,T,对数据,D,
展开阅读全文