วันจันทร์ที่ 14 กันยายน พ.ศ. 2552

กู้ข้อมูล Oracle ด้วย Flashback

หลายคนคงจะเคยพลาดหรือพลั้งเผลอลบข้อมูลใน database ไปโดยไม่ตั้งใจ ถ้าบังเอิญ rollback ได้ทันก็ถือว่าโชคดีไป แต่โชคไม่ได้เข้าข้างเราเสมอไป บางครั้งข้อมูลสำคัญอาจจะถูก commit ไปแล้ว หรืออาจจะเผลอลบไปด้วยคำสั่ง Drop Table ซึ่งถือเป็นคำสั่งอันตรายอย่างยิ่งสำหรับมือใหม่หัดใช้เนื่องจากข้อมูลทั้ง table จะหายวับไปภายในพริบตา ทีนี้ก็ต้องมาตั้งสติกันว่าจะทำอย่างไรกันต่อไป ถ้ามี Back up ไว้ก็พอรอดตัวไปได้แต่ก็ต้องมาดูกันว่า Back up ไว้ล่าสุดเมื่อไร จะได้ข้อมูลกับคืนมาสมบูรณ์จนถึงจุดก่อนที่จะถูกลบหรือไม่ ปัญหาเหล่านี้เคยเจอกับตัวเองมาแล้วก็พอจะเข้าใจคนหัวอกเดียวกันว่าเป็นอย่างไร

พอออราเคิลออกเวอร์ชัน 10g ก็คงจะเข้าใจความทุกข์ยากของคนชอบพลั้งเผลอ จึงได้เพิ่มฟีเจอร์ "flashback" เข้ามาเป็นตัวช่วยในการกู้คืนข้อมูล โดยสามารถเรียกดูข้อมูลที่ถูกลบไปแล้วตามช่วงเวลาได้ (Flashback Query) และยังสามารถกู้ Table ที่ถูก Drop กลับคืนมาได้อีกด้วย (Flashback Drop)

  • Flashback Query เป็นฟีเจอร์ที่ใช้สำหรับเรียกดูข้อมูลเดิมก่อนหน้าที่จะถูกลบหรือแก้ไขโดยสามารถระบุเวลาย้อนหลังได้ ตัวอย่างเช่น

select * from employees as of timestamp to_timestamp('14/09/2009 13:00:00','dd/mm/rrrr' hh24:mi:ss');

เป็นการย้อนเวลากลับไปดูข้อมูลในวันที่ 14/09/2009 เวลา 13.00 เพื่อดูว่าข้อมูล ณ เวลานั้นเป็นอย่างไร ถ้าเป็นข้อมูลที่ต้องการเราก็สามารถดึงข้อมูลเหล่านี้เพื่อ insert กลับคืนมาได้ ถึงแม้ว่าเราจะย้อนเวลาไปดูข้อมูลเก่าได้แต่ก็ไม่ได้หมายความว่าเราจะย้อนเวลาไปได้นานเท่าที่เราต้องการเนื่องจาก Flashback Query จะไปดึงข้อมูลเก่าที่ยังค้างอยู่ใน Undo Segment โดยมีพารามิเตอร์ undo_retention เป็นตัวกำหนดว่าจะให้เก็บข้อมูลเก่าไว้ใน Undo Segment นานเท่าไร ดังนั้นเราจึงไม่สามารถย้อนเวลาไปดึงข้อมูลเก่าได้เกินกว่าที่กำหนดไว้ในพารามิเตอร์นี้

  • Flashback Drop เป็นฟีเจอร์ที่ใช้สำหรับกู้ table ที่ถูกลบด้วยคำสั่ง Drop ให้กลับคืนมาได้อย่างง่ายดาย ตัวอย่างเช่น

Flashback table employees to before drop;

โดยหลักการแล้วเมื่อ Table ถูกลบด้วยคำสั่ง Drop ข้อมูลเหล่านั้นจะยังไม่ถูกลบไปจริง ๆ เพียงแต่ว่ามันจะถูกย้ายไปเก็บไว้ที่ recyclebin แทน โดยเราสามารถเรียกดูข้อมูลใน recyclebin ได้ด้วยคำสั่ง show recyclebin ใน sql*plus หรือจะเรียกดูผ่านวิว user_recyclebin ก็ได้ นั่นคือเหตุผลที่ว่าทำไมเราจึงสามารถกู้ข้อมูลกลับมาได้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น