• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    Oracle 10g 讀書筆記之鎖

    發布時間:  2012/8/29 17:11:18

    鎖機制用于管理對共享資源的并發訪問。

    在 Oracle 中,事務應該延遲到適當的時刻提交,因為事務很長或很大,一般不會對系統有壓力;行級鎖沒有相關的開銷,1個行鎖還是1000000個行鎖專用于鎖定這個信息的“資源”數都是一樣的;

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

    使用 ORA_ROWSCN 的樂觀鎖定:

    ORA_ROWSCN 建立在內部 Oracle 系統時鐘(SCN)基礎上。在 oracle 中,每次提交時,SCN 都會推進。除非創建表時支持在行級維護 ORA_ROWSCN ,否則 oracle 會在塊級維護。

    創建表時啟用 ROWDEPENDENCIES,也可以使用 DBMS_REDEFINITION 中的在線重建功能。

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

    執行 INSERT、UPDATE、DELETE、MERGE 和 SELECT FOR UPDATE 時會阻塞,最后一個增加 NOWAIT 就不會阻塞。

    Oracle 從來不會鎖升級,但它會執行鎖轉換或鎖提升。主要有三類鎖:

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

    a、TX鎖(事務鎖):事務發起第一個修改時會得到TX鎖,而且會一直持有這個鎖,直至事務執行提交或回滾。

    oralce 并沒有一個傳統的鎖管理器,不會用鎖管理器為系統中鎖定的每一行維護一個長長的列表。它只是簡單找到想鎖定的那一行并鎖定它。

    在待鎖定的行所在的數據塊的最前面有一個“開銷”空間,這里會存放該塊的一個事務表,大小由創建對象時 CREATE 語句的兩個參數決定:

    INITTRANS:初始的預分配大小,對于索引和表,默認為2。在頻繁修改的表上增加該值,同時 PCTFREE 值也需要相應的增加。

    MAXTRANS:可以擴展到的最大值,默認為 255,即該塊最大的并發事務數。Oracle 10g 該參數已經不再使用。

    b、TM 鎖:用于確保在修改表的內容時,表的結構不會改變。

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

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

    2、DDL 鎖:在 DDL 操作中會自動為對象加 DDL 鎖,從而保護這些對象不會被其他會話所修改。

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

    大多數 DDL 都帶有一個排他 DDL 鎖。例如 alter table t add new_column date;

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

    b、共享鎖:保護所引用對象的結構,使之不會其他會話修改,但是允許修改數據。在創建存儲的編譯對象(如過程或視圖)時,會對依賴的對象加這種共享 DDL 鎖。

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

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

    3、內部鎖和閂:閂是輕量級的串行化設備,用于協調對共享數據結構、對象和文件的多用戶訪問。設計為只保持極短的一段時間。使用諸如“測試和設置”以及“比較及交換”之類的原子指令來處理閂。

    由于設置和釋放閂的指令是原子性的,盡管可能有多個進程在同時請求它,但操作系統本身可以保證只有一個進程能測試和設置閂。


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

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

    0371-60135900
    7*24小時客服服務熱線