欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle怎么鎖住某行,oracle行鎖實現(xiàn)

oracle如何實現(xiàn)行級鎖

如果當前有用戶在對某行數(shù)據(jù)進行修改登操作,oracle會在這行數(shù)據(jù)上添加行級鎖,期間,所有用戶對該行數(shù)據(jù)只能查詢,不可修改,如果比如說執(zhí)行update操作,需等待該修改操作事務提交或者回滾之后,才行。

10年積累的成都網(wǎng)站制作、網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設流程,更有曲江免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

oracle數(shù)據(jù)庫怎么鎖表

oracle數(shù)據(jù)庫分行級鎖和表級鎖。用select * from table-name for update完成行級鎖。用delete或update完成表級鎖。你鎖定的資源 別人會等待你的提交語句或回退語句完成以后再繼續(xù)進行。

oracle數(shù)據(jù)庫中什么叫行鎖

行鎖就是當你對數(shù)據(jù)庫中某張表的某一行進行操作時,該行就被鎖住,其他人無法操作

Oracle中什么鎖用于鎖定表,僅允許其他用戶查詢表中的行,行不允許插入,更新,或刪除行

ORACLE里鎖有以下幾種模式:

0:none

1:null 空

2:Row-S 行共享(RS):共享表鎖,sub share

3:Row-X 行獨占(RX):用于行的修改,sub exclusive

4:Share 共享鎖(S):阻止其他DML操作,share

5:S/Row-X 共享行獨占(SRX):阻止其他事務操作,share/sub exclusive

6:exclusive 獨占(X):獨立訪問使用,exclusive

一般是自動實現(xiàn)的,譬如你用DDL語句,那個表肯定就是表鎖定了,DML不能使這個表不能插入,只能用手工鎖定這個表來實現(xiàn)。lock table table_name in exclusive mode NOWAIT

ORACLE里幾種鎖模式

ORACLE鎖具體分為以下幾類:

1.按用戶與系統(tǒng)劃分,可以分為自動鎖與顯示鎖

自動鎖:當進行一項數(shù)據(jù)庫操作時,缺省情況下,系統(tǒng)自動為此數(shù)據(jù)庫操作獲得所有有必要的

顯示鎖:某些情況下,需要用戶顯示的鎖定數(shù)據(jù)庫操作要用到的數(shù)據(jù),才能使數(shù)據(jù)庫操作執(zhí)行得更好,顯示鎖是用戶為數(shù)據(jù)庫對象設定的。

2.按鎖級別劃分,可分為共享鎖與排它鎖

共享鎖:共享鎖使一個事務對特定數(shù)據(jù)庫資源進行共享訪問——另一事務也可對此資源進行訪問或獲得相同共享鎖。共享鎖為事務提供高并發(fā)性,但如拙劣的事務設計+共享鎖容易造成死鎖或數(shù)據(jù)更新丟失。

排它鎖:事務設置排它鎖后,該事務單獨獲得此資源,另一事務不能在此事務提交之前獲得相同對象的共享鎖或排它鎖。

3.按操作劃分,可分為DML鎖、DDL鎖

+DML鎖又可以分為,行鎖、表鎖、死鎖

-行鎖:當事務執(zhí)行數(shù)據(jù)庫插入、更新、刪除操作時,該事務自動獲得操作 表中操作行的排它鎖。

-表級鎖:當事務獲得行鎖后,此事務也將自動獲得該行的表鎖(共享鎖),以防止其它事務進行DDL語句影響記錄行的更新。事務也可以在進行 過程中獲得共享鎖或排它鎖,只有當事務顯示使用LOCK TABLE語 句顯示的定義一個排它鎖時,事務才會獲得表上的排它鎖,也可使用

LOCK TABLE顯示的定義一個表級的共享鎖(LOCK TABLE具體用法請參 考相關文檔)。

-死鎖:當兩個事務需要一組有沖突的鎖,而不能將事務繼續(xù)下去的話,就 出現(xiàn)死鎖。

如事務1在表A行記錄#3中有一排它鎖,并等待事務2在表A中記錄#4 中排它鎖的釋放,而事務2在表A記錄行#4中有一排它鎖,并等待事務 1在表A中記錄#3中排它鎖的釋放,事務1與事務2彼此等待,因此就造 成了死鎖。死鎖一般是因拙劣的事務設計而產(chǎn)生。

死鎖只能使用SQL下:alter system kill session 'sid,serial#';

或者使用相關操作系統(tǒng)kill進程的命令,如UNIX下kill -9 sid,或者 使用其它工具殺掉死鎖進程。

+DDL鎖又可以分為:排它DDL鎖、共享DDL鎖、分析鎖

-排它DDL鎖:創(chuàng)建、修改、刪除一個數(shù)據(jù)庫對象的DDL語句獲得操作對象的 排它鎖。

如使用alter table語句時,為了維護數(shù)據(jù)的完成性、一致性、

合法性,該事務獲得一排它DDL鎖。

-共享DDL鎖:需在數(shù)據(jù)庫對象之間建立相互依賴關系的DDL語句通常需共享

獲得DDL鎖。

如創(chuàng)建一個包,該包中的過程與函數(shù)引用了不同的數(shù)據(jù)庫表,

當編譯此包時,該事務就獲得了引用表的共享DDL鎖。

-分析鎖:ORACLE使用共享池存儲分析與優(yōu)化過的SQL語句及PL/SQL程序,使

運行相同語句的應用速度更快。一個在共享池中緩存的對象獲得

它所引用數(shù)據(jù)庫對象的分析鎖。分析鎖是一種獨特的DDL鎖類型,

ORACLE使用它追蹤共享池對象及它所引用數(shù)據(jù)庫對象之間的依賴 關系。當一個事務修改或刪除了共享池持有分析鎖的數(shù)據(jù)庫對象

時,ORACLE使共享池中的對象作廢,下次在引用這條SQL/PLSQL語 句時,ORACLE重新分析編譯此語句。

4.內(nèi)部閂鎖

內(nèi)部閂鎖:這是ORACLE中的一種特殊鎖,用于順序訪問內(nèi)部系統(tǒng)結構。

當事務需向緩沖區(qū)寫入信息時,為了使用此塊內(nèi)存區(qū)域, ORACLE首先必須取得這塊內(nèi)存區(qū)域的閂鎖,才能向此塊內(nèi)存寫入

信息。

如何對“行、表、數(shù)據(jù)庫”加鎖?

1

如何鎖一個表的某一行

SET TRANSACTION

ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

2 鎖定數(shù)據(jù)庫的一個表

SELECT * FROM table WITH (HOLDLOCK)

加鎖語句:

sybase:

update 表 set col1=col1 where 1=0

;

MSSQL:

select col1 from 表 (tablockx)

where

1=0

;

oracle:

LOCK TABLE 表 IN EXCLUSIVE MODE ;

加鎖后其它人不可操作,直到加鎖用戶解鎖,用commit或rollback解鎖

幾個例子幫助大家加深印象

設table1(A,B,C)

A B C

a1 b1 c1

a2 b2 c2

a3 b3 c3

1)排它鎖

新建兩個連接

在第一個連接中執(zhí)行以下語句

begin tran

update table1

set

A='aa'

where B='b2'

waitfor delay

'00:00:30' --等待30秒

commit tran

在第二個連接中執(zhí)行以下語句

begin tran

select * from table1

where B='b2'

commit tran

若同時執(zhí)行上述兩個語句,則select查詢必須等待update執(zhí)行完畢才能執(zhí)行即要等待30秒

2)共享鎖

在第一個連接中執(zhí)行以下語句

begin tran

select * from table1

holdlock

-holdlock人為加鎖

where B='b2'

waitfor delay

'00:00:30' --等待30秒

commit tran

在第二個連接中執(zhí)行以下語句

begin tran

select A,C

from

table1

where B='b2'

update table1

set

A='aa'

where B='b2'

commit tran

若同時執(zhí)行上述兩個語句,則第二個連接中的select查詢可以執(zhí)行

而update必須等待第一個事務釋放共享鎖轉為排它鎖后才能執(zhí)行

即要等待30秒

3)死鎖

增設table2(D,E)

D E

d1 e1

d2 e2

在第一個連接中執(zhí)行以下語句

begin tran

update table1

set

A='aa'

where B='b2'

waitfor delay

'00:00:30'

update table2

set

D='d5'

where E='e1'

commit tran

在第二個連接中執(zhí)行以下語句

begin tran

update table2

set

D='d5'

where E='e1'

waitfor delay

'00:00:10'

update table1

set

A='aa'

where B='b2'

commit tran

同時執(zhí)行,系統(tǒng)會檢測出死鎖,并中止進程

補充一點:

Sql Server2000支持的表級鎖定提示

HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不需要時立即釋放,等于SERIALIZABLE事務隔離級別

NOLOCK 語句執(zhí)行時不發(fā)出共享鎖,允許臟讀 ,等于 READ

UNCOMMITTED事務隔離級別

PAGLOCK 在使用一個表鎖的地方用多個頁鎖

READPAST 讓sql

server跳過任何鎖定行,執(zhí)行事務,適用于READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區(qū)域和表鎖

ROWLOCK

強制使用行鎖

TABLOCKX 強制使用獨占表級鎖,這個鎖在事務期間阻止任何其他事務使用這個表

UPLOCK

強制在讀表時使用更新而不用共享鎖

應用程序鎖:

應用程序鎖就是客戶端代碼生成的鎖,而不是sql server本身生成的鎖

處理應用程序鎖的兩個過程

sp_getapplock 鎖定應用程序資源

sp_releaseapplock

為應用程序資源解鎖

注意: 鎖定數(shù)據(jù)庫的一個表的區(qū)別

SELECT * FROM table WITH (HOLDLOCK)

其他事務可以讀取表,但不能更新刪除

SELECT * FROM table WITH (TABLOCKX)

其他事務不能讀取表,更新和刪除

1

如何鎖一個表的某一行

/*

測試環(huán)境:windows 2K server + Mssql 2000

所有功能都進行測試過,并有相應的結果集,如果有什么疑義在論壇跟帖

關于版權的說明:部分資料來自互聯(lián)網(wǎng),如有不當請聯(lián)系版主,版主會在第一時間處理。

功能:sql遍歷文件夾下的文本文件名,當然你修改部分代碼后可以完成各種文件的列表。

*/

A

連接中執(zhí)行

SET TRANSACTION

ISOLATION LEVEL REPEATABLE

READ

begin tran

select * from tablename

with

(rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B連接中如果執(zhí)行

update tablename set

colname='10' where id=3

--則要等待5秒

update tablename

set

colname='10' where id 3

--可立即執(zhí)行

2

鎖定數(shù)據(jù)庫的一個表

SELECT * FROM table WITH (HOLDLOCK)

注意: 鎖定數(shù)據(jù)庫的一個表的區(qū)別

SELECT * FROM table WITH (HOLDLOCK)

其他事務可以讀取表,但不能更新刪除

SELECT * FROM table WITH (TABLOCKX)

其他事務不能讀取表,更新和刪除

網(wǎng)站標題:oracle怎么鎖住某行,oracle行鎖實現(xiàn)
當前網(wǎng)址:http://chinadenli.net/article18/hdodgp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)全網(wǎng)營銷推廣、動態(tài)網(wǎng)站自適應網(wǎng)站、響應式網(wǎng)站服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司