2016-02-27 172 views
4

我需要從Oracle 11g R2數據庫中清除所有特定用戶的殘餘。這意味着除了刪除用戶之外,還會刪除與該用戶關聯的所有對象以及磁盤上的所有物理殘留物,例如.dbf文件。爲什麼Oracle DROP USER CASCADE不能從磁盤中刪除用戶的所有重新分區?

我讀了幾篇文章提示了這種語法,並在以下一系列的兩行對每個用戶支付:

DROP USER <username> CASCADE; 
DROP TABLESPACE <username> INCLUDING CONTENTS AND DATAFILES; 

我然後鍵入SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;並證實與特定用戶名的用戶沒有被列入結果。

但我也有一個包含.DBF文件打開的文件夾,我注意到,儘管Oracle SQL Developer中的界面告訴我,這兩種以上兩個命令的成功.DBF文件不會被刪除。

爲了從Oracle 11g R2數據庫中刪除用戶及其關聯模式等的剩餘部分,需要採取哪些特定語法或其他操作?


正在進行的研究:


閱讀@ EliasGarcia的做法後,我嘗試了第一個命令select tablespace_name from dba_data_files where file_name = 'file_including_path'因爲這是在OP上面的命令中使用相同的用戶名。但是這個查詢沒有產生任何結果,因爲表空間被我上面顯示的兩個命令刪除了。

鑑於我必須刪除用戶和所有與用戶相關的對象,是否有人可以展示如何將OP方法與@EliasGarcia的方法結合?例如,的OP是要求像DROP USER username CASCADE INCLUDING CONTENTS AND DATAFILES;

我猶豫運行上面的命令後,直接刪除.dbf文件。

回答

5

數據文件分配給表空間,而不是用戶。刪除用戶將從表空間中刪除表等,但底層存儲不受影響。

不要直接從文件系統中刪除dbf文件,你會讓數據庫變得混亂。要刪除它們,發現其表空間中的文件屬於使用下面的語句:

select tablespace_name 
from dba_data_files 
where file_name = <file name with full path>; 

然後,您可以刪除該文件(S)通過刪除表空間:

drop tablespace <tablespace_name> including contents and datafiles; 

這樣做,你應該確認之前但是沒有任何對象仍然分配給其他用戶的表空間。您可以通過運行找到這個:

select * from dba_segments 
where tablespace_name = <tablespace to drop>; 

如果返回任何內容,對象,如果你想丟棄表之前,讓他們移動到另一個表空間。

+0

您的第一條命令是從dba_data_files中選擇tablespace_name,其中file_name ='file_including_path'沒有產生任何結果,因爲表空間已被我的OP中顯示的兩個命令刪除。鑑於我必須刪除用戶以及與用戶相關的所有對象,您能否介紹如何將OP方法與您的方法結合起來? – HereAndThere

+0

該OP請求類似於「DROP USER用戶名級聯,包括內容和數據文件;」 – HereAndThere

+0

儘管在「包含」子句中有synax,Oracle仍不會刪除數據文件。如果你刪除了表空間,你可以用你的操作系統手動刪除它,或者你可以簡單地使用: CREATE SMALLFILE TABLESPACE dev_01 DATAFILE'C:\ Oradata \ db1 \ devdata \ dev_01.dbf'SIZE 500M REUSE;' This將會重用現有文件(如果存在)。 –

相關問題