
Last Updated (Thursday, 08 January 2009 17:12) Thursday, 08 January 2009 17:10
ฟีเจอร์ของ ออราเคิล หลายตัว อย่างเช่น RMAN หรือ FLASHBACK จะสามารถย้อนเวลาไปดูข้อมูลเก่า หรือ ถอยหลังฐานข้อมูล ย้อนไปเป็นข้อมูลเก่า โดยระบุว่า ให้ย้อนไปหมายเลข SCN (System Change Number) หมายเลขอะไร
แต่โดยธรรมชาติ แล้ว มนุษย์เราจะคิดในมิติของเวลา เช่น อยากจะย้อนฐานข้อมูล ไปอยู่ในช่วงเวลา 6 มกราคม 2009 เวลา บ่ายโมง ดังนั้น เราต้องหาวิธีแปลง หน่วย เวลา ไปเป็น หมายเลข SCN
ตั้งแต่ Oracle 10g ได้ให้ฟังก์ชั่น มาช่วย คือ TIMESTAMP_TO_SCN()
ตัวอย่างเช่น อยากรู้ว่า 6 มกราคม 2009 เวลา บ่ายโมง จะเป็น SCN หมายเลขอะไร
SQL> col SCN format 999999999999
SQL> select TIMESTAMP_TO_SCN(
2. to_timestamp('06-JAN-2009 13:00:00',
'DD-MON-YYYY HH24:MI:SS')
3. ) AS SCN
4. from dual ;

ตัวอย่าง ข้างบน ผมใช้ ฟังก์ชั่น to_timestamp() ช่วยจัดการ convert วัน เวลา ในรูปแบบที่ผมถนัดซะก่อน ค่อยเอาไปเข้าฟังก์ชั่นหลัก เพราะ การเขียน timestamp ในรูปแบบของออราเคิล ต้องเขียนยาวเหมือนกันครับ ... ผมขี้เกียจ
ในทางกลับกัน ถ้าเรารู้หมายเลข SCN เราก็จะสามารถแปลงกลับเป็น timestamp ได้เช่นกัน ด้วยฟังก์ชั่น SCN_TO_TIMESTAMP()
SQL> select SCN_TO_TIMESTAMP(22754201478)
2. from dual ;



