آشنایی با Database Snapshot

آشنایی با Database Snapshot

نوشته شده توسط: رضا بیات
تاریخ انتشار: ۱۱ شهریور ۱۳۹۴
آخرین بروزرسانی: ۲۵ مهر ۱۴۰۲
زمان مطالعه: 14 دقیقه
۳.۸
(۴)

مقدمه

شاید در دنیای واقعی بازگشت به زمان عقب وجود نداشته باشد اما این عمل با نرم افزارها امکانپذیر است در اصل Snapshot به مفهوم عکس گرفتن است. شما در SQL می‌توانید یک Snapshot از Database خود تهیه کنید و هر زمان که لازم شد به آن زمان عقب گرد کنید.

با Snapshot گرفتن شما می‌توانید وضعیت  Database را در لحظه فعلی ثبت و داخل فایلی نگهداری کنید تا بتوان در زمان مورد نیاز از امکاناتش استفاده نمایید. شاید بتوان گفت به نوعی بکاپ گیری است و می‌توان این فایل را Restore کرد.

Snapshot ها در هنگام ایجاد دارای فضای اندکی هستند. چون در فضای Page ظاهر می‌شود در صورتی که Page های دیتا اصلی تغییر نکند چیزی داخل فایل Snapshot قرار نمی‌گیرد و اگر دیتایی از Snapshot خوانده شود در واقع از همان دیتای اصلی استفاده شده است به همین دلیل است که برای حذف دیتا اصلی ابتدا Snapshot مربوطه را باید حذف نمایید.

مراحل ساخت Snapshot

ساخت یک دیتابیس و جداول

USE master
CREATE DATABASE TEST
USE TEST
CREATE TABLE Student(ID INT,Name VARCHAR(15),SECTION CHAR(1))
INSERT INTO Student VALUES
(۱,'Keshav','A'),
(۲,'Sachin','B'),
(۳,'Rahul','C')
SELECT * FROM dbo.Student
 

ID Name  SECTION----------- --------------- -------1   Keshav    A2   Sachin
B3   Rahul  C(3 row(s) affected)

با استفاد از T-SQL زیر می توانید اطلاعات سایز فایل را مشاهده نمایید

USE TEST
EXEC sp_spaceused
database_name     database_size   unallocated space -----------------  ------------------TEST
۱.۸۷ MB  ۰.۱۱ MBreserved  data    index_size    unused------------------ ------------------
۱۲۹۶ KB   ۵۱۲ KB     ۶۴۰ KB   ۱۴۴ KB

ساخت Snapshot برای دیتای ایجاد شده و مشاهده اطلاعات سایز فایل

USE master
CREATE DATABASE TEST_SS
ON
(NAME=TEST,
FILENAME='C:\Program Files\Microsoft SQL Server\
MSSQL10_50.MSSQLSERVER\MSSQL\DATA\TEST_SS.ss'
)
AS SNAPSHOT OF TEST
USE TEST_SS
EXEC sp_spaceused
database_name     database_size   unallocated space  ------------------TEST_SS
۱.۸۷ MB        ۰.۱۱ MBreserved           data
index_size   unused------------------  ------------------۱۲۹۶ KB
۵۱۲ KB             ۶۴۰ KB             ۱۴۴ KB

حال با درج چند رکورد میزان فضای Snapshot را بررسی میکنیم

USE TEST
INSERT INTO Student VALUES
(۴,'Rohit','A'),
(۵,'Saumya','B')
Now if we query the snapshot:
USE TEST_SS
SELECT * FROM dbo.Student
نکته: ساختار Snapshot بصورت Read-Only است
UPDATE TEST_SS.dbo.Student SET Name='XXX'
WHERE ID=1
 Msg 3906, Level 16, State 1, Line 1Failed to update database
 "TEST_SS" because the database is read-only.

امکان حدف دیتا اصلی وجود ندارد بایستی ابتدا Snapshot را حذف کنید

 DROP DATABASE TEST
Msg 3709, Level 16, State 2, Line 1Cannot drop the database while the database snapshot
"TEST_SS" refers to it. Drop that database first.

Snapshot ایجاد شده را میتوان Restore کرد

USE master
RESTORE DATABASE TEST
FROM DATABASE_SNAPSHOT = 'TEST_SS'

 

برای بدست آوردن اطلاعات بیش‌تر در مورد دیگر دستورات SQL ، به مقاله زیر مراجعه کنید.
 
دستورهای SQL Server

چه رتبه ای می‌دهید؟

میانگین ۳.۸ / ۵. از مجموع ۴

اولین نفر باش

title sign
معرفی نویسنده
رضا بیات
مقالات
1 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
رضا بیات
title sign
دیدگاه کاربران

    • مزیت استفاده از Snapshot سرعت بالای آن در هنگام ایجاد، بازگردانی و اِشغال فضای کمتر می‌باشد. ویژگی بارز Snapshot این است که Client می‌تواند پس از ایجاد بر روی آن Query (کوئری) اجرا کند و مانند فایل بک‌آپ نیاز به ایجاد یک پایگاه داده مجزا و بازگردانی بک‌آپ برروی پایگاه داده ایجاد شده ندارد؛ این یکی از مهم‌ترین دلایل برای اضافه نمودن این قابلیت توسط تیم توسعه دهنده SQL Server بوده‌است.

    •    با سلام و خسته نباشید

      از بابت توضیحات کلیدی آقای مهندس Hamid J. Fard بسیار سپاسگزارم خیلی خوب توضیح دادند و همچنین از اقای مسعود طاهری و از اقای رضا بیات

    •    با سلام و خسته نباشید

      از بابت توضیحات کلیدی آقای مهندس Hamid J. Fard بسیار سپاسگزارم خیلی خوب توضیح دادند و همچنین از اقای مسعود طاهری و از اقای رضا بیات

    • رضا جان یادم رفت از شما تشکر کنم متشکرم

      منتظر مقالات بعدی شما هستیم
      موفق باشید
    •  با سلام و احترام

      ضمن تشکر از آقا حمید و آقای طاهری ممنون از نکاتی که همه دوستان اضافه فرمودند

    • سلام دوستان 

      حمید عزیز به همه نکات لازم اشاره کرده فقط در جهت تکمیل
      به طور خلاصه و با سانسور همه پیچیدگی ها در مکانیزم Copy On Write
      چنانچه یک  Page در بانک اطلاعاتی مبدا تغییر پیدا کند محتوای آن قبل از تغییر به Snapshot Database کپی می شود و این عمل یکبار انجام می شود.
      حال چنانچه شما خواهان واکشی اطلاعات از Snapshot Database باشید چنانچه Page مربوط به آن در Snapshot  Database وجود داشته باشد این اطلاعات از آنجا واکشی و در غیر از دیتابیس اصلی واکشی خواهد شد.
      پس ملاحضه می کنید به ازای مکانیزم Copy on Write عملیات IO افزایش خواهد یافت.
      برای کسب اطلاعات بیشتر درباره معماری Copy on Write به لینک های زیر مراجعه کنید
      تصاویر موجود در لینک ها دید خوبی درباره این مکانیزم ارائه می کند
    • سلام دوستان 

      حمید عزیز به همه نکات لازم اشاره کرده فقط در جهت تکمیل
      به طور خلاصه و با سانسور همه پیچیدگی ها در مکانیزم Copy On Write
      چنانچه یک  Page در بانک اطلاعاتی مبدا تغییر پیدا کند محتوای آن قبل از تغییر به Snapshot Database کپی می شود و این عمل یکبار انجام می شود.
      حال چنانچه شما خواهان واکشی اطلاعات از Snapshot Database باشید چنانچه Page مربوط به آن در Snapshot  Database وجود داشته باشد این اطلاعات از آنجا واکشی و در غیر از دیتابیس اصلی واکشی خواهد شد.
      پس ملاحضه می کنید به ازای مکانیزم Copy on Write عملیات IO افزایش خواهد یافت.
      برای کسب اطلاعات بیشتر درباره معماری Copy on Write به لینک های زیر مراجعه کنید
      تصاویر موجود در لینک ها دید خوبی درباره این مکانیزم ارائه می کند
    •  مجتبی مزورعی: این نوع ابزارها به دلیل اینکه SQL Server مجوزهای لازم را از سازمان ANSI بگیره ارایه میشه. ولی خب یک مزیتهایی هم داره همانطور که در نظر قبلی گفتم به درد گزارشگیری سبک قبل از تغییرات می خوره. و اینکه این چه ربطی به یک آپ و اتچ کردن داره؟ این روش برای انتقال داده نیست. وقتی ما میگیم Restore یعنی اینکه داده های پایگاه داده اصلی را به زمان قبل از Snapshot برگردانیم.

      علی یگانه مقدم: مثال شما درسته اما اگر در یک سروری باشد که در اختیار مشتری نباشد یعنی شما بتوانید هر ۲۴ ساعت پایگاه داده را به حالت اولیه برگردانید.
      •    بله منم اشاره کردم که برای نسخه های دمو
        که مسلما دست مشتری نیست و فقط از این جهت هست که مشتری نسخه رو قبل از خرید به طور عملی تجربه کنه

    • یکی از کاربردهای آن به نظرم میتواندی این باشد که به عنوان مثال یک سیستم مدیریت محتوا دارید که قصد دارید نسخه دمو آن را به کاربر نشان دهید تا با آن کار کنید. میتواند دیتا اضافه کند و … ولی هر ۲۴ ساعت دیتابیس به حالت اولیه برمیگردد.

    • خوب می فرمودید
      وقتی ما ابزار بک آپ گیری را داریم چه نیازی به این ابزار هست ؟
      مزیت های این روش نسبت به بک آپ گیری معمولی چیست ؟

      معومولا به خاطر اینکه پروسه اتچ کردن با ارور همراه است برای انتقال پایگاه داده از روش بک آپ گیری استفاده می کنند
      آیا این روش را برای انتقال پایگاه داده می توان به کار برد ؟

      با تشکر

  • 1
  • 2