שלום לכולם
אכן הרבה זמן לא כתבתי, אשתדל לחזור לעצבי בקרוב.
והיום בקצרה על ניהול טבלאות temporal.
בקצרה ב SQL Server - החלו להשתמש ברעיון של שמירה אוטמטית של שינויים בנתונים בטבלה.
ואפשר לתשאל גם את הטבלה ההיסטורית וגם את הנוכחית בשליפה אחת:
אכן הרבה זמן לא כתבתי, אשתדל לחזור לעצבי בקרוב.
והיום בקצרה על ניהול טבלאות temporal.
בקצרה ב SQL Server - החלו להשתמש ברעיון של שמירה אוטמטית של שינויים בנתונים בטבלה.
ואפשר לתשאל גם את הטבלה ההיסטורית וגם את הנוכחית בשליפה אחת:
/*State of entire table AS OF specific date in the past*/
SELECT [DeptID], [DeptName], [SysStartTime],[SysEndTime]
FROM [dbo].[Department]
FOR SYSTEM_TIME AS OF '2015-09-01 T10:00:00.7230011' ;
אחת הבעיות זה ניהול הטבלה ההיסטורית אי אפשר למחוק ממנה בצורה רגילה - ואצלי ב SQL Azure הדבר נהיה משמעותי עקב מגבלת הגודל.
לכן עלינו על נושא ה RETENTION שזה פיצ'ר מדהים שניתן בכל SQL Server ולהפתעתי גם ב SQL Azure.
יש אפשרות להגדיר כמה זמן יישמר המידע בטבלת היסטוריה.
כאשר יש סרביס מאחורה שרץ ומוחק מה שצריך ללא עומס מיוחד בבסיס הנתונים - לא הצלחתי להבין היכן זה רץ ומה חלונות הזמן שלהם.
הגדרה זו היא בשתי רמות, ברמת בסיס הנתונים שב Azure אתה מריץ את זה ב master.
--on master DB
ALTER DATABASE MyDB SET temporal_history_retention ON
ואז ברמת הטבלה כולל הגדרה מה הזמן שאתה רוצה שיישמר
--on db
ALTER TABLE [MyDB ].[MyTable]
SET (SYSTEM_VERSIONING = ON (HISTORY_RETENTION_PERIOD = 1 WEEK));
או שזה מוגדר לשמור לתמיד ככה:
--on db
ALTER TABLE [MyDB ].[MyTable]
SET (SYSTEM_VERSIONING = ON (HISTORY_RETENTION_PERIOD = INFINITE));
ואז זה עובד כמו שאומרים - פצצות.
כדי לראות מה מוגדר לך לכל טבלה זו השאילתא:
כדי לראות מה מוגדר לך לכל טבלה זו השאילתא:
SELECT DB.is_temporal_history_retention_enabled,
SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
T1.name as TemporalTableName, SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema,
T2.name as HistoryTableName,T1.history_retention_period,
T1.history_retention_period_unit_desc
FROM sys.tables T1
OUTER APPLY (select is_temporal_history_retention_enabled from sys.databases
where name = DB_NAME()) AS DB
LEFT JOIN sys.tables T2
ON T1.history_table_id = T2.object_id WHERE T1.temporal_type = 2
האם יש לוג שאפשר לראות את ההתקדמות של SQL במחיקה?
ReplyDelete