亚洲综合社区欧美综合色-欧美逼逼一区二区三区-国产老熟女高潮精品网站-国产日韩最新视频在线看

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Oracle 10g 讀書筆記之鎖

發(fā)布時(shí)間:  2012/8/29 17:11:18

鎖機(jī)制用于管理對共享資源的并發(fā)訪問。

在 Oracle 中,事務(wù)應(yīng)該延遲到適當(dāng)?shù)臅r(shí)刻提交,因?yàn)槭聞?wù)很長或很大,一般不會(huì)對系統(tǒng)有壓力;行級鎖沒有相關(guān)的開銷,1個(gè)行鎖還是1000000個(gè)行鎖專用于鎖定這個(gè)信息的“資源”數(shù)都是一樣的;

不要以為鎖升級“對系統(tǒng)更好”(例如使用表鎖而不是行鎖),Oracle 中鎖升級對系統(tǒng)沒有任何好處,不會(huì)節(jié)省任何資源;可以同時(shí)得到并發(fā)性和一致性,數(shù)據(jù)讀取器不會(huì)被寫入器阻塞。
-
 

使用 ORA_ROWSCN 的樂觀鎖定:

ORA_ROWSCN 建立在內(nèi)部 Oracle 系統(tǒng)時(shí)鐘(SCN)基礎(chǔ)上。在 oracle 中,每次提交時(shí),SCN 都會(huì)推進(jìn)。除非創(chuàng)建表時(shí)支持在行級維護(hù) ORA_ROWSCN ,否則 oracle 會(huì)在塊級維護(hù)。

創(chuàng)建表時(shí)啟用 ROWDEPENDENCIES,也可以使用 DBMS_REDEFINITION 中的在線重建功能。

查詢語句:select id, dbms_rowid.rowid_block_number(rowid) blockno, ora_rowscn from table

執(zhí)行 INSERT、UPDATE、DELETE、MERGE 和 SELECT FOR UPDATE 時(shí)會(huì)阻塞,最后一個(gè)增加 NOWAIT 就不會(huì)阻塞。

Oracle 從來不會(huì)鎖升級,但它會(huì)執(zhí)行鎖轉(zhuǎn)換或鎖提升。主要有三類鎖:

1、DML 鎖:用于確保一次只有一個(gè)人能修改某一行,而且你正在處理一個(gè)表時(shí)別人不能刪除這個(gè)表。

a、TX鎖(事務(wù)鎖):事務(wù)發(fā)起第一個(gè)修改時(shí)會(huì)得到TX鎖,而且會(huì)一直持有這個(gè)鎖,直至事務(wù)執(zhí)行提交或回滾。

oralce 并沒有一個(gè)傳統(tǒng)的鎖管理器,不會(huì)用鎖管理器為系統(tǒng)中鎖定的每一行維護(hù)一個(gè)長長的列表。它只是簡單找到想鎖定的那一行并鎖定它。

在待鎖定的行所在的數(shù)據(jù)塊的最前面有一個(gè)“開銷”空間,這里會(huì)存放該塊的一個(gè)事務(wù)表,大小由創(chuàng)建對象時(shí) CREATE 語句的兩個(gè)參數(shù)決定:

INITTRANS:初始的預(yù)分配大小,對于索引和表,默認(rèn)為2。在頻繁修改的表上增加該值,同時(shí) PCTFREE 值也需要相應(yīng)的增加。

MAXTRANS:可以擴(kuò)展到的最大值,默認(rèn)為 255,即該塊最大的并發(fā)事務(wù)數(shù)。Oracle 10g 該參數(shù)已經(jīng)不再使用。

b、TM 鎖:用于確保在修改表的內(nèi)容時(shí),表的結(jié)構(gòu)不會(huì)改變。

每個(gè)事務(wù)只能得到一個(gè) TX 鎖,但修改多少個(gè)對象,就能得到多少個(gè) TM 鎖。并且鎖的總數(shù)可以通過 DML_LOCKS 參數(shù)定義。

如果參數(shù)設(shè)置為 0,則不允許 DDL。通過 ALTER TABLE TABLENAME DISABLE TABLE LOCK 命令,逐個(gè)禁用 TM 鎖。

2、DDL 鎖:在 DDL 操作中會(huì)自動(dòng)為對象加 DDL 鎖,從而保護(hù)這些對象不會(huì)被其他會(huì)話所修改。

a、排他鎖:防止其它會(huì)話得到它們自己的 DDL 鎖或 TM 鎖。這說明 DDL 操作期間可以查詢表,但無法修改。

大多數(shù) DDL 都帶有一個(gè)排他 DDL 鎖。例如 alter table t add new_column date;

例外:create index t_idx on t(x) online,它只會(huì)試圖得到表上的一個(gè)低級(mode 2)TM鎖,所以在 DDL 語句執(zhí)行期間對表所做的修改維護(hù)一個(gè)記錄,執(zhí)行 CREATE 時(shí)再把這些修改應(yīng)用至新的索引。

b、共享鎖:保護(hù)所引用對象的結(jié)構(gòu),使之不會(huì)其他會(huì)話修改,但是允許修改數(shù)據(jù)。在創(chuàng)建存儲(chǔ)的編譯對象(如過程或視圖)時(shí),會(huì)對依賴的對象加這種共享 DDL 鎖。

c、可中斷解析鎖:允許一個(gè)對象向另外某個(gè)對象注冊其依賴性。當(dāng)某會(huì)話解析一條語句時(shí),對該語句引用的每一個(gè)對象都會(huì)加一個(gè)解析鎖。目的是如果引用對象被修改,則將緩存的語句置為無效。

利用視圖 DBA_DLL_LOCKS 查看該信息。視圖腳本:[Oracle_HOME]/RDBMS/ADMIN\/catblock.sql

3、內(nèi)部鎖和閂:閂是輕量級的串行化設(shè)備,用于協(xié)調(diào)對共享數(shù)據(jù)結(jié)構(gòu)、對象和文件的多用戶訪問。設(shè)計(jì)為只保持極短的一段時(shí)間。使用諸如“測試和設(shè)置”以及“比較及交換”之類的原子指令來處理閂。

由于設(shè)置和釋放閂的指令是原子性的,盡管可能有多個(gè)進(jìn)程在同時(shí)請求它,但操作系統(tǒng)本身可以保證只有一個(gè)進(jìn)程能測試和設(shè)置閂。


本文出自:億恩科技【1tcdy.com】

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線