美高梅开户-美高梅官方网站开户

您的位置:美高梅开户 > 数据库 > Server被锁的表以及解锁

Server被锁的表以及解锁

发布时间:2019-10-23 04:03编辑:数据库浏览(57)

    查看被锁表:

    本文介绍通过Toad、EM及SQL语句来处理数据库产生的锁。在这之前需要对v$lock和v$session这两个数据字典有一定的了解。

    select spId
      from master..SysProcesses
     where db_Name(dbID) = '数据库名称'
       and spId <> @@SpId
       and dbID <> 0
    

    (一)使用Toad处理锁

    解除锁:

    (1)使用Toad的session browser查看锁情况

    exec ('Kill ' cast(@spid  as varchar))
    

    美高梅开户 1

     

    这里对每一个字段进行解释:

    查看被锁表:

    栏位名称 说明
    SID session ID,每一个session都会产生一个sid,用于标识会话
    User 产生锁的数据库用户
    Lock Type

    锁的类型,常见的有:

    --DML锁

    --Transaction锁(事物锁)等

    Mode Held session保持锁的模式:
    --none
    --null(NULL)
    --row-S(SS,行级共享锁。其它session只能查询这些数据行。SQL操作有select for update、lock for update、lock row share)
    --row-X(SX,行级排它锁。在提交前不允许做DML操作。SQL操作有insert、update、delete、lock row share)
    --share(S,共享锁。SQL操作有create index,lock share)

    --S/Row-X(SSX,共享行级排它锁。SQL操作有lock share row exclusive)
    --exclusive(X,排它锁。SQL操作有alter table、drop table、drop index、truncate table、lock exclusive等DDL操作)

    Owner 被锁定的对象的属主
    Object Type 被锁定的对象类型
    Object Name 被锁定的对象名称
    Blocking 该session是否正在阻塞其他session对资源进行访问。YES代表阻塞
    Session Blocked 该会话是否正处于被阻塞的状态,打勾代表该session正在被其他session阻塞
    OS User 建立该session的用户的OS名称
    Machine Name 建立该session的用户的Machine名称
    select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName   
    from   sys.dm_tran_locks where resource_type='OBJECT'
    

     

    spid 锁表进程
    tableName 被锁表名

    (2)使用Toad解锁

    解锁:

    美高梅开户 2

    declare @spid  int 
    Set @spid  = 57 --锁表进程
    declare @sql varchar(1000)
    set @sql='kill ' cast(@spid  as varchar)
    exec(@sql)
    

     

     

    (二)使用SQL命令处理锁

    (1)查看锁信息

    select 
      se.machine,
      se.sid,
      se.serial#,
      se.seconds_in_wait,
      se.paddr,
      lo.block
    from 
      v$lock lo,
      v$session se
    where
     lo.sid = se.sid
    and
     lo.block > 0;    --bloc>0代表这个会话阻塞了其他会话
    

    (2)查看哪个数据库对象被锁

    select 
      lo.sid,
      do.owner,
      do.object_name
    from 
      v$lock lo,
      dba_objects do
    where
      lo.id1 = do.object_id
    and
      lo.sid = 23;    --这里23是例子,我们需要根据上一步得到的sid来查看具体对象
    

    (3)Kill Session

    alter system kill session 'sid,serial#';    --sid,serial从第1步中得到
    

    (4)如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:

    select 
      pr.spid,  --我们要的 
      se.osuser, 
      se.program
    from 
      v$session se,
      v$process pr
    where 
      se.paddr=pr.addr 
    and 
      se.sid=24    --sid从第1步得到
    

    美高梅开户 ,(5)在OS级别Kill Process

    (5.1) 在unix上,用root身份执行命令:

    su - root 
    #kill -9 spid    --即第步查询出的spid
    

    (5.2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:

    orakill sid thread
    

    其中:
    sid:表示要杀死的进程属于的实例名 ,与上面的session id不同
    thread:是要杀掉的线程号,即第4步查询出的spid

    例:c:>orakill orcl 12345

     

    (三)模拟锁的产生及处理

    (1)对scott.emp表进行行更新,但是不提交

    本文由美高梅开户发布于数据库,转载请注明出处:Server被锁的表以及解锁

    关键词: 美高梅开户

上一篇:Server创建一个银行数据管理系统Ⅰ

下一篇:没有了