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里自動分配獲得