System-Versioned Temporal Tables در SQL Server
این قابلیت در SQL Server (از نسخه 2016 به بعد) برای ردیابی خودکار تغییرات دادهها استفاده میشود. به زبان ساده، SQL Server یک «دفترچه تاریخچه» برای جدول شما نگه میدارد تا بتوانید هر لحظه به نسخههای قبلی دادهها برگردید.
CREATE TABLE dbo.Temporal_Table_Demo ( [DempID] int NOT NULL PRIMARY KEY CLUSTERED, [DepName] nvarchar(100) NOT NULL, [DepLocation] varchar(100) NOT NULL, [NumOfEmp] int NOT NULL, [TimeStart] datetime2 (2) GENERATED ALWAYS AS ROW START, [TimeEnd] datetime2 (2) GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME (TimeStart, TimeEnd) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Temporal_Table_Demo_History));
-- نسخه دادهها در یک لحظه خاص SELECT * FROM dbo.Temporal_Table_Demo FOR SYSTEM_TIME AS OF '2025-08-01 12:00:00'; -- تغییرات بین دو تاریخ SELECT * FROM dbo.Temporal_Table_Demo FOR SYSTEM_TIME FROM '2025-08-01' TO '2025-08-05';
جایگزین در Oracle
Oracle دقیقاً قابلیتی به نام System-Versioned Temporal Tables ندارد، ولی میتوان با ترکیب دو قابلیت زیر، همان نتیجه را گرفت:
Flashback Data Archive (FDA) → برای ذخیره خودکار نسخههای قدیمی رکوردها
Flashback Versions Query → برای پرسوجو و مشاهده نسخههای قدیمی
-- ایجاد Flashback Archive CREATE FLASHBACK ARCHIVE my_fda TABLESPACE my_tbs RETENTION 5 YEAR; -- فعال کردن روی جدول ALTER TABLE departments FLASHBACK ARCHIVE my_fda;
-- نمایش نسخههای قبلی یک رکورد SELECT versions_starttime, versions_endtime, dep_name, dep_location FROM departments VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2025-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('2025-08-05 23:59:59', 'YYYY-MM-DD HH24:MI:SS') WHERE dept_id = 10;
مقایسه ساده
ویژگی SQL Server Oracle (FDA + Versions Query) فعالسازی فقط یک دستور CREATE TABLE نیاز به ایجاد Archive و فعالسازی روی جدول نگهداری تاریخچه خودکار خودکار پس از فعالسازی FDA پرسوجو تاریخچه FOR SYSTEM_TIME VERSIONS BETWEEN سادگی پیادهسازی سادهتر کمی پیچیدهتر قابلیت برگشت به نسخه قدیمی بله بله
اگر بخوای میتونم همین رو تبدیل به یک نسخه آموزشی اینفوگرافیک کنم که در یک نگاه تفاوت SQL Server و Oracle رو نشون بده. اینطوری هم برای گزارش و هم برای آموزش تیم استفاده میشه.