بسم الله الرحمن الرحيم
كنت احاول اعداد مادة تدريبية متقدمة ل Sql server فبحثت عن Snasphot فلم اجد اي شيء يتعلق بها في هذا المنتدى لذا قررت ان اضع الشرح عنها للافادة .
احدى الاضافات التي جاءت مع Sql server 2005 كانت Databse Snasphot والتي هي عبارة عن اخذ نسخة من قاعدة البيانات في وقت محدد بحيث تكون هذه النسخة للقراءة فقط .
الاستخدامات :
• حماية من خطأ قد يقوم به المستخدم او مدير النظام
• كنسخة تاريخية لوقت محدد .
• مصدر للقراءة مثل التقارير .
• للتجريب والمقارنة اثناء القيام بتعديل معين .
• كنسخة احتياطية لاسترجاع البيانات
• وغيرها
طريقة عملها:
عند الانشاء يتم حجز مساحة بسيطة على القرص الصلب ( اي لا يتم حجز مساحة مساوية للقاعدة الاصلية) وذلك باستخدام تقنية تسمى sparse files .
بعد ذلك عند حصول تعديل على قاعدة البيانات الاصلية وقبل حصول ذلك التعديل يتم نقل الصفحة Page التي تحتوي على هذه البيانات الى ال sparse files وبعد ذلك تتم عملية التعديل (يتم العمل في هذه التقنية على مستوى ال page ) وهذه العملية تسمى copy-on-write.
عند القراءة من هذه القاعدة اي عمل استعلام عليها يتم قراءة البيانات او بالاصح الصفحات التي لم تتعدل من القاعدة الاصلية والبيانات التي تعدلت من هذه القاعدة اي من ال Sparse files .
صورة توضح هذه الالية
طريقة الانشاء والاستخدام :
لايوجد طريقة في SSMS لانشاء مثل هذه القاعدة لذا نحتاج الى استخدام الكود (يوجد قالب لكيفية الانشاء في Template explorer تحت بند Database)
هذا هو الكود
CREATE DATABASE snapTest_snapA ON ( NAME = snapTest, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\snapTest_snapA.ss' ) AS SNAPSHOT OF snapTest;
حيث ان :
snapTest_snapA : هو اسم القاعدة الجديدة.
snapTest : هو اسم القاعدة الاصلية.
NAME : هو اسم ملف قاعدة البيانات الاصلية logical name
FILENAME : مسار واسم الملف الذي سيتم انشاؤه وليس مسار الملف الاصلي .
.ss : يمكن استخدام اي امتداد للملف وليس اجباريا ان يكون ss.
لحذف القاعدة :
DROP DATABASE snapTest_snapA
لاسترجاع القاعدة الاصلية من ال Snapshot :
Restore database snapTest from database_snapshot = 'snapTest_snapA'
ملاحظات :
يمكن انشاء اي عدد من ال Snapshots مادام هناك متسع على القرص الصلب لكن لايفضل ذلك لان كثرة التعديل تؤثرعلى السرعة.
يمكن انشاء ال Snapshots على نفس سيرفر القاعدة الاصلية فقط .
ال Snapshots متوفرة في نسخة الانتربرايز والديفيلوببر فقط .
عند استرجاع القاعدة الاصلية من Snapshot يجب ان تكون القاعدة الاصلية موجودة وفعالة ويجب بعد الاسترجاع حذف جميع ال Snapshots .
لايمكن عمل حفظ ولااسترجاع لهذه القاعدة.
الصلاحيات يتم وراثتها من القاعدة الاصلية وقت الانشاء.
وقبل الختام صورة توضح عمل نفس الاستعلام على قاعدة البيانات الاصلية وقاعدتا Snapshots اخذتا في اوقات مخلتفة حيث يتبين اختلاف بيانات كل استعلام .
وفي النهاية ارجو لكم الاستفادة
اقتباسSparse files are a feature of the NTFS file system. As data is written to a sparse file, NTFS allocates the disk space to hold that data.
