天天看點

Oracle-删除表空間及資料檔案方法

删除空的表空間,但是不包含實體檔案

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';      
用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;