天天看點

Oracle使用者和表被鎖定解決方法

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 2009-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-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49434)) * establish * lhoms * 0
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49435)) * establish * lhoms * 0           

複制

這樣可知是上面10.69.1.11的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;           

複制

Oracle資料庫操作中,我們有時會用到鎖表查詢以及解鎖和kill程序等操作,那麼這些操作是怎麼實作的呢?本文我們主要就介紹一下這部分内容。

(1)鎖表查詢的代碼有以下的形式:

select count(*) from v$locked_object;
select * from v$locked_object;           

複制

(2)檢視哪個表被鎖

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;           

複制

(3)檢視是哪個session引起的

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;            

複制

(4)殺掉對應程序

執行指令:

alter system kill session'1025,41';

其中1025為sid,41為serial#.

查詢那個程式導緻的

SELECT v.program,v.* FROM v$session v where serial# = '9' and sid =  586           

複制

本文由 小馬哥 創作,采用 知識共享署名4.0 國際許可協定進行許可

本站文章除注明轉載/出處外,均為本站原創或翻譯,轉載前請務必署名