oracle多用户并发及事务处理

多用户并发访问

事务:作用于某些数据的一个不可分割的操作

锁:写锁、互斥锁(仅能被一个进程使用) 读锁、共享锁(可被多个进程使用)

更新丢失

脏读

不可重复读

幻影读

隔离级别:

1 READ COMMITTED 每个语句得到完整的视图

2 SERIALIZABLE 事务级别实施串行化

Oracle并发特性

1 回滚段:存储“撤销”信息的数据结构

redo日志用来记录数据库的所有事务;回滚段用于提供事务回滚和读一致性

2 系统改变号 SCN:保证事务执行的顺序

3 数据块中的锁:每个锁只影响数据块的一行

冲突写过程:

1 A更新操作

2 获取SCN,读取目标数据块

3 记录行锁信息

4 修改写入redo日志缓存

5 写入回滚段

6 B更新操作

7 获取SCN,读取数据块

8 发现上锁,如果是READ COMMITTED 等待执行完成后继续;如果是SERIALIZABLE,返回错误

9 A提交事务

10 如果B READ COMMITTED,继续执行

工作空间:与数据的变动分离,创建特定时间版本的数据空间

在线事务处理 OLTP

原子性

一致性

隔离性

持久性

OLTP通用特性:

1 事务吞吐量大而且并发用户量大

2 明确的性能需求

3 高可用性

4 可扩展性

通用并发与性能:

1 非升级行锁技术:只对事务处理的行加锁,不将锁的级别升级到也级别或者表级别

2 多版本读操作一致性:在不加读锁的情况下保证语句级和事务级的数据一致性

3 共享SQL:将经过分析和优化的SQL存放在共享内存池中的共享SQL区 内

4 存储概要:支持执行计划的稳定性

可扩展性:

多线程服务器MTS

Oracle Net连接池:允许客户端共享一个物理网络连接池

Oracle Net连接管理器:为多个客户分配一条网络连接。没有“超时”

实时应用程序集群:

高速缓存熔合:将所有的数据存放在实时应用集群中的每台主机的每个缓存内,这些数据对于急群众的其他任意主机都是可用的。

高可用性:

1 备用数据库:

2 透明故障迁移TAF:主机实例失败时,自动连接到另一个oracle实例

3 oracle 流/高级队列 AQ:一种异步或者延期的系统间通信方法

4 Oracle流复制:利用内置的复制功能提供数据冗余

本文转自博客园xingoo的博客,原文链接:oracle多用户并发及事务处理,如需转载请自行联系原博主。

时间: 2024-08-01 02:02:06

oracle多用户并发及事务处理的相关文章

Oracle高并发系列2:事务日志写入引发的Redo log风波

作者介绍 王鹏冲,平安科技数据库技术专家,浸淫数据库行业十多年,对Oracle数据库有浓厚兴趣,也对MySQL.MongoDB.Redis等数据库有一定架构和运维经验,目前正沉迷在PostgreSQL数据库与Oracle数据库的PK之中,重点在关系型数据库的分布式架构研究.   引言   关系型数据库强调事务的ACID特性,对于事务的持久性,主流的关系型数据库都是通过写事务日志来实现的.写数据是随机IO,写日志是顺序IO,常规的机械磁盘,随机IO比顺序IO要昂贵很多.所以虽然写日志同样要刷到磁盘

Oracle官方并发教程

计算机的使用者一直以为他们的计算机可以同时做很多事情.他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作.甚至对于单个应用程序,他们任然期待它能在在同一时间做很多事情.举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示.甚至文字处理器也应该能在忙于重新格式化文本和刷新显示的情况下同时响应键盘和鼠标事件.这样的软件就被称为并发软件. 通过Java语言和Java类库对于基础并发的支持,JAV

Oracle数据并发和一致性简介

整理自Oracle 11g R2 官方文档<concepts> 001 简介     在单用户的数据库中,用户可以修改数据,而不用担心其它用户在同一时间修改相同的数据.但是,在一个多用户的数据库中,多个事务内的语句可以同时更新相同的数据.同时执行的多个事务必须产生有意义且一致的结果.因此,多用户数据库必须提供以下功能:     ·数据并发性:确保多个用户可以同时访问数据     ·数据一致性:确保每个用户看到数据的一致的视图,包括可以看到用户自己的事务所做的更改,和其它用户已提交的事务所做的更

Oracle高并发系列1:DML引起的常见问题及优化思路

作者介绍 王鹏冲,平安科技数据库技术专家,浸淫数据库行业十多年,对Oracle数据库有浓厚兴趣,也对MySQL.MongoDB.Redis等数据库有一定架构和运维经验,目前正沉迷在PostgreSQL数据库与Oracle数据库的PK之中,重点在关系型数据库的分布式架构研究. 引言    Oracle数据库是设计为一个高度共享的数据库,这里所说的"共享",可以从数据库共享内存.后台进程.cursor.执行计划.latch等方面去理解.Oracle如此设计的目的是以最小的系统开销.最大化地

Oracle官方并发教程之Guarded Blocks

原文连接,译文连接,译者:Greester,校对:郑旭东 多线程之间经常需要协同工作,最常见的方式是使用Guarded Blocks,它循环检查一个条件(通常初始值为true),直到条件发生变化才跳出循环继续执行.在使用Guarded Blocks时有以下几个步骤需要注意: 假设guardedJoy()方法必须要等待另一线程为共享变量joy设值才能继续执行.那么理论上可以用一个简单的条件循环来实现,但在等待过程中guardedJoy方法不停的检查循环条件实际上是一种资源浪费. 1 public

Oracle官方并发教程之线程对象

原文链接,译文链接,译者:郑旭东 在Java中,每个线程都是Thread类的实例.并发应用中一般有两种不同的线程创建策略. 直接控制线程的创建和管理,每当应用程序需要执行一个异步任务的时候就为其创建一个线程 将线程的管理从应用程序中抽象出来作为执行器,应用程序将任务传递给执行器,有执行器负责执行. 这一节,我们将讨论Thread对象,有关Executors将在高级并发对象一节中讨论. 定义并启动一个线程 应用程序在创建一个线程实例时,必须提供需要在线程中运行的代码.有两种方式去做到这一点: 提供

Oracle官方并发教程之进程和线程

原文链接,译文链接,译者:bjsuo,校对:郑旭东 在并发编程中,有两个基本的执行单元:进程和线程.在java语言中,并发编程最关心的是线程,然而,进程也是非常重要的. 即使在只有单一的执行核心的计算机系统中,也有许多活动的进程和线程.因此,在任何给定的时刻,只有一个线程在实际执行.处理器的处理时间是通过操作系统的时间片在进程和线程中共享的. 现在具有多处理器或有多个执行内核的多处理器的计算机系统越来越普遍,这大大增强了系统并发执行的进程和线程的吞吐量–但在不没有多个处理器或执行内核的简单的系统

Oracle官方并发教程之Executor接口

原文链接,译文链接,译者:Greenster,校对:郑旭东 java.util.concurrent中包括三个Executor接口: Executor,一个运行新任务的简单接口. ExecutorService,扩展了Executor接口.添加了一些用来管理执行器生命周期和任务生命周期的方法. ScheduledExecutorService,扩展了ExecutorService.支持Future和定期执行任务. 通常来说,指向Executor对象的变量应被声明为以上三种接口之一,而不是具体的实

Oracle官方并发教程之执行器(Executors)

原文链接,译文链接,译者:Greenster,校对:郑旭东 在之前所有的例子中,Thread对象表示的线程和Runnable对象表示的线程所执行的任务之间是紧耦合的.这对于小型应用程序来说没问题,但对于大规模并发应用来说,合理的做法是将线程的创建与管理和程序的其他部分分离开.封装这些功能的对象就是执行器,接下来的部分将讲详细描述执行器. 执行器接口定义了三种类型的执行器对象. 线程池是最常见的一种执行器的实现. Fork/Join是JDK 7中引入的并发框架. 文章转自 并发编程网-ifeve.