SQL SERVER 通过锁管理器自动发现和解决死锁。在 SQL SERVER 中 Lock Monitor 管理线程(spid=4)每 5 秒钟检查一次系统中是否存在死锁,同时也会使用死锁发现计数器(Deadlock Detection Counter)控制检查死锁的频率。
死锁发现计数器初始值为 3,当发现死锁时被重新设置为 3,当没有发现死锁时此值减 1。如果死锁发现计数器大于 0,则在每次有进程获取锁被阻止时,锁管理器都要求 Lock Monitor 线程检查死锁;而如果计数器等于 0,则在每次有进程获取锁被阻止时,锁管理器不会要求 Lock Monitor 线程检查死锁,只是每 5 秒钟检查一次。
Lock Monitor 线程通过检查锁的等待列表发现保持锁的进程和等待锁的进程间的关系,从而发现死锁。
一般安装oracle默认的是sys,system,scott3个用户。scott用户需要解锁才能使用。
如果没解锁以后你用sys,system用户以sysdba的身份登陆进去输入以下指令也可以解锁:
SQL> alter user scott account unlock;
用户已更改。
这样就完成解锁的 *** 作。接下来,你还可以重新给scott这个用户设定密码
修改scott的登录密码
SQL> alter user scott identified by 12345;
用户已更改。
ok了,你再拿scott 和 12345来登录就可以了!
SQL> conn scott/12345
看不到问题详细描述。是用户被锁,还是表被锁?
登录失败(密码输入错误)次数过多是,就会出现用户被锁的情况,这时应该使用 sysdba 账户登陆,在左侧的导航栏目录,找到用户节点,点开 对应用户,通过右键(打开功能菜单),选择解锁该用户即可。如此 *** 作后,即可继续使用原用户 和它正确的密码登录了。
表被锁,执行语句的时候,会提示锁超时之类的。通过 V$LOCK 定位到阻塞(就是阻塞之后,报错之前 —— 才可以查到)。需要预先打开两个窗口,在一个窗口中,写好 select from v$lock where blocked=1; 这个语句,等待执行。在另一个窗口中,执行报错的语句,执行之后(还没有报错),立即去窗口1中执行那个语句。就一定能够查询到记录(被阻塞的事务相关的信息),然后通过这个信息(有 trx_id)就可以去 v$trx 以及 v$session 中,获取到 我们要执行的这个sql 是被谁阻塞的了。可以通过 sp_close_session 杀掉阻塞源头的会话,也可以找到执行阻塞源头事务的人(没有提交)让他们提交,就不会造成阻塞了。或者干等着,看阻塞源头的事务什么时候提交。
以上就是关于sqlserver 数据库死锁后多长时间解锁全部的内容,包括:sqlserver 数据库死锁后多长时间解锁、安装orcal数据库,那几个用户要解锁啊!如果没有解锁以后怎么搞啊、达梦数据库解锁方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)