Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)
這時候以管理員身份進入sqlplus命令窗口.
在刪除用戶的時候有時候會出現以下問題:
ORA-01940無法刪除當前已連接用戶
這時候的解決方案是: 1)查看用戶的連接狀況 select username,sid,serial# from v$session (2)找到要刪除用戶的sid,和serial,并刪除 例如:你要刪除用戶'WUZHQ',可以這樣做: alter system kill session'532,4562'; 這里的532表示的是sid,4562表示的是seria. 只有經過步驟(2)之后才可以刪除用戶(3)刪除用戶 drop user username cascade (**)如果在drop 后還提示ORA-01940:無法刪除當前已鏈接的用戶,說明還有連接的session,可以通過查看session的狀態來確定該session是否被kill 了,用如下語句查看: select saddr,sid,serial#,paddr,username,status from v$session where username is not null 結果如下(以我的庫為例): saddr???????????????????? sid?????????? serial#??????????? paddr????????????? username????????????? status 564A1E28????????????? 513?????????? 22974??????????? 569638F4??????? NETBNEW???????????? ACTIVE 564A30DC????????????? 514????????? 18183??????????? 569688CC??????? NETBNEW??????????? INACTIVE 564A5644????????????? 516?????????? 21573??????????? 56963340??????? NETBNEW??????????? INACTIVE 564B6ED0????????????? 531?????????? 9?????????????????? 56962D8C??????? NETBNEW?????????? INACTIVE 564B8184????????????? 532????????? 4562?????????????? 56A1075C www.2cto.comWUZHQ??????????????? KILLED status 為要刪除用戶的session狀態,如果還為inactive,說明沒有被kill掉,如果狀態為killed,說明已kill。 由此可見,WUZHQ這個用戶的session已經被殺死。此時可以安全刪除用戶。 刪除表空間的步驟如下: drop tablespace TS_MISPS including contents and datafiles cascade constraints; 這里的TS_MISPS是一個表空間的名字。 此外: //including contents:表示刪除表空間的內容,如果刪除表空間之前表空間中有內容,而未加此參數,表空間刪除不掉,所以習慣性的加此參數。 //including datafiles:表示刪除表空間中的數據文件 //cascade constraints:同時刪除tablespace中表中的外鍵參照 詳細介紹請看:http://blog.csdn.net/tototuzuoquan/article/details/9878851 下面為您介紹的是Oracle用戶會話信息的查詢方法,該方法供您參考,如果您感興趣的話,不妨一看。
通過V$SESSION視圖,可以查詢Oracle所有Oracle用戶會話信息
select sid,logon_time,username,machine from v$session;
通過分組,統計每個不同的用戶或主機打開的Oracle用戶會話總數
select username,machine,count(*) from v$session group by username,machine;
根據SID和SERIAL#可以終止用戶會話
ALTER SYSTEM KILL SESSION 'v_sid,v_serial#' immediate; (要真正的把v_sid和v_serial替換成數字)
Oracle用戶會話的SID和SERIAL#可以通過V$SESSION視圖查到:
在Oracle中終止掉的會話只有在這個進程再次嘗試連接Oracle時才會被pmon清除,在進程再次嘗試連接之前,查詢V$SESSION視圖時還是可以看到該會話。
當用戶會話無法響應時,上面的方法可能無法終止用戶會話,只好直接殺死系統進程(謹慎)。
用戶會話對應的系統進程可以通過V$SESSION和V$PROCESS兩個視圖來查詢,通過會話的SID和SERIAL#可以查詢到系統進程號。
然后在操作系統中殺死進程:
kill -9 16782
某些軟件會在啟動時打開多個會話,當軟件異常退出時源碼天空,要批量的終止這些會話。存儲過程基于用戶名條件批量終止會話,創建存儲過程腳本kill_user.sql如下:
調用上面存儲過程,終止用戶所有進程的方法如下:
總結
以上是生活随笔為你收集整理的Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)的全部內容,希望文章能夠幫你解決所遇到的問題。