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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9240380/viewspace-1819302/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值