我需要從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
文件。
您的第一條命令是從dba_data_files中選擇tablespace_name,其中file_name ='file_including_path'沒有產生任何結果,因爲表空間已被我的OP中顯示的兩個命令刪除。鑑於我必須刪除用戶以及與用戶相關的所有對象,您能否介紹如何將OP方法與您的方法結合起來? – HereAndThere
該OP請求類似於「DROP USER用戶名級聯,包括內容和數據文件;」 – HereAndThere
儘管在「包含」子句中有synax,Oracle仍不會刪除數據文件。如果你刪除了表空間,你可以用你的操作系統手動刪除它,或者你可以簡單地使用: CREATE SMALLFILE TABLESPACE dev_01 DATAFILE'C:\ Oradata \ db1 \ devdata \ dev_01.dbf'SIZE 500M REUSE;' This將會重用現有文件(如果存在)。 –