-刪除空的表空間,但是不包含物理文件
drop tablespace tablespace_name;
--刪除非空表空間,但是不包含物理文件
drop tablespace tablespace_name including contents;
--刪除空表空間,包含物理文件
drop tablespace tablespace_name including datafiles;
--刪除非空表空間,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--如果其他表空間中的表有外鍵等約束關聯到了本表空間中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
以system用戶登錄,查找需要刪除的用戶:
--查找用戶
select * from dba_users;
--查找工作空間的路徑
select * from dba_data_files;
--刪除用戶
drop user 用戶名稱 cascade;
--刪除表空間
drop tablespace 表空間名稱 including contents and datafiles cascade constraint;
例如:刪除用戶名成為ABC,表空間名稱為ABC
--刪除用戶,及級聯關系也刪除掉
drop user ABC cascade;
--刪除表空間,及對應的表空間文件也刪除掉
drop tablespace ABC including contents and datafiles cascade constraint;
刪除無任何數據對象的表空間:
首先使用PL/SQL界面化工具,或者使用oracle自帶的SQL PLUS工具,連接需要刪除的表空間的oracle數據局庫。
確認當前用戶是否有刪除表空間的權限,如果沒有 drop tablespace,請先用更高級的用戶(如sys)給予授權或者直接用更高級的用戶。
用drop tablespace xxx ,刪除需要刪除的表空間。
刪除有任何數據對象的表空間
使用drop tablespace xxx including contents and datafiles;來刪除表空間。
注意事項:
如果drop tablespace語句中含有datafiles,那datafiles之前必須有contents關鍵字,不然會提示ora-01911錯誤
1、以system用戶登錄查找需要刪除的用戶(普通用戶沒有刪除權限)
select * from dba_users;
2、查詢需要刪除用戶對應的表空間
select * from dba_data_files;
3、刪除用戶和表空間
drop user usernamecascade;
drop tablespace tablespacename including contents and datafiles cascade constraint;
在刪除用戶時可能會碰到無法刪除當前連接的用戶,這是由於還有數據庫連接到該用戶,有會話存在,需要先刪除會話。
最暴力的做法是直接shutdown數據庫,然后重啟即可。。。
一般的操作是通過查詢SessionID,手動殺掉會話再刪除用戶:
1)查詢連接情況:select username,sid,serial# from v$session;
2)找到要刪除用戶的sid和serial並刪除:alter system kill session 'sid,serial';
再執行刪除用戶的操作,如果還是無法刪除說明還有連接的會話,繼續執行刪除會話的操作。
---------------------
Oracle數據庫中刪除了表空間物理文件XXX.ora后導致用drop tablespace刪除表空間失敗,解決方法如下:
用sqlplus /nolog命令進入oracle數據庫執行如下命令:
sql>conn /as sysdba;
sql>startup;(如果數據庫已啟動則不需要此命令)
sql>alter database datafile ''/home/oracle/XXX.ora'' offline drop;(/home/oracle/XXX.ora為表空間文件的物理路徑)
sql>drop tablespace XXX;
執行完后,重啟數據庫即可。