Oracle鎖3:DDL鎖,oracle鎖3ddl

來源:互聯網
上載者:User

Oracle鎖3:DDL鎖,oracle鎖3ddl
當一個進行中的DDL操作執行在或者引用了schema對象(注)時,Data dcictionary(DDL)鎖用於保護該schema對象的定義,在DDL操作執行期間僅鎖定單個schema對象,資料庫從不鎖定整個資料字典。

Oracle資料庫自動地請求DDL鎖,使用者不能顯示請求DDL鎖。例如,如果使用者建立一個預存程序,那麼資料庫自動為預存程序中引用的對象請求DDL鎖,這些DDL鎖防止預存程序被編譯完成前這個對象被改變或者刪除。

排它DDL鎖
一個排它DDL鎖阻止其它session擷取DDL或DML鎖。大部分DDL操作,除了在“共用DDL鎖”中描述的,都會為資源要求排它DDL鎖,例如:當ALTER TABLE正在為表格增加一列時,DROP TABLE不允許被執行,反之亦然。
排它DDL鎖持續直到DDL操作執行完成並自動認可,在這期間,如果其它操作需要使用該schema對象,則需要等待直到老的DDL鎖被釋放。
共用DDL鎖
共用DDL鎖防止會破壞結構的衝突的DDL操作,但是允許類似的DDL操作並存執行。
例如,當一個CREATE PROCEDURE被執行時,事務會為所有的參考資料表要求共用DDL鎖,其它事務能並行地建立引用相同表的預存程序並在相同的表上請求共用DDL鎖,但是沒有事務能請求一個排它DDL鎖在任何被引用的表上。
共用DDL鎖持續直到DDL操作執行完成並自動認可,因此,擷取一個共用DDL鎖的事務被保證事務執行期間schema對象保持不變。
可中斷解析鎖
SQL語句和PL/SQL塊中引用的每個schema對象都會使用一個解析鎖,因為如果一個引用對象被改變或者刪除,對應的共用SQL域(注)將失效。一個解析鎖被叫做可中斷解析鎖(breakable parse lock),因為它不阻止任何DDL操作並且為了允許衝突的DDL操作能被中斷。
一個解析鎖在解析SQL語句時被要求,如果語句的共用SQL域被保留在共用池中,鎖將被一直持有。

註:
schema是資料庫物件的名字集合;
schema對象是在一個schema中儲存的資料的邏輯結構;
共用SQL域(shared SQL area)指在共用池(shared pool)中為一個SQL語句儲存的解析樹(parse tree)和執行計畫,一個語句只有一個共用SQL域存在。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.