oracle表被锁处理方法&Oracle 用户被锁定解决方法

oracle表被锁处理方法
 
最近遇到这样一个问题,操作一个表,发现被人锁定了,于是查询谁锁定的表,
发现多人锁定,安全起见,不能全部kill,于是用一下语句判定,谁锁定,谁等待。 
  www.2cto.com  
SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name, 
o.owner,o.object_name,o.object_type,s.sid,s.serial# 
FROM v$locked_object l,dba_objects o,v$session s 
WHERE l.object_id=o.object_id 
AND l.session_id=s.sid 
ORDER BY o.object_id,xidusn DESC 
  www.2cto.com  
// 查询到的结果如下 
 
如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待 
以上的语句可以查询到谁锁了表,而谁在等待。 
 
以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。 
如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN 
 
找出谁锁定的记录,kill掉就行了。 
alter system kill session '133,3506' ; 
 
-------------------------------------------------
 

1、用dba角色的用户登陆,进行解锁,先设置具体时间格式,以便查看具体时间 
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';  
Session altered. 

2、查看具体的被锁时间 
SQL> select username,lock_date from dba_users where username='TEST';  
USERNAME LOCK_DATE  TEST 2011-03-10 08:51:03

3、解锁 
SQL> alter user test account unlock;  
User altered. 

4、查看是那个ip造成的test用户被锁 
查看$Oracle_HOME/network/admin/log/listener.log日志 
10-MAR-2011 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=218.77.123.123)(PORT=49434)) * establish * lhoms * 0 
10-MAR-2011 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=218.77.123.123)(PORT=49435)) * establish * lhoms * 0

这样可知是上面218.77.123.123的ip尝试多次失败登陆造成的被锁

注: 
一般数据库默认是10次尝试失败后锁住用户 
1、查看FAILED_LOGIN_ATTEMPTS的值 
select * from dba_profiles where RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS'; 
2、修改为30次 
alter profile default limit FAILED_LOGIN_ATTEMPTS 30; 
3、修改为无限次(为安全起见,不建议使用) 
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;  

posted @ 2014-11-06 16:37  zengwf  阅读(450)  评论(0)    收藏  举报