
שליפת תאריך העדכון האחרון של כל שורה ב-Oracle.
האם תמיד רציתם להיות מסוגלים לדעת מתי התעדכנה שורה ב-DB בפעם האחרונה מבלי הצורך להפעיל auditing? לדוגמא – עבור ביצוע מעקב שינויים בטבלאות כחלק מתהליך טעינת נתונים, שליפה של נתונים שהתעדכנו מאז תאריך מסויים בלבד או פשוט בשביל לזהות מתי משתמשים עדכנו בפעם אחרונה את הטבלאות ב-DB?
יכולת חשובה זו של שליפת תאריך העדכון האחרון של כל שורה ושורה ב-DB קיימת ב-Oracle באמצעות שימוש בפונקצית ora_rowscn. שליפה הכוללת את פונקצית ה-row_scn תחזיר עבורנו את ה-SCN האחרון בו עודכנה כל שורה ושורה ב-DB. באמצעות המרת ה-SCN ל- timestamp, ניתן לדעת מתי בדיוק עודכנה השורה.
פונקצית ה-ora_rowscn מתבססת על “השעון” הפנימי של אורקל, ה-SCN, שמתקדם, לדוגמא, בכל פעם שמתבצע commit ב-DB.
שימוש בפונקצית ה-ora_rowscn הוא פשוט:
SQL> select ora_rowscn,empno,ename from emp;
שליפה זו תחזיר את שם העובד וה-SCN האחרון בו עודכנה כל שורה בטבלה -
ORA_ROWSCN EMPNO ENAME ---------- ---------- ---------- 4443685 7369 SMITH 4443684 7499 ALLEN … 4443685 7876 ADAMS 4443532 7900 JAMES 4443611 7902 FORD 4443234 7934 MILLER
לאחר ששלפנו את ערך ה-SCN של השורות ניתן בקלות להמיר את הערך ל- Timestamp באמצעות שימוש בפונקצית ה – scn_to_timestamp:
SQL> select ora_rowscn, scn_to_timestamp(ora_rowscn) , empno,ename from emp;
באמצעות שילוב של שליפת ה-SCN של עדכון השורות והמרה של התאריך בחזרה לערך ה-SCN, ניתן לבצע שליפות המחזירות את כל השורות בטבלה שהתעדכנו מאז תאריך מסויים. לדוגמא כל השורות שהתעדכנו בשעה האחרונה:
select * from emp where ora_rowscn >= timestamp_to_scn(sysdate-60/1440);
חשוב לשים לב שכברירת מחדל פונקצית ה- ora_rowscn מחזירה את ה-SCN האחרון ברמת הבלוק עבר הטבלאות ולא ברמת השורה. כלומר, ה-SCN של מספר שורות יכול להיות זהה למרות שכל אחת מהן עודכנה בתאריך שונה במידה וכולן נמצאות באותו בלוק. על מנת לוודא שקיים מעקב עבור ה–SCN ברמת השורה בטבלאות בהן חשוב לנו לדעת זאת, יש להשתמש בפרמטר ה-rowdependencies כחלק מפקודת יצירת הטבלה :
לדוגמא:
Create table demo_table (field1 varchar(100), field2 number(10)) rowdependencies