第10次课 Oracle学习教程_事务控制
- 格式:ppt
- 大小:180.00 KB
- 文档页数:12
课后总结一、Oracle运行机制1、用户与ORACLE的连接方式用户进程发出连接请求,请求通过DNS服务器或HOST文件的服务名解析后传送到ORACLE监听进程,监听进程一般用两种方式来处理用户请求,我们将在两种不同服务器中分析:在专用服务器模式下,一种方式是监听进程收到用户请求后产生一个新的专用服务器进程,新建的服务器进程继承了监听进程的信息,服务器进程发一个RESEND包给用户进程,用户进程接收到则回发一个CONNECT包,服务器进程再以ACCEPT 包回应,两者之间确定HAND-OFF连接也称转换连接。
另一种方式是监听进程收到用户进程的请求后产生一个新的专用服务器进程,新建的服务器进程选用一个TCP/IP端口来控制与用户进程的交互,然后将此信息传回监听进程,监听进程再将此信息传给用户进程,用户进程使用这个端口给新建的服务器进程发送一个CONNECT包,服务器进程回发用户进程一个ACCEPT包,至此建立连接,也称重定向连接。
在共享服务器下,只有重定向连接的方式。
通过设置MAX_DISPIATCHERS来确定调度进程的最大数目,若个数达到最大,或已有的调度进程不是满负荷,监听进程将不再创建新的调度进程,而是让其中一个调度进程需用一个TCP/IP端口来与用户交互。
所有的调度进程共享同一个请求队列,共享服务器模式下一个实例只有一个请求队列,有多少调度进程就有多少相应队列,然后各个调度进程从各自的响应队列中将结果取出再返回给用户进程。
2、ORACLE服务器进程处理用户进程请求的方式当一个用户进程发出了一条SQL语句,首先服务器进程将对该语句进行检查语句有效性的语法检查和确保语句能够正常运行的语义检查,若以上任一检查未通过,就返回一个ORA-*****的错误码。
若检查通过,服务器进程把语句的字符转换成ASCII等效数字码,接着ASCII码被传递给一个HASH函数,并返回一个HASH值,服务器进程将到SHARED POOL的共享PL/SQL区去查找是否存在同样的HASH值,若存在,服务器进程将在SHARED POOL中软解析语句,若不存在,则在SHARED POOL中硬解析语句。
1.1跟我学Oracle从入门到精通培训教程——Oracle事务管理技术及实例1.1.1事务管理技术与应用1、什么是事务(Transaction)事务是由一个或多个SQL语句所组成的逻辑工作单元,该工作单元要么全部执行,要么全部不执行。
事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作所组成。
2、为什么要应用事物控制(1)事务处理技术具有ACID的四大特性该特性可以确保事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。
因此,只需要将一组相关的SQL语句组合为一个要么全部成功要么全部失败的执行单元,可以最终简化错误的恢复并使应用程序更加可靠。
(2)数据库事务正是用来保证系统数据访问的平稳性和可预测性的技术1)事务涉及到数据库信息的并发访问,用于确保数据库中数据访问的一致性。
通过对事务的应用,能够使一系列相关的操作关联起来,防止出现数据不一致现象。
2)通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
3、应用事务技术的基本要求一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性1)与事务有关的各个SQL语句只能限于DML语句命令,而DDL和DCL语句由于是不能被回退的(它们会自动地提交)。
2)Oracle系统环境默认的操作都被自动定义为是事务操作。
用户可以提交当前事务,也可以回退当前的事务操作,另外在操作过程中用户还可以自己定义回退点来完成部分事务的回退操作。
4、应用事务控制的场景——保证对数据的更新操作的一致性(1)普通的MIS系统由于增、删、改操作只能对一个表操作,这在应用中将会带来一些问题。
比如将某个学生信息表中的指定的ID号为95019的学生信息删除后,有关其选课信息也应同时删除,而这只能通过下面的两条SQL语句进行:第1条语句删除95019学生:DELETE FROM Student WHERE Sno= ' 95019 ';第2条语句删除95019学生的选课记录:DELETE FROM SC WHERE Sno=' 95019 ';但在执行了第1条DELETE语句之后,数据库中的数据有可能会处于不一致的状态,因为这时实际上己没有学号为95019的学生了,但课程信息表中仍然记录着关于95019学生的选课信息,即数据的参照完整性受到破坏。
Oracle 事务控制Oracle中的事务是隐式自动开始,它不需要用户显式地使用语句开始事务处理。
当发生如下情况时,Oracle认为一个事务结束:●执行COMMIT语句提交事务。
●执行ROLLBACK语句撤销事务。
●执行一条数据定义语句(例如CREAE、DROP或ALTER语句等)。
如果该语句执行成功,那么表示系统自动执行COMMIT命令;如果这种操作失败,那么表示系统自动执行ROLLBACK命令。
●执行一个数据控制命令(例如GRANT、REVOKE等),这种操作表示自动执行COMMIT命令。
●断开数据库的连接。
如果使用EXIT命令正常退出SQL*Plus,则系统自动执行COMMIT命令;如果退出SQL*Plus出现异常,则系统自动执行ROLLBACK命令。
下面主要介绍通过和ROLLBACK语句控制事务。
1.使用COMMIT语句提交事务提交事务也就意味着该事务中对数据库进行的全部操作将永久地记录在数据库中。
在使有COMMIT提交事务时,Oracle会执行如下操作:(1)在回退段内记录事务已经提交,并且生成一个惟一的系统变改号(SCN),以使惟一标识这个事务。
(2)启动LGWR后台进程,将SGA区中的重做日志缓存中的数据写入联机重做日志文件中,并且将该事务的SCN也保存到联机重做日志文件中。
(3)Oracle服务器进程释放事务处理所使用的资源。
(4)通知用户事务已经成功提交。
需要注意,Oracle提交事务的性能不会因为事务所包含的SQL语句过多而受到影响,因为Oracle采用了一种称为“快速提交(Fast Commit)”的机制,当用户提交事务时,Oracle 并不会将与该事务相关的“脏数据块”立即写入数据文件,只是将重相应的日志信息保存到重做日志文件,这样即使发生错误丢失了内存中的数据,系统还可以根据重做日志文件中的信息对其还原。
因此,只要事务的重做日志信息被完全写入到联机重做日志文件中,即可以认为该事务已经成功提交。
oracle学习笔记之oracle事务1 首先补充一下有关to_date 函数的应用。
可以改变年月日的插于格式。
to_date('1998-05-24','YYYY-MM-DD'),to_date('1998/05/24','YYYY/MM/DD')等等...2 当使用values子句时,一次只能插入一条数据,当使用子查询插入数据时,一条insert语句可以插入大量的数据,当处理行迁移或者装载外部表的数据到数据库的时候,可以使用子查询来插入数据。
创建一张空表:create table kkk(myId number(4),myname varchar2(50),myDept number(5));insert into kkk (myId,myname,myDept) select empno,ename,deptno from emp where deptno=10;3 用子查询更新数据使用update语句更新数据时,既可以使用表达式或者数值直接修改数据,也可以使用子查询修改数据。
问题:希望员工soctt的岗位,工资与补助与simth员工一样。
update emp set (job,sal,comm) = (select job,sal,comm from emp where ename ='SIMTH') where ename='SCOTT';事务:1、什么是事务事务是用于保证数据的一致性,它由一组相关的DML语句组成,该组的DML语句要么全部成功,要么全部失败。
如:网上转账……2、事务和锁当执行事务操作(dml语句)时,oracle会在被作用的表上加锁,防止其他用户改变表的结构,这点对我们用户来讲是很重要的。
3、保存点和回退事务保存点是事务中的一点,用于取消部分事务,当结束事务时,会自动的删除该事务定义的所有保存点,当执行rollback时,通过指定保存点可以回退到指定的点。
事务的控制语句
在Oracle数据库中,没有提供开始事务处理语句,所有的事务都是隐式开始的,也就是说在oracle中,用户不可以显示使用命令来开始一个事务.oracle任务第一条修改数据库的语句,或者一些要求事务处理的场合都是事务的隐式开始。
但是当用户想要终止一个事务处理时,必须显示使用commit和rollback语句结束。
根据事务ACID属性,oracle提供了如下的事务控制语句:
Set transaction 设置事物属性
Set constrains 设置事物的约束模式
约束模式是指:在事务中修改数据时,数据库中的约束立即应用于数据,还是将约束推迟到当前事务结束后应用。
Savepoint 在事务中建立一个存储的点.当事务处理发生异常而回滚事务时,可指定事务回滚到某存储点.然后从该存储点重新执行。
Release savepoint 删除存储点
Rollback 回滚事务取消对数据库所作的任何操作
Commit 提交事务对数据库的操作做持久的保存。
Oracle实用教程(Oracle11G版)第10章事务、锁、闪回第10章事务、锁、闪回和Undo表空间10. 1 事务10. 2 锁10.3 闪回操作10.4 Undo表空间10. 1 事务10.1.1 事务的概念在现实生活中,事务随处可见,如银行交易、股票交易、网上购物、库存品控制等。
在所有这些例子中,事务的成功取决于这些相互依赖的行为是否能够被成功地执行,是否互相协调。
其中的任何一个失败都将取消整个事务,系统返回到事务处理之前的状态。
下面使用一个简单的例子来帮助理解事务。
向公司数据库添加一名新的雇员(见图10.1)。
10.1.1 事务的概念(1)原子性。
原子性意味着每个事务都必须被认为是一个不可分割的单元。
假设一个事务由两个或者多个任务组成,其中的语句必须同时成功才能认为事务是成功的。
如果事务失败,系统将会返回到事务以前的状态。
(2)一致性。
不管事务是完全成功完成还是中途失败,当事务使系统中的所有数据处于一致的状态时存在一致性。
参照前面的例子,一致性是指如果从系统中删除了一个雇员,则所有和该雇员相关的数据,包括工资数据和组的成员资格也要被删除。
(3)隔离性。
隔离性是指每个事务在它自己的空间发生,和其他发生在系统中的事务隔离,而且事务的结果只有在它完全被执行时才能看到。
即使在这样的一个系统中同时发生了多个事务,隔离性原则保证某个特定事务在完全完成之前,其结果是看不见的。
(4)持久性。
持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。
即使系统崩溃,一个提交的事务仍然存在。
当一个事务完成,数据库的日志已经被更新时,持久性就开始发生作用。
大多数RDBMS产品通过保存所有行为的日志来保证数据的持久性,这些行为是指在数据库中以任何方法更改数据。
10.1.2 事务处理(1)连接到数据库,并开始执行第一条DML语句;(2)前一个事务结束或者执行一条自动提交事务的语句。
发生如下事件时,Oracle认为事务结束。
oracle 数据库事务实现原理
Oracle数据库事务实现的原理涉及到数据库管理系统的核心功
能和ACID特性。
事务是一系列数据库操作的逻辑单元,要么全部执
行成功,要么全部失败回滚。
Oracle数据库通过以下几个方面来实
现事务的原理:
1. 日志记录,当事务开始时,Oracle会将事务的操作记录在
日志文件中,包括对数据的修改、插入和删除操作。
这样即使数据
库发生故障,也可以通过日志文件来恢复事务的一致性。
2. 事务隔离级别,Oracle数据库支持多种事务隔离级别,如
读未提交、读已提交、可重复读和串行化。
这些隔离级别可以确保
并发事务之间的数据一致性和隔离性。
3. 锁机制,Oracle数据库使用锁来控制事务对数据的访问,
包括共享锁和排他锁。
这样可以防止多个事务同时对同一数据进行
修改,保证数据的一致性和完整性。
4. 回滚段,Oracle数据库使用回滚段来存储事务的修改操作,如果事务失败或回滚,可以通过回滚段来还原数据的状态。
5. 事务日志,Oracle数据库会记录事务的提交和回滚操作,保证事务的持久性和原子性。
这样即使数据库发生故障,也可以通过事务日志来恢复数据的一致性。
总的来说,Oracle数据库通过日志记录、事务隔离级别、锁机制、回滚段和事务日志等多种机制来实现事务的原理,确保数据的一致性、隔离性、持久性和原子性,从而保证数据库操作的安全性和可靠性。
数据库之事务控制事务的由来:在DBMS中,当多用户同时访问或修改同一数据库表时,可能会造成由于一个用户的行为结果导致另一个用户使用的数据无效的问题。
为了解决这个问题,sql中引入了事务、事务控制、并发处理和锁定操作。
事务:事务是指一个工作单元,该单元可以包含多个步骤来完成所需要的任务。
在sql中,通过事务将一系列不可分割的数据库操作做为整体来执行,从而保证了数据库的完整性和有效性。
数据库事务就是包含了一组数据库操作命令的一个操作序列,事务中所有命令作为一个整体向系统提交或撤消操作请求,即数据库命令执行成功或不成功。
事务的特性:ATOMIC(原子性):要么全部都成功,要么全都不成功。
CONSESTENT(一致性):事务中任何数据变化都符合数据定义的规则。
当事务完成时,数据必须处于一致的状态。
事务不能让数据存储于不稳定的状态,即通过事务对数据所做的修改不能损坏数据,在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护数据的完整性。
ISOLATED(隔离性):多个事务同时进行,它们之间互相干扰。
当事务执行修改数据时,如果任何其他进程正在同时使用相同的数据,则直到该事务成功提交后,对数据的修改才能有效。
DURABLE(持久性):一旦事务引发了变化,事务提交以后,所做的工作就永久被保存下来。
即使硬件和应用程序发生错误,也必须保证对数据所做的修改不受影响。
事务的分类:显示事务:又称拥护自定义事务,是指显示的定义其开始和结束的事务。
当使用begintran和commit语句发生显示事务。
隐式事务:是指当前事务或回滚后自动开始事务。
该事务需要commit语句或rollback语句回滚或结束当前事务,在回滚后又自动开启一个事务。
(oracle中任何一个DML语句都会开启一个事务,直到用户执行commit或rollback操作。
)自动事务是指能够自动执行并且能够自动回滚的事务,该事务中,事务自动提交;当执行过程产生错误的时,则事务被回滚。
Oracle数据库中的事务管理实践Oracle数据库是一个功能强大的关系型数据库系统,广泛应用于企业级应用和数据存储。
事务管理是Oracle数据库中的一个重要方面,它确保了数据的一致性和完整性。
在本文中,我们将探讨Oracle数据库中的事务管理实践。
Oracle数据库中的事务在Oracle数据库中,事务是一组操作的逻辑单元。
它们构成一个单一的操作序列,如果其中任何一个操作失败,则整个事务就会回滚到之前的状态。
例如,当我们向数据库中插入一条记录时,我们可以将这个操作视为一个事务。
如果该操作未能成功完成,则数据库将撤销该操作并返回错误消息。
Oracle数据库支持ACID事务模型,即原子性、一致性、隔离性和持久性。
这些保证了数据库的安全性和可靠性,确保了数据的完整性和一致性。
原子性确保事务的所有操作要么全部完成,要么全部失败。
如果其中任何一个操作失败,则整个事务都必须回滚到之前的状态。
这样可以避免数据不一致和错误。
一致性确保在任何时候,数据库中的数据都是合法的和有效的。
这意味着在每个事务中,数据库必须保证所有约束条件和规则都得到遵守。
隔离性确保在多个事务同时操作数据库时,它们之间的操作分离。
这意味着每个事务应该像是在独立的环境中操作数据库,以避免产生竞态条件。
持久性确保一旦事务完成,该事务所做的更改将持久保存,即使发生硬件故障也是这样。
Oracle数据库中的事务管理实践在Oracle数据库中,处理事务的主要方法是使用数据库事务语言(Transact-SQL)。
以下是一些可以使用的Oracle数据库管理事务的最佳实践:1.使用BEGIN TRANSACTION和COMMIT TRANSACTION语句管理事务,这将确保所有数据库操作都在事务内。
我们可以将所有的数据库操作包装在BEGIN和COMMIT TRANSACTION语句之间,以确保数据更新的原子性。
2.使用ROLLBACK TRANSACTION语句来回滚事务,以确保事务的一致性和可靠性。
设置保存点:savepoint a;
回滚部分事务:rollback to a;回滚全部事务:rollback;oracle基本操作--事务
事务:可以看做是由对数据可的若⼲操作组成的⼀个单元,浙西操作要么都完成,要么都取消,从⽽保证数据满⾜⼀致性的要求。
事务的组成:
1. ⼀条或者多条DML
2. ⼀条DDL
3. ⼀条DCL
DML语句需要使⽤commit提交事务或使⽤rollback回滚事务。
DDL和DCL是⾃动提交事务的。
为什么使⽤事务?
使⽤事务的原因:保证数据的安全有效。
当执⾏事务操作(DML语句)时,Oracle会被作⽤表上加表锁,以防⽌其他⽤户该表表结构;同时会被作⽤⾏还是哪个加⾏锁,以防⽌其他事务在相应⾏上执⾏DML操作。
事务的控制命令
提交事务commit
1. 通过commit语句可以提交事务,当执⾏了commit语句后,会确认事务的变化、结束事务、删除保存点和释放锁。
2. 当使⽤commit语句结束事务之后,其他会话将可以查看事务变化后的新数据。
回滚事务rollback
1. rollback只能对未提交的数据撤销,已经commit的数据时⽆法撤销的,因为commit之后已经持久化到数据库中。
保存点savepoint
1. 保存点是事务中的⼀点,⽤于取消部分事务,当事务结束时,会⾃耦东的删除该事务所定义的所有保存点。
当执⾏rollback时,通过制
定的保存点可以回退到指定的点。
Oracle事务基本原理要想灵活地运用Oracle恢复技术,就需要了解Oracle对于事务的处理原理。
接下来我们会通过图9-1详细讨论Oracle对于事务的内部处理机制。
我们以一个语句为例,来了解Oracle的内部处理流程。
1.SQL> insert into table my_table values(1);2.SQL> commit;mit complete.用户进程连接到数据库,数据库会为这个用户进程创建一个服务器进程(也叫影子进程);这个进程就像用户进程的影子,替用户完成各种操作。
用户发出了第一个insert语句,向指定表中插入一条记录。
因为每条记录最终都要保存到一个数据块中,因此,Oracle会检查这个目标数据块是否已经存在于Data Buffer Cache中,如果不存在,影子进程就要负责把这个数据块从磁盘文件读取到SGA中。
影子进程就要修改这个数据块内容,把新的记录插进去;但是在这之前还需要构造Undo数据块,以备回滚;同时还要生成这两个操作的Redo记录,并把Redo记录放在Log Buffer Cache中。
第一个insert语句的操作完成;用户可以继续输入其他语句。
用户输入commit,要提交这个插入操作。
LGWR进程被触发,把Log Buffer中的日志记录到当前联机日志文件中。
图9-1 Oracle内部事务处理流程到目前为止,用户的插入操作已经成功了,用户可以认为他的插入已经被记录到了数据文件中。
但实际上我们还没有看到数据写(也就是DBWR进程)的活动。
Oracle在运行过程中,所有对于数据的修改都是在内存中进行的。
Oracle每要修改一个记录必须先把记录所在的数据块加载到内存中,然后在内存中进行修改。
但是提交(Commit)时,只是把Redo Log Buffer 中的日志写到磁盘,修改的数据块不会立即写回磁盘。
也就是说,Redo Log Buffer中的事务信息会被LGWR 进程非常频繁地写到磁盘上,而修改的数据块只是被DBWR进程定期地写到磁盘上。
1、事务的概述事务具备4个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
这4个特性被称为数据库的ACID特性,ACID性概述如下所示。
(1)原子性:事务是应用中最小的执行单位,就如自然界中的原子,具有不可再分的特性。
整个事务中的操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
事务在执行过程中如果发生错误,数据库会被回滚到执行事务之前的状态。
(2)一致性:事务在完成时,所有数据都会保持一致的状态。
如果事务成功,则被操作数据将变为一个新的状态,若果事务失败,则被操作数据将处于之前的状态,一致性是通过原子性来保证的。
(3)隔离性:各个事务的执行是互不干扰的,任意一个事务的并发操作对于其他事务都是隔离的,也就是所并发执行的事务之间不能看到对方的状态。
(4)持久性:事务一旦提交成功,对数据库做的任何修改都会被永久的保存。
2、操作事务Oracle 11g中的事务是隐式自动开始的,不需要用户显示的执行事务开始的语句,但是对于事务的结束处理,则需要用户进行显示的操作。
事务的提交分为显示提交与隐式提交,当出现以下一些情况时,Oracle会认为一个事务已经结束。
(1)使用COMMIT语句显示提交事务。
(2)执行ROLLBACK语句回滚事务。
(3)执行数据库定义语句(DDL),例如create、drop或alter语句时数据库会自动提交事务。
(4)执行数据库控制语句(DCL),例如grant、revoke时数据库会自动提交事务。
(5)断开数据库的连接时数据库会自动提交事务。
注意:当执行DML语句(insert、update、delete)时事务不会自动提交,如果想要显示的提交事务则需要使用commit命令3、事务的管理可以通过建立保存点的方式将事务中的操作分隔,这样用户就可以有选择性的回滚到某个点,回滚到保存点后该保存点之后的所有操作将会被撤销。