خانه SQL Server آشنایی با Database Snapshot SQL Server نوشته شده توسط: رضا بیات ۱۱ شهریور ۱۳۹۴ زمان مطالعه: 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' چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش برچسب ها # Database Snapshot# Snapshot# SQL Server معرفی نویسنده مقالات 1 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده رضا بیات پروفایل نویسنده معرفی محصول مسعود طاهری دوره آموزش High Availability در SQL Server 3.890.000 تومان مقالات مرتبط ۱۰ اردیبهشت SQL Server استفاده از Credential و Proxy در SQL Server Agent حسن سلیمانی ۰۷ اردیبهشت SQL Server استفاده از Operator ها در SQL Server Agent حسن سلیمانی ۰۵ اردیبهشت SQL Server بررسی نحوه ایجاد Job در SQL Server حسن سلیمانی ۲۹ فروردین SQL Server آشنایی با بخش های مختلف SQL Server Agent حسن سلیمانی دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ مصطفی ۲۸ / ۰۳ / ۹۷ - ۰۱:۴۵ مزیت استفاده از Snapshot سرعت بالای آن در هنگام ایجاد، بازگردانی و اِشغال فضای کمتر میباشد. ویژگی بارز Snapshot این است که Client میتواند پس از ایجاد بر روی آن Query (کوئری) اجرا کند و مانند فایل بکآپ نیاز به ایجاد یک پایگاه داده مجزا و بازگردانی بکآپ برروی پایگاه داده ایجاد شده ندارد؛ این یکی از مهمترین دلایل برای اضافه نمودن این قابلیت توسط تیم توسعه دهنده SQL Server بودهاست. پاسخ به دیدگاه مصطفی ۲۸ / ۰۳ / ۹۷ - ۰۱:۴۵ مزیت استفاده از Snapshot سرعت بالای آن در هنگام ایجاد، بازگردانی و اِشغال فضای کمتر میباشد. ویژگی بارز Snapshot این است که Client میتواند پس از ایجاد بر روی آن Query (کوئری) اجرا کند و مانند فایل بکآپ نیاز به ایجاد یک پایگاه داده مجزا و بازگردانی بکآپ برروی پایگاه داده ایجاد شده ندارد؛ این یکی از مهمترین دلایل برای اضافه نمودن این قابلیت توسط تیم توسعه دهنده SQL Server بودهاست. پاسخ به دیدگاه ha_zarabi_vb6@outlook.com ۰۷ / ۱۱ / ۹۴ - ۱۱:۵۵ با سلام و خسته نباشید از بابت توضیحات کلیدی آقای مهندس Hamid J. Fard بسیار سپاسگزارم خیلی خوب توضیح دادند و همچنین از اقای مسعود طاهری و از اقای رضا بیات پاسخ به دیدگاه ha_zarabi_vb6@outlook.com ۰۷ / ۱۱ / ۹۴ - ۱۱:۵۵ با سلام و خسته نباشید از بابت توضیحات کلیدی آقای مهندس Hamid J. Fard بسیار سپاسگزارم خیلی خوب توضیح دادند و همچنین از اقای مسعود طاهری و از اقای رضا بیات پاسخ به دیدگاه مسعود طاهری ۱۱ / ۰۶ / ۹۴ - ۱۰:۵۶ رضا جان یادم رفت از شما تشکر کنم متشکرم منتظر مقالات بعدی شما هستیم موفق باشید پاسخ به دیدگاه مسعود طاهری ۱۱ / ۰۶ / ۹۴ - ۱۰:۵۶ رضا جان یادم رفت از شما تشکر کنم متشکرم منتظر مقالات بعدی شما هستیم موفق باشید پاسخ به دیدگاه رضا بیات ۱۱ / ۰۶ / ۹۴ - ۰۶:۴۳ با سلام و احترام ضمن تشکر از آقا حمید و آقای طاهری ممنون از نکاتی که همه دوستان اضافه فرمودند پاسخ به دیدگاه رضا بیات ۱۱ / ۰۶ / ۹۴ - ۰۶:۴۳ با سلام و احترام ضمن تشکر از آقا حمید و آقای طاهری ممنون از نکاتی که همه دوستان اضافه فرمودند پاسخ به دیدگاه مسعود طاهری ۱۱ / ۰۶ / ۹۴ - ۰۳:۳۲ سلام دوستان حمید عزیز به همه نکات لازم اشاره کرده فقط در جهت تکمیل به طور خلاصه و با سانسور همه پیچیدگی ها در مکانیزم Copy On Write چنانچه یک Page در بانک اطلاعاتی مبدا تغییر پیدا کند محتوای آن قبل از تغییر به Snapshot Database کپی می شود و این عمل یکبار انجام می شود. حال چنانچه شما خواهان واکشی اطلاعات از Snapshot Database باشید چنانچه Page مربوط به آن در Snapshot Database وجود داشته باشد این اطلاعات از آنجا واکشی و در غیر از دیتابیس اصلی واکشی خواهد شد. پس ملاحضه می کنید به ازای مکانیزم Copy on Write عملیات IO افزایش خواهد یافت. برای کسب اطلاعات بیشتر درباره معماری Copy on Write به لینک های زیر مراجعه کنید تصاویر موجود در لینک ها دید خوبی درباره این مکانیزم ارائه می کند https://msdn.microsoft.com/en-us/library/ms175158.aspx http://www.sqlservercentral.com/articles/Database+Snapshots/63004/ http://blogs.msdn.com/b/psssql/archive/2009/01/20/how-it-works-sql-server-sparse-files-dbcc-and-snapshot-databases-revisited.aspx پاسخ به دیدگاه مسعود طاهری ۱۱ / ۰۶ / ۹۴ - ۰۳:۳۲ سلام دوستان حمید عزیز به همه نکات لازم اشاره کرده فقط در جهت تکمیل به طور خلاصه و با سانسور همه پیچیدگی ها در مکانیزم Copy On Write چنانچه یک Page در بانک اطلاعاتی مبدا تغییر پیدا کند محتوای آن قبل از تغییر به Snapshot Database کپی می شود و این عمل یکبار انجام می شود. حال چنانچه شما خواهان واکشی اطلاعات از Snapshot Database باشید چنانچه Page مربوط به آن در Snapshot Database وجود داشته باشد این اطلاعات از آنجا واکشی و در غیر از دیتابیس اصلی واکشی خواهد شد. پس ملاحضه می کنید به ازای مکانیزم Copy on Write عملیات IO افزایش خواهد یافت. برای کسب اطلاعات بیشتر درباره معماری Copy on Write به لینک های زیر مراجعه کنید تصاویر موجود در لینک ها دید خوبی درباره این مکانیزم ارائه می کند https://msdn.microsoft.com/en-us/library/ms175158.aspx http://www.sqlservercentral.com/articles/Database+Snapshots/63004/ http://blogs.msdn.com/b/psssql/archive/2009/01/20/how-it-works-sql-server-sparse-files-dbcc-and-snapshot-databases-revisited.aspx پاسخ به دیدگاه 1 2