یکی از قابلیتهای SQL Server ویژگی Snapshot گرفتن از Database (پایگاه داده) است. همانطور که از اسم آن نیز پیداست Snapshot بهمعنی image گرفتن از پایگاه داده میباشد. Snapshot پایگاه داده، viewای از پایگاه داده اصلی در زمانیکه Snapshot ایجاد شده است را نمایش میدهد، بدین معنی که کلیه objectها و دادهها با زمانیکه Snapshot گرفته شدهاست یکسان خواهد بود.
Snapshot بهصورت فقط خواندنی است و یک پایگاه داده میتواند شامل چندین Snapshot باشد. با استفاده از Snapshot در زمانهای لازم میتوانید تغییرات را به حالت قبل (در زمانیکه Snapshot بهروز شدهاست) بازگردانی نمائید. امکان حذف پایگاه داده اصلی تا زمانیکه Snapshotها فعال باشند وجود ندارد و ابتدا باید آنها را حذف نمود.
Snapshotها وابسته به پایگاه داده هستند و به پایگاه داده اصلی اشاره میکنند؛ این امکان وجود دارد که فایل بکآپ پایگاه داده را به محل دیگری (سیستم مجزایی) منتقل نمود اما Snapshotها را نمیتوان از پایگاه داده اصلی جدا نمود.
مزیت استفاده از Snapshot سرعت بالای آن در هنگام ایجاد، بازگردانی و اِشغال فضای کمتر میباشد. ویژگی بارز Snapshot این است که Client میتواند پس از ایجاد بر روی آن Query (کوئری) اجرا کند و مانند فایل بکآپ نیاز به ایجاد یک پایگاه داده مجزا و بازگردانی بکآپ برروی پایگاه داده ایجاد شده ندارد؛ این یکی از مهمترین دلایل برای اضافه نمودن این قابلیت توسط تیم توسعه دهنده SQL Server بودهاست.
کاربرد Snapshot:
بهعنوان نمونه میتوان به کاربردهای زیر جهت ایجاد Snapshot اشاره نمود:
- Snapshotها میتوانند برای اهداف گزارش گیری استفاده شوند. Clientها میتوانند با کوئری گرفتن از Snapshotها از دادههای پایگاه داده در فواصل زمانهایی که Snapshotها ایجاد شدهاند گزارش تهیه کنند.
- حفظ دادههای تاریخی برای تولید گزارش.
- حفاظت از دادهها در برابر خطاهای اجرایی.
- در صورت خطای کاربری در Source پایگاه داده با استفاده از Snapshot گرفته شده میتوان تغییرات را به زمان ایجاد Snapshot بازگرداند.
- جهت تست صحت عملکرد پایگاه داده.
آموزش کار با Snapshot:
برای درک بهتر مراحل را با یک مثال توضیح خواهم داد.
ابتدا یک پایگاه داده بهعنوان نمونه با یک Table (جدول) که دارای دادههای آزمایشی باشد ایجاد میکنیم:
USE master GO CREATE DATABASE TestDB GO USE TestDB GO -- Populate Regular Database with Sample Table CREATE TABLE TestTable (ID INT, Value VARCHAR(10)) INSERT INTO TestTable VALUES(1, 'First'); INSERT INTO TestTable VALUES(2, 'Second'); INSERT INTO TestTable VALUES(3, 'Third'); GO
ایجاد snapshot:
بهصورت زیر میتوانید از پایگاه داده در حالت فعلی Snapshot بگیرید:
-- Create Snapshot Database CREATE DATABASE SnapshotDB ON (Name = TestDB, FileName='c:\SSDB.ss1') AS SNAPSHOT OF TestDB; GO
حال محتوی جدول در پایگاه داده اصلی و Snapshot را به کمک دستورات زیر مشاهده کنید:
-- Select from Regular and Snapshot Database SELECT * FROM TestDB.dbo.Testtable; SELECT * FROM SnapshotDB.dbo.Testtable; GO
سپس دادههای ایجاد شده در جدول را از پایگاه داده TestDB به کمک دستورات زیر حذف میکنیم:
-- Delete from Regular Database DELETE FROM TestDB.dbo.TestTable; GO
مجدد محتوی جداول را مشاهده کنید، خروجی مشابه تصویر زیر خواهد بود.
بازگردانی داده به کمک snapshot:
میتوانید به کمک Snapshot دادههای حذف شده را به پایگاه داده اصلی بازگردانی کنید؛ برای این منظور میتوانید از دستورات زیر استفاده کنید:
-- Restore Data from Snapshot Database USE master GO RESTORE DATABASE TestDB FROM DATABASE_SNAPSHOT = 'SnapshotDB'; GO -- Select from Regular and Snapshot Database SELECT * FROM TestDB.dbo.TestTable; SELECT * FROM SnapshotDB.dbo. TestTable; GO
حذف snapshot:
جهت حذف Snapshot میتوانید از دستورات زیر استفاده کنید.
-- Clean up DROP DATABASE [SnapshotDB]; GO