提供一下数据库锁的概念。
数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发 *** 作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行 *** 作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新 *** 作。
锁是为了各个用户能够准确的 *** 作数据而存在的。
一般Oracle用户被锁,有两种原因:1、管理员设置密码到期时间,时间到了就锁了;2、管理员设置密码容错次数,比如10次,密码输入错误超过10次就会被锁。账号被锁也不要惊慌,管理员可以后台手动解锁的,主要是防止你的密码被别人暴力破解。PL/SQL中记录被另一个用户锁住的原因:另一个用户正在修改或删除该记录。此时其它用户只能做查询,不能进行删改 *** 作。如果要解锁,正在删改 *** 作的用户退出删改状态即可。
因死机或挂起不能退出删改状态时,找到该用户的进程,kill该进程就可以了。实在不行的话重新启动数据库也可以。
处理方法:
1、查看数据库锁,诊断锁的来源及类型:
select object_id,session_id,locked_mode from v$locked_object
或者用以下命令:
select b.owner,b.object_name,l.session_id,l.locked_mode from v$locked_object l, dba_objects b where b.object_id=l.object_id
2、找出数据库的serial#,以备杀死:
select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by t2.logon_time
3、杀死该session:
alter system kill session 'sid,serial#'
扩展资料
SQL Server中的锁类型及用法:
从数据库系统的角度来看:分为独占锁(即排它锁), 共享锁和更新锁。MS-SQL Server使用以下资源锁模式。
锁模式描述:
共享(S)用于不更改或不更新数据的 *** 作(只读 *** 作),如SELECT语句。
更新(U)用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。
排它(X)用于数据修改 *** 作,例如.INSERT、UPDATE 或DELETE。确保不会同时同一资源进行多重更新。
意向锁用于建立锁的层次结构。意向锁的类型为:意向共享(IS)、意向排它(IX)以及与意向排它共享(SIX)。
架构锁在执行依赖于表架构的 *** 作时使用。架构锁的类型为:架构修改(Sch-M)和架构稳定性(Sch-S)。
大容量更新(BU)向表中大容量复制数据并指定了TABLOCK提示时使用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)