fbpx

למה לראות תמונה כשאפשר לראות את כל הסרט ? Smile כפי שראינו בפוסט הקודם  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