Từ phiên bản 10g, Oracle cũng có tính năng recyclebin tương tự như recyclebin trên Windows, tức là để chứa … rác. Khi ta xóa object, những object đó mặc định sẽ vẫn còn nguyên ở chỗ cũ và chỉ bị rename, được theo dõi trong recyclebin. Nếu tablespace còn chỗ trống thì object bị xóa vẫn còn đó, khi nào hết chỗ dùng cho object mới thì các object đó mới bị xóa đi. 

 

 

Do đó, nhiều khi ta xóa object xong nhưng thấy dung lượng vẫn không giảm. Muốn kiểm tra chính xác hơn, ta nên query trong DBA_FREE_SPACE.

 

Khi bị xóa, object sẽ được rename thành tên có dạng: BIN$unique_id$version

 

 

Khi xóa 1 table, các object liên quan như index cũng bị xóa theo. Và ở cột CAN_UNDROP, trạng thái của các index là NO, do phụ thuộc vào table. Khi ta undrop table, các object liên quan sẽ được tự động phục hồi theo. 

 

Nếu 1 table còn ở trong recyclebin, ta vẫn có thể query nó bình thường:

 

 

 Để phục hồi table từ recyclebin, ta sử dụng tính năng FLASHBACK TO BEFORE DROP

 

 

Trong trường hợp ta xóa 1 table, tạo 1 table khác giống tên, rồi lại xóa tiếp, khi flashback Oracle sẽ lấy version table mới nhất để phục hồi lại. Nếu muốn khôi phục table cũ hơn, ta cần kiểm tra và chỉ định rõ table cần khôi phục lại bằng tên table trong recyclebin (Lưu ý dùng dấu “” bao quanh tên table):

 

 

Trường hợp muốn đổi tên table khi phục hồi lại, ta có thể dùng thêm rename:

 

 

Đáng tiếc là index khi được phục hồi lại thì không được rename:

 

 

Nên trước khi flashback table, ta nên lưu lại tên index để đặt lại y chang, hoặc sau khi flashback, ta đặt lại tên mới cho các index cho dễ hiểu.

 

Muốn xóa hết recyclebin, ta đơn giản chỉ cần purge:

 

 

Trường hợp muốn xóa 1 table xác định, ta chỉ định tên table cần xóa. Tuy nhiên trái với flashback, nếu có nhiều version của 1 table trong recyclebin thì khi xóa Oracle sẽ xóa table cũ nhất.

 

 

Ta cũng có thể xóa các object của mình trong recyclebin thuộc về 1 tablespace xác định:

 

 

Trường hợp có quyền mạnh, ta có thể xóa các object trong recyclebin của 1 user theo 1 tablespace xác định:

 

 

Hoặc xóa sạch thùng rác:

 

 

Ngoài ra, ta có thể dùng các lệnh sau để xóa thẳng object, không lưu lại trong recyclebin:

 

 

[ideabox]Có 1 trường hợp đặc biệt. Nếu object được lưu trên tablespace SYSTEM, khi ta drop, object sẽ bị xóa thẳng mà không lưu lại trong recyclebin.[/ideabox]

 

Flashback table

 

Ngoài việc flashback table từ recyclebin, ta có thể flashback table về 1 thời điểm xác định

 

 

Lưu ý là việc Flashback table đòi hỏi enable row movement, thay đổi rowid, nên nếu ứng dụng có sử dụng rowid thì không nên enable row movement.

Ta cũng không thể flashback các table hệ thống, flashback các thao tác DDL, và khi flashback table các object liên quan cũng bị flashback theo, trừ statistics.

Nếu 1 table có table khác liên quan phụ thuộc, ta có thể flashback nhiều table cùng lúc