oracleskill

Home TUTORIAL กู้คืนตารางที่ถูกลบ (DROPPED TABLE) ด้วยคำสั่ง FLASHBACK

กู้คืนตารางที่ถูกลบ (DROPPED TABLE) ด้วยคำสั่ง FLASHBACK

เคยไหมครับ ที่เราลบตาราง ทั้งตั้งใจ หรือ พลั้งพลาดไป ด้วยคำสั่ง DROP TABLE .. แล้วต้องการเอาตารางนั้นคืนมา ?

ปัญหา คือว่า คำสั่ง DROP TABLE เป็น คำสั่ง DDL (Data Definition Language) จึงไม่สามารถใช้ คำสั่ง ROLLBACK ; กู้คืนกลับมาได้ ไม่เหมือนคำสั่ง DELETE TABLE ซึ่งเป็นคำสั่ง DML (Data Manipulation Language )

แล้วเราจะทำไงดีล่ะ ช่วยด้วย T T

ถ้า เป็น สมัยก่อน เราต้องเอาข้อมูลที่ backup หรือ เอา dump file ที่ export เอาไว้ ทำการ restore หรือ import กลับ ซึ่งเป็นเรื่องที่ยุ่งยาก .. ถ้าไม่มี backup เอาไว้ล่ะก็ เป็นอันจบเห่

โชค ดี ที่นับตั้งแต่ Oracle Database 10g เป็นต้นมา ออราเคิล มีฟีเจอร์ "FLASHBACK" เพื่อกู้ข้อมูล ที่ถูกลบไป กลับคืนมา แม้ว่า คำสั่งที่ลบไปนั้น จะเป็นคำวั่ง DDL ที่ไม่สามารถใช้การ ROLLBACK กู้คืนมาได้ก็ตาม

การใช้ FLASHBACK กู้คืนตารางที่ถูกลบ ด้วยคำสั่ง DROP TABLE มี synstax ดังนี้

SQL> FLASHBACK TABLE ชื่อตารางที่ถูกลบ TO BEFORE DROP ; 
ตัวอย่างต่อไปนี้ ผมจะลบตาราง EMP ด้วยคำสั่ง DROP TABLE แล้วจะใช้ FLASHBACK TABLE กู้คืนกลับมา
นี่คือ ตารางที่ user มีทั้งหมด
SELECT * FROM TAB: list all user's tables.


หลังจากนั้น ลบตารางทิ้ง ด้วยคำสั่ง DROP TABLE แล้ว ทดสอบ ด้วยการ SELECT
ตารางที่ถูกลบ และ list รายชื่อ ตารางทั้งหมดออกมา จะเห็นว่า ตาราง EMP
หายไปแล้ว
DROP TABLE to Recycle Bin 

 


 

 

สังเกตดีๆ จะเห็นว่า ไม่มีตาราง EMP แล้ว แต่จะมีตาราง BIN$ ตามด้วยภาษาต่างดาวยึกยือ โผล่มาแทน .. มันก็คือ ตาราง EMP นั่นแหละครับ มันยังไม่ถูกลบออกไปจริงๆ แต่จะถูกเก็บเข้า Recycle Bin ของ ออราเคิล เอาไว้ก่อน

เมื่อ เรากู้คืนตาราง ด้วยคำสั่ง FLASHBACK TABLE ... TO BEFORE DROP ; ตาราง EMP ที่ถูกลบไป ก็จะกู้กลับคืนมา โดยง่ายดาย ...เฮ้อ รอดตัวไป 

FLAHBACK TABLe..TO BEFORE DROP.Restore table back.