oracleskill

Home TUTORIAL ลบตารางที่ถูก Drop ออกจาก Recyclebin

ลบตารางที่ถูก Drop ออกจาก Recyclebin

บทความที่แล้ว เราเรียน วิธีกู้คืนตารางที่ถูกลบ จากคำสั่ง DROP TABLE ถ้าเราใช้ Oracle Database version 10g ขึ้นไป จะเห็นว่า เมื่อเราลบตารางด้วยคำสั่ง DROP TABLE ไป หลังจากนั้นใช้คำสั่ง

SELECT * FROM tab ; 

จะไม่มีชื่อตารางที่ถูกลบ แต่จะ มีตารางชื่อแปลกๆ ขึ้นต้นด้วย BIN$ ตามด้วย ภาษามนุษย์ต่างดาวขึ้นมาแทน ดังรูป

DROP TABLE and SELECT * FROM  tab;

 

ตาราง BIN$QVJWGo6xxxxx แท้จริงแล้ว ก็คือ ตารางที่ถูกเรา Drop ทิ้งไป นั่นเอง
ตั้งแต่ Oracle Database 10g เป็นต้นมา การ Drop Table จะยังไม่ลบทิ้ง ออกจากฐานข้อมูล ของ ออราเคิล โดยทันที แม้ว่าจะเป็นคำสั่ง DDL ( Data Definition Language ) แต่ตารางที่ถูกลบนั้นจะถูกเปลี่ยนชื่อ (rename) เป็น ชื่ออื่น (ขึ้นต้นด้วย BIN$) เก็บเอาไว้ใน Recyclebin ของ ออราเคิล เอาไว้ก่อน ( ลักษณะเดัยวกับ recyclebin ของ Windows เลยครับ) เผื่อเอาไว้ กู้คืนกลับ ด้วยคำสั่ง FLAHBACK TABLE .. TO BEFORE DROP ; ซึ่งสอนไปแล้วในบทความก่อน

เราสามารถ ตรวจสอบ ว่าใน recyclebin มีอะไรที่ถูกลบแล้ว อยู่ข้างในบ้าง ถูกลบไปเมื่อไหร่ ชื่อก่อน และ หลังถูกลบ ชื่อว่าอะไร และ สามารถกู้คืน หรือ ลบทิ้งได้หรือไม่ โดยใช้ Query ดังนี้

 SELECT object_name,original_name,type, 
can_undrop as "UNDO",can_purge as "PURGE",droptime FROM recyclebin ;
Select objects in recyclebin.

การ ที่ มีตารางอยู่ใน recyclebin แสดงว่า มันแค่ถูก rename เท่านั้น ไม่ได้ลบออกไปจริงๆ ดังนั้น ตารางที่ถูกเปลี่ยนชื่อไป ก็ยังคงอยู่ใน tablespaces อยู่ ซึ่งก็ยังกินพื้นที่ใน tablespace และ เปลือง user โควต้าใน tablespace
เราสามารถ เคลียร์ ตารางที่อยู่ใน recyclebin ทิ้ง อย่างถาวร ด้วยคำสั่ง

PURGE TABLE "BIN$xxxxx" ;
remove dropped table from recyclebin 

  หลัง จากเรา Purge ตารางออกจาก recyclebin แล้ว เมื่อเรา ดูข้อมูลจาก SELECT * FROM tab; หรือ SELECT * FROM recyclebin ; จะเห็นว่า ตารางที่อยู่ใน recyclebin หายไปแล้ว

Dropped Table was removed from recyclebin

 

ถ้าเรามี ตารางที่ถูก drop อยู่ใน recyclebin จำนวนมาก แล้วต้องการ purge ทิ้งอย่างถาวรให้หมดทีเดียวเลย (ตายหมู่) สามารถทำได้โดยใช้คำสั่ง

PURGE RECYCLEBIN ; 
Remove all database objects from recyclebin .