Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)
這時(shí)候以管理員身份進(jìn)入sqlplus命令窗口.
在刪除用戶的時(shí)候有時(shí)候會(huì)出現(xiàn)以下問(wèn)題:
ORA-01940無(wú)法刪除當(dāng)前已連接用戶
這時(shí)候的解決方案是: 1)查看用戶的連接狀況 select username,sid,serial# from v$session (2)找到要?jiǎng)h除用戶的sid,和serial,并刪除 例如:你要?jiǎng)h除用戶'WUZHQ',可以這樣做: alter system kill session'532,4562'; 這里的532表示的是sid,4562表示的是seria. 只有經(jīng)過(guò)步驟(2)之后才可以刪除用戶(3)刪除用戶 drop user username cascade (**)如果在drop 后還提示ORA-01940:無(wú)法刪除當(dāng)前已鏈接的用戶,說(shuō)明還有連接的session,可以通過(guò)查看session的狀態(tài)來(lái)確定該session是否被kill 了,用如下語(yǔ)句查看: select saddr,sid,serial#,paddr,username,status from v$session where username is not null 結(jié)果如下(以我的庫(kù)為例): 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 為要?jiǎng)h除用戶的session狀態(tài),如果還為inactive,說(shuō)明沒(méi)有被kill掉,如果狀態(tài)為killed,說(shuō)明已kill。 由此可見(jiàn),WUZHQ這個(gè)用戶的session已經(jīng)被殺死。此時(shí)可以安全刪除用戶。 刪除表空間的步驟如下: drop tablespace TS_MISPS including contents and datafiles cascade constraints; 這里的TS_MISPS是一個(gè)表空間的名字。 此外: //including contents:表示刪除表空間的內(nèi)容,如果刪除表空間之前表空間中有內(nèi)容,而未加此參數(shù),表空間刪除不掉,所以習(xí)慣性的加此參數(shù)。 //including datafiles:表示刪除表空間中的數(shù)據(jù)文件 //cascade constraints:同時(shí)刪除tablespace中表中的外鍵參照 詳細(xì)介紹請(qǐng)看:http://blog.csdn.net/tototuzuoquan/article/details/9878851 下面為您介紹的是Oracle用戶會(huì)話信息的查詢方法,該方法供您參考,如果您感興趣的話,不妨一看。
通過(guò)V$SESSION視圖,可以查詢Oracle所有Oracle用戶會(huì)話信息
select sid,logon_time,username,machine from v$session;
通過(guò)分組,統(tǒng)計(jì)每個(gè)不同的用戶或主機(jī)打開(kāi)的Oracle用戶會(huì)話總數(shù)
select username,machine,count(*) from v$session group by username,machine;
根據(jù)SID和SERIAL#可以終止用戶會(huì)話
ALTER SYSTEM KILL SESSION 'v_sid,v_serial#' immediate; (要真正的把v_sid和v_serial替換成數(shù)字)
Oracle用戶會(huì)話的SID和SERIAL#可以通過(guò)V$SESSION視圖查到:
在Oracle中終止掉的會(huì)話只有在這個(gè)進(jìn)程再次嘗試連接Oracle時(shí)才會(huì)被pmon清除,在進(jìn)程再次嘗試連接之前,查詢V$SESSION視圖時(shí)還是可以看到該會(huì)話。
當(dāng)用戶會(huì)話無(wú)法響應(yīng)時(shí),上面的方法可能無(wú)法終止用戶會(huì)話,只好直接殺死系統(tǒng)進(jìn)程(謹(jǐn)慎)。
用戶會(huì)話對(duì)應(yīng)的系統(tǒng)進(jìn)程可以通過(guò)V$SESSION和V$PROCESS兩個(gè)視圖來(lái)查詢,通過(guò)會(huì)話的SID和SERIAL#可以查詢到系統(tǒng)進(jìn)程號(hào)。
然后在操作系統(tǒng)中殺死進(jìn)程:
kill -9 16782
某些軟件會(huì)在啟動(dòng)時(shí)打開(kāi)多個(gè)會(huì)話,當(dāng)軟件異常退出時(shí)源碼天空,要批量的終止這些會(huì)話。存儲(chǔ)過(guò)程基于用戶名條件批量終止會(huì)話,創(chuàng)建存儲(chǔ)過(guò)程腳本kill_user.sql如下:
調(diào)用上面存儲(chǔ)過(guò)程,終止用戶所有進(jìn)程的方法如下:
總結(jié)
以上是生活随笔為你收集整理的Oracle中删除用户和表空间的常见问题(比如:ORA-01940无法删除当前已连接用户的解决方案)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 岳阳林纸是央企吗
- 下一篇: 数据表从一个表空间中移动到另一个表空间中