Oracle数据库事务处理和故障恢复
来源:互联网 发布:钢琴键盘软件下载 编辑:程序博客网 时间:2024/04/19 04:44
ORACLE数据库事务处理和故障恢复
一、并发控制
数据库是一个共享资源,可为多个应用程序所共享。这些程序可串行运行,但在许多情况下,由于应用程序涉及的数据量可能很大,常常会涉及输入/输出的交换。为了有效地利用数据库资源,可能多个程序或一个程序的多个进程并行地运行,这就是数据库的并行操作。在多用户数据库环境中,多个用户程序可并行地存取数据库,如果不对并发操作进行控制,会存取不正确的数据,或破坏数据库数据的一致性。
1)数据库不一致的类型
◎不一致性
在一事务期间,其它提交的或未提交事务的修改是显然的,以致由查询所返回的数据集不与任何点相一致。
◎不可重复读
在一个事务范围内,两个相同查询将返回不同数据,由于查询注意到其它提交事务的修改而引起。
◎读脏数据
如果事务T1将一值(A)修改,然后事务T2读该值,在这之后T1由于某种原因撤销对该值的修改,这样造成T2读取的值是脏的。
◎丢失更改
在一事务中一修改重写另一事务的修改。
◎破坏性的DDL操作
在一用户修改一表的数据时,另一用户同时更改或删除该表。
2)封锁
在多用户数据库中一般采用某些数据封锁来解决并发操作中的数据一致性和完整性问题。封锁是防止存取同一资源的用户之间破坏性的干扰的机制,该干扰是指不正确地修改数据或不正确地更改数据结构。
在多用户数据库中使用两种封锁:排它(专用)封锁和共享封锁。排它封锁禁止相关资源的共享,如果一事务以排它方式封锁一资源,仅仅该事务可更改该资源,直至释放排它封锁。共享封锁允许相关资源可以共享,几个用户可同时读同一数据,几个事务可在同一资源上获取共享封锁。共享封锁比排它封锁具有更高的数据并行性。
在多用户系统中使用封锁后会出现死锁,引起一些事务不能继续工作。当两个或多个用户彼此等待所封锁数据时可发生死锁。
3)ORACLE多种一致性模型。
ORACLE利用事务和封锁机制提供数据并发存取和数据完整性。在一事务内由语句获取的全部封锁在事务期间被保持,防止其它并行事务的破坏性干扰。一个事务的SQL语句所作的修改在它提交之后所启动的事务中才是可见的。在一事务中由语句所获取的全部封锁在该事务提交或回滚时被释放。
ORACLE在两个不同级上提供读一致性:语句级读一致性和事务级一致性。ORCLE总是实施语句级读一致性,保证单个查询所返回的数据与该查询开始时刻相一致。所以一个查询从不会看到在查询执行过程中提交的其它事务所作的任何修改。为了实现语句级读一致性,在查询进入执行阶段时,在注视SCN的时候为止所提交的数据是有效的,而在语句执行开始之后其它事务提交的任何修改,查询将是看不到的。
ORACLE允许选择实施事务级读一致性,它保证在同一事务内所有查询的数据
4)封锁机制
ORACLE自动地使用不同封锁类型来控制数据的并行存取,防止用户之间的破坏性干扰。ORACLE为一事务自动地封锁一资源以防止其它事务对同一资源的排它封锁。在某种事件出现或事务不再需要该资源时自动地释放。
ORACLE将封锁分为下列类:
◎数据封锁:数据封锁保护表数据,在多个用户并行存取数据时保证数据的完整性。数据封锁防止相冲突的DML和DDL操作的破坏性干扰。DML操作可在两个级获取数据封锁:指定行封锁和整个表封锁,在防止冲突的DDL操作时也需表封锁。当行要被修改时,事务在该行获取排它数据封锁。表封锁可以有下列方式:行共享、行排它、共享封锁、共享行排它和排它封锁。
◎ DDL封锁(字典封锁)
DDL封锁保护模式对象(如表)的定义,DDL操作将影响对象,一个DDL语句隐式地提交一个事务。当任何DDL事务需要时由ORACLE自动获取字典封锁,用户不能显式地请求DDL封锁。在DDL操作期间,被修改或引用的模式对象被封锁。
◎内部封锁:保护内部数据库和内存结构,这些结构对用户是不可见的。
5)手工的数据封锁
下列情况允许使用选择代替ORACLE缺省的封锁机制:
◎应用需要事务级读一致或可重复读。
◎应用需要一事务对一资源可排它存取,为了继续它的语句,具有对资源排它存取的事务不必等待其它事务完成。
ORACLE自动封锁可在二级被替代:事务级各系统级。
◎事务级:包含下列SQL语句的事务替代ORACLE缺省封锁:LOCK TABLE命令、SELECT…FOR UPDATE命令、具有READ ONLY选项的SET TRANSACTIN命令。由这些语句所获得的封锁在事务提交或回滚后所释放。
◎系统级:通过调整初始化参数SERIALIZABLE和REO-LOCKING,实例可用非缺省封锁启动。该两参数据的缺省值为:
SERIALIZABLE=FALSE
ORW-LOCKING=ALWAYS
- Oracle数据库事务处理和故障恢复
- ORACLE数据库事务处理和故障恢复
- oracle数据库各种故障恢复案例
- 数据库事务处理:事务基本特性、锁和数据库恢复技术
- oracle 块故障恢复
- 数据库故障恢复技术
- solaris ufs文件系统故障后恢复oracle数据库过程记录
- Oracle数据库恢复 : 存储故障导致的数据损坏
- Oracle数据库恢复 : 存储故障导致的数据损坏
- Oracle 8.1.7.4 数据库故障恢复一例
- Oracle-数据库-事务处理基本原理
- 数据库故障恢复修复指南
- SQL 和Oracle对数据库事务处理的差异性
- SQL 和Oracle对数据库事务处理的差异性
- MS SQL Server和Oracle对数据库事务处理的差异性
- Oracle ASM故障数据恢复方法和数据恢复过程详解
- 硬盘故障和数据恢复
- Superblock介绍和故障恢复
- 内联函数使用方法
- TiddlyWiki的一些有用链接
- Oracle数据库导出(exp)/导入(imp)
- 在javascript中如何去除字符串两头的空格
- meta标签使用方法详解
- Oracle数据库事务处理和故障恢复
- CSS 结构和规则
- 做技术,切不可沉湎于技术
- 联动取客户端的值
- 一个Java菜鸟的学习之道~~~
- dropdownlist联动取值
- CSS 属性
- CSS字体属性
- Java数据访问对象(DAO)编程模入门