oracle table-lock的5种模式

oracle table-lock的5种模式

Oracle中的锁定可以分为几类:
1、DML lock(data lock),
2、DDL lock(dictionary lock)
3、internal lock/latch。

DML lock又可以分为row lock和table lock。row lock在select.. for update/insert/update/delete时隐式自动产生,而table lock除了隐式产生,也可以调用lock table <table_name> in </table_name> name来显示锁定。

如果不希望别的session lock/insert/update/delete表中任意一行,只允许查询,可以用lock table table_name in exclusive mode。(X)这个锁定模式级别最高,并发度最小。

如果允许别的session查询或用select for update锁定记录,不允许insert/update/delete,可以用
lock table table_name in share row exclusive mode。(SRX)

如果允许别的session查询或select for update以及lock table table_name in share mode,只是不允许insert/update/delete,可以用
lock table table_name in share mode。(share mode和share row exclusive mode的区别在于一个是非抢占式的而另一个是抢占式的。进入share row exclusive mode后其他session不能阻止你insert/update/delete,而进入share mode后其他session也同样可以进入share mode,进而阻止你对表的修改。(S)

还有两种锁定模式,row share(RS)和row exclusive(RX)。他们允许的并发操作更多,一般直接用DML语句自动获得,而不用lock语句。
详细参考concepts文档中的"Type Of Locks":
http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96524/c21cnsis.htm#2937 


-------------------------------------
怎么unlock table 解锁

方法一、kill session:

SQL> select object_id,session_id from v$locked_object;  //注意session_id 就是上锁的 session标志
SQL> select username,sid,SERIAL#  from v$session where sid=。。;      //这里的SID = session_id 
SQL> alter system kill session 'id,serial#';     //杀死该session

方法二、rollback/commit 终止事务处理


ORACLE 大表建立索引的一些考虑  

首先, 应当考虑表空间和磁盘空间是否足够 。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一张大表建立索引的时候首先应当考虑的是空间容量问题。
其次,在对建立索引的时候要对表进行加锁,因此应当注意 操作在业务空闲的时候进行
性能调整方法:
首先应考虑IO, 物理上,应当尽量把索引与数据分散到不同的磁盘上。 逻辑上,数据表空间与索引表空间分开。这是在建索引时应当尊守的基本原则
其次, 在建立索引的时候要对表进行全表的扫描工作 ,因此,应当考虑调大初始化参数 db_file_multiblock_read_count的值。一般设置为16或更大
再 次, 建立索引除了要进行全表扫描外同时还要对数据进行大量的排序操作 ,因此,应当调整排序区的大小。在9I之前, 可以在SESSION级别上加大sort_area_size 的大小, 比如设置为100M或者更大。9I 以后, 如果 初始化参数workarea_size_policy的值为TRUE, 则排序区从PGA_AGGREGATE_TARGET里自动分配获得


你可能感兴趣的:(oracle table-lock的5种模式)