易截截图软件、单文件、免安装、纯绿色、仅160KB

深入浅出oracle锁 原理篇 & 停止无反应的sql会话

在现代的多用户多任务系统中,必然会出现多个用户同时访问共享的某个对象,这个对象可能是表,行,或者内存结构,为了解决多个用户并发性访问带来的数据的安全性,完整性及一致性问题,必须要有一种机制,来使对这些共享资源的并发性访问串行化,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语句时,第一个会话在该条记录上加锁,其他的会话处于等


相关文档:

SQL操作全集

using System;
using System.Threading;
namespace ConsoleApplication1
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
& ......

sql server2005值比较求救各位高手

在sql server2005中怎么进行多值与多值之间的比较?可以比较吗?
例如:
 我要证明1,2,3,4,5(在表中查询出的值)与3,2,6,5(自定义参数)两条数据中有相同的值,并将相同值的列的相应表信息用print打印出来
注意,不能单个比较……
不知道可不可查询出来, 请各位高手帮帮忙…… ......

sql点滴

子表查询,父表一定要加别名,否则数据会有问题,不报编译错
select * from table1 a where exist(select 1 from table2 where a.id=b.id)
存储过程结果集插入到现有表
insert into table1 exec procname args
联合已有表,紧跟在后面,对汇总很有用
select a from table1 union all select '合计'
结果集里的某 ......

SQL Server视图使用

视图可以被看成是虚拟表或存储查询。可通过视图访问的数据不作为独特的对象存储在数据库内。数据库内存储的是 SELECT 语句。SELECT 语句的结果集构成视图所返回的虚拟表。用户可以用引用表时所使用的方法,在 Transact-SQL 语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:
  将用户限定在表 ......

SQL Having子句

SELECT
count
(
userName
)

from
`userInfo`

GROUP
BY
userName
HAVING
count
(
userName
)
>
1。
这个Having一定要放在GROUP BY的后面。
而且很特殊的情况是在有group by的时候,是不能用到where子句的。而且Having子句一般是放在其他子句的后面的。
当我们选不只一个栏位,且其 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号