oracle如何給表加鎖 oracle建索引會(huì)鎖表嗎?
oracle建索引會(huì)鎖表嗎?應(yīng)該沒(méi)有默認(rèn)索引。創(chuàng)建主鍵或索引后,Oracle將在單獨(dú)的區(qū)域中創(chuàng)建索引數(shù)據(jù)。索引數(shù)據(jù)和表數(shù)據(jù)是分開(kāi)存儲(chǔ)的,而不是一起存儲(chǔ)的。索引數(shù)據(jù)對(duì)應(yīng)于表的主鍵或其他索引。例如,如果表
oracle建索引會(huì)鎖表嗎?
應(yīng)該沒(méi)有默認(rèn)索引。創(chuàng)建主鍵或索引后,Oracle將在單獨(dú)的區(qū)域中創(chuàng)建索引數(shù)據(jù)。索引數(shù)據(jù)和表數(shù)據(jù)是分開(kāi)存儲(chǔ)的,而不是一起存儲(chǔ)的。索引數(shù)據(jù)對(duì)應(yīng)于表的主鍵或其他索引。例如,如果表中有100個(gè)數(shù)據(jù),并且有一個(gè)主鍵,則索引區(qū)中會(huì)有100個(gè)數(shù)據(jù),而對(duì)應(yīng)的數(shù)據(jù)是主鍵數(shù)據(jù),因此每個(gè)數(shù)據(jù)都是唯一的,不會(huì)重復(fù)。在檢索數(shù)據(jù)時(shí),首先檢索索引區(qū)域,因?yàn)槟抢锏臄?shù)據(jù)較少,所以速度非??臁?/p>
但是,如果沒(méi)有主鍵,則表中可能存在重復(fù)數(shù)據(jù),因此系統(tǒng)不知道自動(dòng)生成索引的規(guī)則,因此將沒(méi)有默認(rèn)索引。Oracle每次都會(huì)查詢整個(gè)表。
平時(shí)使用oracle時(shí),為什么會(huì)鎖表?
簡(jiǎn)而言之,鎖定的目的是確保數(shù)據(jù)的一致性。鎖不僅存在于Oracle中,也存在于其他數(shù)據(jù)庫(kù)中,但其機(jī)制可能非常不同。至于什么樣的操作會(huì)鎖表,鎖有很多種。您所說(shuō)的鎖表可能是行級(jí)鎖,即事務(wù)鎖。例如,在update語(yǔ)句中,更新的行上會(huì)有一個(gè)鎖—一個(gè)可以阻止其他事務(wù)修改這些行的鎖。盡管此時(shí)此表上有表級(jí)鎖,但表級(jí)鎖不會(huì)影響其他事務(wù)修改表中的其他行,但它會(huì)妨礙此表上的DDL操作。
oracle表在什么情況下會(huì)被鎖?。?/h2>
附加指定的表,然后截?cái)嗥渌頃r(shí),將生成鎖表。驗(yàn)證步驟如下:1。創(chuàng)建一個(gè)測(cè)試表,創(chuàng)建一個(gè)測(cè)試表uulock(ID number,value VARCHAR2(200))2。執(zhí)行append語(yǔ)句,不提交,在testLock values(1,1)3中插入/*append*/。再次執(zhí)行clear語(yǔ)句,truncate table testuulock report Lock table error,4。查看lock table語(yǔ)句,找到鎖定的表,從v$lockeduobject t,useruobjects b中選擇b.objectuname,t.*,其中t.objectuid=b.objectuid
通常只發(fā)生鎖定超時(shí)。當(dāng)一個(gè)進(jìn)程需要訪問(wèn)數(shù)據(jù)庫(kù)表或字段時(shí),另一個(gè)程序正在執(zhí)行鎖訪問(wèn)(如修改數(shù)據(jù)),那么該進(jìn)程將等待。如果等待很長(zhǎng)時(shí)間后鎖仍未釋放,鎖將超時(shí),報(bào)告系統(tǒng)錯(cuò)誤,并拒絕執(zhí)行相應(yīng)的SQL操作。僵局的情況很少。例如,一個(gè)進(jìn)程需要訪問(wèn)兩個(gè)資源(數(shù)據(jù)庫(kù)表或字段)。在獲取資源時(shí),進(jìn)程將其鎖定,然后等待下一個(gè)資源空閑。此時(shí),如果另一個(gè)進(jìn)程也需要兩個(gè)資源,并且已經(jīng)獲取并鎖定了第二個(gè)資源,那么它將處于死鎖狀態(tài),因?yàn)楫?dāng)前進(jìn)程被鎖定如果第一個(gè)資源被固定為等待第二個(gè)資源,而另一個(gè)進(jìn)程將第二個(gè)資源鎖定為等待第一個(gè)資源,那么這兩個(gè)進(jìn)程將永遠(yuǎn)不會(huì)得到滿足。
erp100.com