- 浏览: 425044 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (203)
- 管理 (9)
- 情感 (3)
- 技术 (43)
- jfreeChart (5)
- unix (6)
- webService (3)
- 权限管理 (2)
- spring (3)
- log4j (2)
- java性能测试 (2)
- dwr (1)
- 数据迁移 (4)
- derby数据库基础 (1)
- jsp前台 (4)
- 线程 (6)
- 企业信息化 (2)
- 技术基础 (2)
- 经典算法 (1)
- 数据库性能 (7)
- 个人规划 (8)
- xml (2)
- ftp传输 (1)
- socket (3)
- java技术之正则表达式 (2)
- java技术之io操作 (1)
- java技术之常用命令程序使用方法 (1)
- interview (8)
- eclipse插件安装 (3)
- UML (1)
- oracle (29)
- java (3)
- 航空信息 (3)
- 读书 (1)
- Intellij idea (0)
- linux (24)
- 服务器架构 (4)
- weblogic (3)
最新评论
-
tuspark:
关于eclipse插件安装方法,这里文章图文并茂,讲解的最详细 ...
eclipse插件安装方法总结 -
swanky_yao:
非常不错 受益匪浅
j2ee异常处理机制 -
菜鸟不再菜:
如果能拿一个项目的例子来说明一下就好了~
j2ee异常处理机制 -
Q.Lee:
不出现异常了,但是访问http://localhost:808 ...
dwr使用异常 -
Q.Lee:
崩溃。。。。。
dwr使用异常
在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资源的并发性访问串行化,oracle中的锁就可以提供这样的功能,当事务在对某个对象进行操作前,先向系统发出请求,对其加相应的锁,加锁后该事务就对该数据对象有了一定的控制权限,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作(可以做select动作,但select
利用的是undo中的前镜像数据了).
Oracle锁的分类
Oracle锁基本上可以分为二类
a:共享锁(share
locks) 也称读锁,s锁
b:排它锁 (exclusive locks) 也称写锁,x锁
在数据库中有两种基本的锁类型:排它锁(Exclusive
Locks,即X锁)和共享锁(Share
Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
按锁保护的内容分类
oracle提供多粒度封锁机制,按保护对象来分,据此又可以分为
a:dml锁,
data locks 数据锁,用来保护数据的完整性和一致性
b:ddl锁, dictionary locks 字典锁,用来保护数据对象的结构,如table,index的定义
c:内部锁和闩 internal
locks and latchs 用来保护数据库内部结构,如sga内存结构
dml锁
DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TM锁的种类有S,X,SR,SX,SRX五种,TX锁称为事务锁或行级锁。当Oracle执行delete,update,insert,select
for update
DML语句时,oracle首先自动在所要操作的表上申请TM类型的锁。当TM锁获得后,再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位(lb 即lock bytes)进行置位。在记录被某一会话锁定后,其他需要访问被锁定对象的会话会按先进先出的方式等待锁的释放,对于select操作而言,并不需要任何锁,所以即使记录被锁定,select语句依然可以执行,实际上,在此情况下,oracle是用到undo的内容进行一致性读来实现的。
在 Oracle数据库中,当一个事务首次发起一个DML语句时就获得一个TX锁,该锁保持到事务被提交或回滚。在数据行上只有X锁(排他锁),就是说TX锁只能是排他锁,在记录行上设置共享锁没有意义。当两个或多个会话在表的同一条记录上执行DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁。
在数据表上,oracle默认是共享锁,在执行dml语句的时候,oracle会先申请对象上的共享锁,防止其他会话在这个对象上做ddl语句,成功申请表上的共享锁后,再在受影响的记录上加排它所,防止其他会话对这些做修改动作。
这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。如表1所示。
和锁相关的性能视图介绍
v$lock
SID
会话的sid,可以和v$session 关联
TYPE
区分该锁保护对象的类型,如tm,tx,rt,mr等
ID1
锁表示1,详细见下说明
ID2
锁表示2,详细见下说明
LMODE 锁模式,见下面说明
REQUEST
申请的锁模式,同lmode
CTIME
已持有或者等待锁的时间
BLOCK 是否阻塞其他会话锁申请 1:阻塞 0:不阻塞
LMODE取值0,1,2,3,4,5,6,
数字越大锁级别越高,
影响的操作越多。
1级锁:
Select,有时会在v$locked_object出现。
2级锁即RS锁
相应的sql有:Select
for update ,Lock xxx in Row Share mode,select for update当对
话使用for
update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独
占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select
for update
操作。
3级锁即RX锁
相应的sql有:Insert, Update, Delete, Lock xxx in Row
Exclusive mode,没有commit
之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁,
我们
必须释放掉上一个才能继续工作。
4级锁即S锁
相应的sql有:Create Index, Lock xxx in Share
mode
5级锁即SRX锁
相应的sql有:Lock xxx in Share Row Exclusive
mode,当有主外键约束时update
/delete ... ; 可能会产生4,5的锁。
6级锁即X锁
相应的sql有:Alter
table, Drop table, Drop Index, Truncate table, Lock xxx in Exclusive
mode
ID1,ID2的取值含义根据type的取值而有所不同
对于TM
锁
ID1表示被锁定表的object_id 可以和dba_objects视图关联取得具体表信息,ID2 值为0
对于TX
锁
ID1以十进制数值表示该事务所占用的回滚段号和事务槽slot number号,其组形式:
0xRRRRSSSS,RRRR=RBS/UNDO
NUMBER,SSSS=SLOT NUMBER
ID2
以十进制数值表示环绕wrap的次数,即事务槽被重用的次数
v$locked_object
XIDUSN
undo segment number , 可以和v$transaction关联
XIDSLOT undo slot
number
XIDSQN
序列号
OBJECT_ID 被锁定对象的object_id ,
可以和dba_objects关联
SESSION_ID 持有该锁的session_id,
可以和v$session关联
ORACLE_USERNAME
持有该锁的oracle帐号
OS_USER_NAME
持有该锁的操作系统帐号
PROCESS
操作系统的进程号,可以和v$process关联
LOCKED_MODE 锁模式,含义同v$lock.lmode
Dba_locks 和v$lock 内容差不多,略
V$session
如果某个session被因为某些行被其他会话锁定而阻塞,则该视图中的下面四个字段列出了这些行所属对象的相关信息
ROW_WAIT_FILE#
等待的行所在的文件号
ROW_WAIT_OBJ# 等待的行所属的object_id
ROW_WAIT_BLOCK#
等待的行所属的block
ROW_WAIT_ROW# 等待的行在blcok中的位置
手工释放锁
alter
system kill session 'sid,serial#';
发表评论
-
Linux下启动和关闭Oracle服务和监听程序
2015-01-10 20:49 1143原文链接:http://hi.baidu ... -
oracle 低版本导入高版本
2015-01-10 20:47 2103导出增加版本号(低版本的版本号) expdp tdms/t ... -
oracle版本不同导致数据库操作报错 CLOB
2015-01-10 20:41 1157由11.2.0.1版本的数据库导入到11.2.0.4版本的数 ... -
迁移oracle的dbf数据文件
2014-12-31 12:00 1096首先用oracle用户执行sqlplus / as sys ... -
oracle安装磁盘使用率100%导致数据插入等操作报错
2014-12-13 14:41 1059环境: ORACLE安装目录: C盘(50G ... -
DATA_PUMP_DIR impdp 指定导出目录
2014-12-12 17:10 167761.mkdir /tdms1/oracle/dump ... -
INITIAL extent for segment
2014-12-10 10:16 756ORA-39171: Job is experiencing ... -
ORA-39171: Job is experiencing a resumable wait
2014-12-08 19:37 4909In the datapump import phase y ... -
linux 环境中 oracle重启提示 insufficient privileges 错误
2014-11-20 18:43 2758第一个问题:启动服务的同时没有启动监听 [root@ ... -
数据库备份及存放
2014-11-08 16:28 7341.创建shell脚本 #!/bin/sh e ... -
不同表空间的两个用户,将A用户的数据库导入B用户
2014-09-16 15:24 1752CREATE TABLESPACE TEST2 ... -
oracle安装磁盘过小,但又需要再创建表空间
2014-09-16 15:20 652如题,需要在oracle安装磁盘之外的其他磁盘创建表空间, ... -
oracle安装磁盘过小
2014-09-16 15:13 620今天在测试一个数据导入的时候,悲惨的发现硬盘又被数据文件占满 ... -
存储过程与JOB
2012-05-15 11:08 944select t.* from all_jobs t whe ... -
ORA-04091 表发生了变化,触发器/函数不能读
2011-06-16 16:58 5170问题描述:在函数中查 ... -
The Connection descriptor used by the client
2011-02-10 09:20 2463可能是数据库上当前的连接数目已经超过了它能够处理的最大值. ... -
java数据库设计中的14个技巧
2011-02-09 21:07 909下述十四个技巧,是许 ... -
ORA-01591 锁定已被有问题的分配事务处理--解决方法
2011-02-09 21:05 1724最近,在webogic中使用两阶段提交事务,遇到了错误ja ... -
Oracle SQL的优化
2011-02-09 21:01 1221SQL的优化应该从5个方面进行调整:1.去掉不必要的大 ... -
面向程序员的数据库访问性能优化法则
2011-02-09 20:59 1175特别说明: 1、 本文只是面对数据库应用开发的程 ...
相关推荐
Oracle教程——深入浅出Oracle学习资料 Oracle数据库系统是全球广泛应用的关系型数据库管理系统,由甲骨文公司(Oracle Corporation)开发。本教程旨在为初学者和有经验的IT专业人士提供全面、深入的Oracle知识,...
《深入浅出Oracle:DBA入门、进阶与诊断案例》是一本专为数据库管理员(DBA)设计的Oracle技术指南。这本书详细介绍了Oracle数据库管理的基础知识,中级技能以及高级故障诊断技巧,旨在帮助读者从新手到专家逐步提升...
深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf
深入浅出Oracle EBS之Forms开发初级,
ORACLE深入浅出-中级篇
### 深入浅出Oracle EBS之Discoverer实例详解 #### 1. Oracle Discoverer总览 Oracle Discoverer是一款强大的商务智能工具,最初作为Oracle Business Intelligence Suite的一部分,旨在提供前端的数据可视化和报告...
kmod-oracleasm-2.0.8-15.el6_9.x86_64 oracleasm-support-2.1.8-1.el6.x86_64 oracleasmlib-2.0.4-1.el6.x86_64 安装顺序: rpm -ivh kmod-oracleasm-2.0.8-15.el6_9.x86_64.rpm rpm -ivh oracleasm-support-2.1.8...
### 深入浅出Oracle_EBS之Forms开发指南 #### 一、开发背景与基础 ##### 1.1 读者基础要求 本指南适用于具备一定Oracle E-Business Suite (EBS)基础知识的开发人员。为了更好地理解文档内容,读者需要熟悉Oracle ...
深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例深入浅出Oracle:DBA入门、进阶与诊断案例
《深入浅出Oracle:DBA入门、进阶与诊断案例》是一本专为数据库管理员(DBA)设计的Oracle技术指南。这本书详细介绍了Oracle数据库管理的基础知识,中级技能以及高级故障诊断技巧,旨在帮助读者从新手到专家逐步提升...
安装oracleasmlib需要的系统安装包,涵盖linux6 和 linux7,kmod-oracleasm-2.0.8-5.el6_7.x86_64.rpm,kmod-oracleasm-2.0.8-13.el6_8.x86_64.rpm,kmod-oracleasm-2.0.8-15.el7.x86_64.rpm,kmod-oracleasm-2.0.8-...
根据提供的文档标题、描述以及部分内容,本文将详细阐述Oracle E-Business Suite (EBS) 全模块设置的具体步骤和技术要点,特别关注财务管理(FIN)、分销(DIS)与制造(MFG)应用模块的设置过程。 ### 定义客户化应用 #...
### 深入浅出Oracle:DBA入门、进阶与诊断案例 #### 一、Oracle数据库概述 《深入浅出Oracle》这本书是由盖国强编著,由人民邮电出版社出版的一本经典著作。该书主要围绕Oracle数据库展开,为读者提供了从基础知识...
《深入浅出Oracle:DBA入门、进阶与诊断案例》是数据库领域的经典之作,由知名专家eagle精心编著,旨在帮助读者全面理解和掌握Oracle数据库管理(DBA)的各项技能。Oracle DBA是一个关键角色,负责维护Oracle数据库...
深入浅出Oracle之Business Events实例详解深入浅出Oracle之Business Events实例详解
在分析实例的过程中,兼顾深度与广度,不仅对实际问题的现象、产生原因和相关的原理进行了深入浅出的讲解,更主要的是,结合实际应用环境,提供了一系列解决问题的思路和方法,包括详细的操作步骤,具有很强的实战性...
这可以通过下载并安装`oracle-instantclient-release-el7.rpm`完成。 3. **安装包**:使用`yum`命令安装`oracleasmlib`和`oracleasm-support`。 ``` sudo yum install oracleasmlib-2.0.12-1.el7.x86_64.rpm ...