למה לראות תמונה כשאפשר לראות את כל הסרט ? כפי שראינו בפוסט הקודם Flashback Query מאפשרת לנו לחזור ולצפות בנתונים כפי שהיו בנקודה מסויימת בעבר. לעיתים על טבלה מסויימת עוברים שינויים רבים, ולנו קשה להצביע על הנקודה הספציפית אליה נרצה לחזור.
בגרסת 10g אורקל השיקה יכולת Flashback חדשה הנקראת Flashback Version, באמצעותה ניתן לראות את תהליך ההשתנות השלם ולא רק נקודה מסויימת בעבר.
נייצר טבלת מוצרים :
CREATE TABLE supermarket (product_id number(4) constraint market_proid_pk primary key, product_name varchar2(20), product_price number(6,2)); Table created.
נכניס אליה מוצר אחד ונשנה את ערכו באופן תדיר :
INSERT INTO supermarket VALUES (1, 'Cottage' , 2) ; 1 row created. COMMIT ; Commit complete. UPDATE supermarket SET product_price = 3 WHERE product_name = 'Cottage' ; 1 row updated. COMMIT ; Commit complete. UPDATE supermarket SET product_price = 4 WHERE product_name = 'Cottage' ; 1 row updated. COMMIT ; Commit complete. UPDATE supermarket SET product_price = 5 WHERE product_name = 'Cottage' ; 1 row updated. COMMIT ; Commit complete. UPDATE supermarket SET product_price = 6 WHERE product_name = 'Cottage' ; 1 row updated. COMMIT ; Commit complete.
כעת נביא לידי ביטוי את יכולת ה Flashback Versions באמצעות השאילתה הבאה :
SELECT * FROM supermarket VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE ; PRODUCT_ID PRODUCT_NAME PRODUCT_PRICE ---------- -------------------- ------------- 1 Cottage 6 1 Cottage 5 1 Cottage 4 1 Cottage 3 1 Cottage 2
נוכל גם לקבל מידע יותר אינפורמטיבי באמצעות העמודות הווירטואליות הבאות :
SELECT versions_starttime, versions_endtime, versions_xid, versions_operation, product_price FROM supermarket versions between timestamp minvalue and maxvalue ORDER BY VERSIONS_STARTTIME; VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID V PRODUCT_PRICE ------------------------- ------------------------- ---------------- - ------------- 15-DEC-12 11.10.36 AM 15-DEC-12 11.11.16 AM 0200080088070000 I 2 15-DEC-12 11.11.16 AM 15-DEC-12 11.11.37 AM 070007006A070000 U 3 15-DEC-12 11.11.37 AM 15-DEC-12 11.11.52 AM 0400140094070000 U 4 15-DEC-12 11.11.52 AM 15-DEC-12 11.12.04 AM 01001D0061070000 U 5 15-DEC-12 11.12.04 AM 06001E006B080000 U 6 SELECT versions_startscn, versions_endscn, versions_xid, versions_operation, product_price FROM supermarket versions between timestamp minvalue and maxvalue ORDER BY VERSIONS_STARTTIME ; VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID V PRODUCT_PRICE ----------------- --------------- ---------------- - ------------- 2555405 2555485 0200080088070000 I 2 2555485 2555494 070007006A070000 U 3 2555494 2555507 0400140094070000 U 4 2555507 2555513 01001D0061070000 U 5 2555513 06001E006B080000 U 6
כעת נוכל להשתמש ב Flashback Query כדי לצפות בנתונים כפי שהיו בנקודה מסויימת
SELECT FROM supermarket AS OF TIMESTAMP TO_DATE('15-DEC-12 11.11.43' , 'DD-MON-YY HH24.MI.SS'); PRODUCT_ID PRODUCT_NAME PRODUCT_PRICE ---------- -------------------- ------------- 1 Cottage 4 SELECT * FROM supermarket AS OF SCN 2555494 ; PRODUCT_ID PRODUCT_NAME PRODUCT_PRICE ---------- -------------------- ------------- 1 Cottage 4