锁等待的诊断及排除=====================================在ORACLE中,为了保证数据的一致性,在对数据库中的数据进行操作时,系统会进行对数据相应的锁定
当程序对所做的修改进行提交(commit)或回滚后(rollback)后,锁住的资源便会得到释放,从而允许其它用户进行操作
但是,有时,由于程序中的原因,锁住资源后长时间未对其工作进行提交;或是由于用户的原因,如调出需要修改的数据后,未及时修改并提交,而是放置于一旁;或是由于客户服务器方式中客户端出现"死机",而服务器端却并未检测到,从而造成锁定的资源未被及时释放,影响到其它用户的操作
这时,我们需要迅速地诊断出锁住资源的用户并解决其锁定
诊断系统中的锁为了找出系统中那些用户锁住资源以及那些用户在等待相应的资源,可使用以下语句(其中的/*+NO_MERGE(
)*/千万不可省略,否则会很慢):--looklock
sql--usetheNO_MERGEhintscanspeedupthequeryselect/*+NO_MERGE(a)NO_MERGE(b)NO_MERGE(c)*/'Wait'"Status",a
username,a
machine,a
serial#,a
last_call_et"Seconds",b
sql_text"SQL"fromv$sessiona,v$lockb,v$sqltextcwherea
usernameisnotnullanda
lockwait=b
kaddrandc
hash_value=a
sql_hash_valueunionselect/*+NO_MERGE(a)NO_MERGE(b)NO_MERGE(c)*/'Lock'"Status",a
username,a