oracleskill

Home TUTORIAL แปลงค่าไปมาระหว่าง TIMESTAMP กับ เลข SCN

แปลงค่าไปมาระหว่าง TIMESTAMP กับ เลข SCN

(Convert between TIMESTAMP and SCN)

ฟีเจอร์ของ ออราเคิล หลายตัว อย่างเช่น 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 ;