oracle lock dba_ddl_locks獲取表級共享鎖及表級排它鎖之系列八
背景
lock鎖不止有DML鎖,也有DDL鎖,之前已經學習了諸多鎖的知識與概念,現在我們學習DDL鎖,力圖更為全面瞭解ORACLE鎖的知識體系,如此運維過程中方可穩中有勝。結論
1,透過dba_ddl_locks可以獲取ddl鎖的資訊
2,使用select session_id,owner,name,type,mode_held,mode_requested from dba_ddl_locks where session_id in (174,332) and owner='SCOTT';
查詢DDL鎖的佔用情況
,其包括資訊如:會話,資源的所有者,資源名稱,資源型別,持鎖模式,請求鎖模式
3,必須同時啟用2個建立或編譯引用相同表的儲存過程,才會產生對於引用表的表級共享鎖
4,alter table add持行級排它鎖
alter table add default持表級排它鎖
也就是說alter table不同選項的持鎖模大有差異
在生產環境,建議更多采用alter table add default,當然最終在生產環境,也要結合你的實際需求
引發出的新問題
1,oracle lock機制還沒有完全搞通,搞懂,還要在實戰中繼續思考2,oracle在不同版本鎖機制的演化,當然這個很高階了,慢慢來吧
測試
SQL> select * from v$version where rownum=1;
BANNER
---------------------------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
SQL> show user
USER is "SCOTT"
SQL> alter session set current_schema=scott;
Session altered.
SQL> grant dba to scott;
Grant succeeded.
1,先看下DDL排它鎖
SQL> create table t_create(a int);
Table created.
可見create table不持任何鎖
SQL> alter table t_create add b int;
Table altered.
LOCK TABLE "T_CREATE" IN ROW EXCLUSIVE MODE NOWAIT
可見alter table add持行級排它鎖
SQL> alter table t_create add b int default 0;
Table altered.
LOCK TABLE "T_CREATE" IN EXCLUSIVE MODE NOWAIT
可見alter table add default持表級排它鎖,可見alter table add如果選項不同,持鎖模式大有不同喲
2,再看下DDL共享鎖
建立儲存過程
SQL> create or replace procedure proc_t_create1
2 as
3 v_cnt pls_integer;
4 begin
5 select count(a) into v_cnt from t_create;
6 end;
7 /
Procedure created.
沒有持任何鎖
SQL> alter procedure proc_t_create1 compile;
Procedure altered.
沒有持任何鎖
轉換思路,向測試表插入大量資料
SQL> insert into t_create select level,level from dual connect by level<=1000000;
1000000 rows created.
SQL> commit;
Commit complete.
經過測試,仍未發現持任何鎖
再換一種思路,重讀官方手冊,發現是必須要2個會話以上建立或編譯引用相同基表的儲存過程,才會持表級共享鎖
新開一個會話,也建立另一個引用測試的儲存過程
SQL> select sid from v$mystat where rownum=1;
SID
----------
332
create or replace procedure proc_t_create2
as
v_cnt pls_integer;
begin
select count(a) into v_cnt from t_create;
end;
/
會產生332會話的對於引用表的表級共級鎖(而且這個持鎖時間極短,非常快)
SQL> select session_id,owner,name,type,mode_held,mode_requested from dba_ddl_locks where session_id in (174,332) and owner='SCOTT';
SESSION_ID OWNER NAME TYPE MODE_HELD MODE_REQUESTED
---------- --------------- -------------------- ------------------------------ ------------------ ------------------
332 SCOTT PROC_T_CREATE2 Table/Procedure/Type Exclusive None
332 SCOTT T_CREATE Table/Procedure/Type Share None
332 SCOTT T_CREATE Table/Procedure/Type Share None
332 SCOTT SCOTT 18 Null None
個人簡介:
8年oracle從業經驗,具備豐富的oracle技能,目前在國內北京某專業oracle服務公司從事高階技術顧問。
服務過的客戶:
中國電信
中國移動
中國聯通
中國電通
國家電網
四川達州商業銀行
湖南老百姓大藥房
山西省公安廳
中國郵政
北京302醫院
河北廊坊新奧集團公司
專案經驗:
中國電信3G專案AAA系統資料庫部署及最佳化
中國聯通CRM資料庫效能最佳化
中國移動10086電商平臺資料庫部署及最佳化
湖南老百姓大藥房ERR資料庫sql最佳化專案
四川達州商業銀行TCBS核心業務系統資料庫模型設計和RAC部署及最佳化
四川達州商業銀行TCBS核心業務系統後端批處理儲存過程功能模組編寫及最佳化
北京高鐵訊號監控系統RAC資料庫部署及最佳化
河南宇通客車資料庫效能最佳化
中國電信電商平臺核心採購模組表模型設計及最佳化
中國郵政儲蓄系統資料庫效能最佳化及sql最佳化
北京302醫院資料庫遷移實施
河北廊坊新奧data guard部署及最佳化
山西公安廳身份證審計資料庫系統故障評估
聯絡方式:
手機:18201115468
qq : 305076427
qq微博: wisdomone1
新浪微博:wisdomone9
qq群:275813900
itpub部落格名稱:wisdomone1 http://blog.itpub.net/9240380/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-1819302/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL/InnoDB中,樂觀鎖、悲觀鎖、共享鎖、排它鎖、行鎖、表鎖、死鎖概念的理解MySql
- Mysql鎖之行級鎖和表級意向鎖MySql
- 使用oracle 10704 event分析獲取鎖lock及死鎖deadlock系列九Oracle
- 【鎖機制】共享鎖、排它鎖、悲觀鎖、樂觀鎖、死鎖等等
- 再說PHP檔案鎖,共享鎖和排它鎖注意點PHP
- 【JavaSE】淺談偏向鎖、輕量級鎖和重量級鎖,如何獲取鎖,如何撤銷鎖。Java
- MySQL 的共享鎖和排它鎖以及自動提交MySql
- MySQL鎖之三:MySQL的共享鎖與排它鎖編碼演示MySql
- PostgreSQL 併發控制機制(2):表級鎖和行級鎖SQL
- MySQL複習筆記(05):MySQL表級鎖和行級鎖MySql筆記
- 意向共享鎖與意向排它鎖:詳解與應用
- mysql表鎖與lock tablesMySql
- oracle lock轉換及oracle deadlock死鎖系列一Oracle
- MySQL鎖(讀鎖、共享鎖、寫鎖、S鎖、排它鎖、獨佔鎖、X鎖、表鎖、意向鎖、自增鎖、MDL鎖、RL鎖、GL鎖、NKL鎖、插入意向鎖、間隙鎖、頁鎖、悲觀鎖、樂觀鎖、隱式鎖、顯示鎖、全域性鎖、死鎖)MySql
- JAVA物件分析之偏向鎖、輕量級鎖、重量級鎖升級過程Java物件
- MySQL 避免行鎖升級為表鎖——使用高效的索引MySql索引
- ReentrantReadWriterLock原始碼(state設計、讀寫鎖、共享鎖、獨佔鎖及鎖降級)原始碼
- MySQL 共享鎖 (lock in share mode),排他鎖 (for update)MySql
- oracle 檢視鎖表和解鎖Oracle
- Oracle的鎖表與解鎖Oracle
- Oracle的TX鎖(行級鎖、事務鎖)Oracle
- Mysql在InnoDB引擎下索引失效行級鎖變表鎖案例MySql索引
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句[轉]OracleSQL
- ORACLE 鎖表的解決方法及查詢引起鎖表SQL語句方法OracleSQL
- mysql innodb 索引失效問題引起表級鎖MySql索引
- MySQL 行級鎖之 間隙鎖、臨鍵鎖MySql
- oracle 鎖表、解鎖的語句Oracle
- oracle表鎖住 解鎖辦法Oracle
- sql 開發篇一 之 表鎖查詢及解鎖SQL
- java 中的鎖 -- 偏向鎖、輕量級鎖、自旋鎖、重量級鎖Java
- 淺談偏向鎖、輕量級鎖、重量級鎖
- oracle鎖表問題Oracle
- oracle鎖表問題處理 v$lock v$locked_objectOracleObject
- 【鎖】Oracle鎖系列Oracle
- oracle檢視被鎖的表和解鎖Oracle
- 深入理解偏向鎖、輕量級鎖、重量級鎖
- java併發筆記之synchronized 偏向鎖 輕量級鎖 重量級鎖證明Java筆記synchronized
- oracle lock鎖_v$lock_轉Oracle