خانه 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 4.690.000 تومان مقالات مرتبط ۰۴ مهر SQL Server دستور Case در SQL Server – قسمت اول محمد سلیم آبادی ۳۰ شهریور SQL Server استور پروسیجر (Stored Procedure) چیست؟ تیم فنی نیک آموز ۰۶ تیر SQL Server معرفی Ledger در SQL Server 2022 مسعود طاهری ۱۰ اردیبهشت SQL Server استفاده از Credential و Proxy در SQL Server Agent حسن سلیمانی دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ Hamid J. Fard ۱۱ / ۰۶ / ۹۴ - ۰۲:۱۷ مجتبی مزورعی: این نوع ابزارها به دلیل اینکه SQL Server مجوزهای لازم را از سازمان ANSI بگیره ارایه میشه. ولی خب یک مزیتهایی هم داره همانطور که در نظر قبلی گفتم به درد گزارشگیری سبک قبل از تغییرات می خوره. و اینکه این چه ربطی به یک آپ و اتچ کردن داره؟ این روش برای انتقال داده نیست. وقتی ما میگیم Restore یعنی اینکه داده های پایگاه داده اصلی را به زمان قبل از Snapshot برگردانیم. علی یگانه مقدم: مثال شما درسته اما اگر در یک سروری باشد که در اختیار مشتری نباشد یعنی شما بتوانید هر ۲۴ ساعت پایگاه داده را به حالت اولیه برگردانید. پاسخ به دیدگاه علی یگانه مقدم ۳۰ / ۰۶ / ۹۴ - ۰۰:۴۱ بله منم اشاره کردم که برای نسخه های دموکه مسلما دست مشتری نیست و فقط از این جهت هست که مشتری نسخه رو قبل از خرید به طور عملی تجربه کنه پاسخ به دیدگاه Hamid J. Fard ۱۱ / ۰۶ / ۹۴ - ۰۲:۱۷ مجتبی مزورعی: این نوع ابزارها به دلیل اینکه SQL Server مجوزهای لازم را از سازمان ANSI بگیره ارایه میشه. ولی خب یک مزیتهایی هم داره همانطور که در نظر قبلی گفتم به درد گزارشگیری سبک قبل از تغییرات می خوره. و اینکه این چه ربطی به یک آپ و اتچ کردن داره؟ این روش برای انتقال داده نیست. وقتی ما میگیم Restore یعنی اینکه داده های پایگاه داده اصلی را به زمان قبل از Snapshot برگردانیم. علی یگانه مقدم: مثال شما درسته اما اگر در یک سروری باشد که در اختیار مشتری نباشد یعنی شما بتوانید هر ۲۴ ساعت پایگاه داده را به حالت اولیه برگردانید. پاسخ به دیدگاه علی یگانه مقدم ۳۰ / ۰۶ / ۹۴ - ۰۰:۴۱ بله منم اشاره کردم که برای نسخه های دموکه مسلما دست مشتری نیست و فقط از این جهت هست که مشتری نسخه رو قبل از خرید به طور عملی تجربه کنه پاسخ به دیدگاه علی یگانه مقدم ۱۱ / ۰۶ / ۹۴ - ۰۲:۴۰ یکی از کاربردهای آن به نظرم میتواندی این باشد که به عنوان مثال یک سیستم مدیریت محتوا دارید که قصد دارید نسخه دمو آن را به کاربر نشان دهید تا با آن کار کنید. میتواند دیتا اضافه کند و … ولی هر ۲۴ ساعت دیتابیس به حالت اولیه برمیگردد. پاسخ به دیدگاه علی یگانه مقدم ۱۱ / ۰۶ / ۹۴ - ۰۲:۴۰ یکی از کاربردهای آن به نظرم میتواندی این باشد که به عنوان مثال یک سیستم مدیریت محتوا دارید که قصد دارید نسخه دمو آن را به کاربر نشان دهید تا با آن کار کنید. میتواند دیتا اضافه کند و … ولی هر ۲۴ ساعت دیتابیس به حالت اولیه برمیگردد. پاسخ به دیدگاه مجتبی مزورعی ۱۱ / ۰۶ / ۹۴ - ۰۱:۵۷ خوب می فرمودیدوقتی ما ابزار بک آپ گیری را داریم چه نیازی به این ابزار هست ؟مزیت های این روش نسبت به بک آپ گیری معمولی چیست ؟ معومولا به خاطر اینکه پروسه اتچ کردن با ارور همراه است برای انتقال پایگاه داده از روش بک آپ گیری استفاده می کنند آیا این روش را برای انتقال پایگاه داده می توان به کار برد ؟ با تشکر پاسخ به دیدگاه مجتبی مزورعی ۱۱ / ۰۶ / ۹۴ - ۰۱:۵۷ خوب می فرمودیدوقتی ما ابزار بک آپ گیری را داریم چه نیازی به این ابزار هست ؟مزیت های این روش نسبت به بک آپ گیری معمولی چیست ؟ معومولا به خاطر اینکه پروسه اتچ کردن با ارور همراه است برای انتقال پایگاه داده از روش بک آپ گیری استفاده می کنند آیا این روش را برای انتقال پایگاه داده می توان به کار برد ؟ با تشکر پاسخ به دیدگاه Hamid J. Fard ۱۱ / ۰۶ / ۹۴ - ۰۱:۰۷ مقاله خلاصه و مفید بود فقط چند نکته رو در ادامه مقاله اضافه کنم: نکته ۱: Database Snapshot جای Backup رو نمی گیره پس هیچوقت به عنوان Backup ازش استفاده نشه. نکته ۲: سرعت بازدهی پایگاه داده به دلیل وجود عملیات Copy On Write کاهش میابد. نکته ۳: پایگاه داده اصلی نمی تواند دیگر به عنوان Scalable استفاده شود. نکته ۴: توانایی ساخت Database Snapshot در فایل سیستم FAT32 وجود ندارد. نکته ۵: امنیت و ساختار فایلهای پایگاه داده اصلی بعد از Snapshot نمی توانند تغییر کنند. به عنوان مثال یک فایل به صورت Read-Only است و بعد از Snapshot دیگر ما توانایی تغییر آن به Read-Write را نداریم. نکته ۶: این عملیات برای مواردی همچون گذارشگیری و برگرداندن داده های تغییر یافته شده است. در بعضی مواقع ما نیاز داریم که داده های بسیاری را به صورت دستی تغییر دهیم که این عملیات ممکن است به شکست انجامد و ما نیازمند آن هستیم که داده های تغییر یافته شده را حالت اول برگردانیم این روش یکی از معمول روشهاست. نکته ۷: FileStream پشتیبانی نمی شود و اینکه زمان عمر مفید Snapshot حداکثر ۲۴ ساعت می باشد. نکته ۸: اگر اندازه فایل Snapshot از فضای دیسک بیشتر یا هم اندازه شود Database Snapshot به صورت Suspected در می آید و شما نیاز دارید که آن را حذف کنید. نکته ۹: اگر بیش از یک Snapshot از پایگاه داده وجود داشته باشد شما نمی توانید آن را Restore کنید. نکته ۱۰: و از همه مهمتر اینکه در زمان Restore جفت پایگاه داده و Snapshot از دسترس خارج می شوند و بعد از عملیات Restore به صورت اتوماتیکوار از فایل تراکنش دوباره می سازد که این باعث می شود زنجیره تراکنش از بین برود. پس در نتیجه قبل از Restore کردن شما باید یک Full Backup از پایگاه داده اصلی بگیرید. امیدوارم این نکات خاطر شما رو ناراحت نکرده باشه. پاسخ به دیدگاه فرشید علی اکبری ۱۱ / ۰۶ / ۹۴ - ۰۸:۳۰ سلام نکات دلسرد کننده ای بود، ظاهراً با توجه به این ایرادات وارده، باید با این وجود عطایش را به لقایش بخشید؟ ولی مطمئناً مایکروسافت با درنظر گرفتن هزینه هایی که این امکاندهی برای کاربرانش دارد، در دسترس قرار دادن این امکان رو جهت استفاده بجا توسط DBAها ترجیح داده و درغیر اینصورت در نسخه های بعدی حذف میشد. موفق باشید. پاسخ به دیدگاه Hamid J. Fard ۱۱ / ۰۶ / ۹۴ - ۰۱:۰۷ مقاله خلاصه و مفید بود فقط چند نکته رو در ادامه مقاله اضافه کنم: نکته ۱: Database Snapshot جای Backup رو نمی گیره پس هیچوقت به عنوان Backup ازش استفاده نشه. نکته ۲: سرعت بازدهی پایگاه داده به دلیل وجود عملیات Copy On Write کاهش میابد. نکته ۳: پایگاه داده اصلی نمی تواند دیگر به عنوان Scalable استفاده شود. نکته ۴: توانایی ساخت Database Snapshot در فایل سیستم FAT32 وجود ندارد. نکته ۵: امنیت و ساختار فایلهای پایگاه داده اصلی بعد از Snapshot نمی توانند تغییر کنند. به عنوان مثال یک فایل به صورت Read-Only است و بعد از Snapshot دیگر ما توانایی تغییر آن به Read-Write را نداریم. نکته ۶: این عملیات برای مواردی همچون گذارشگیری و برگرداندن داده های تغییر یافته شده است. در بعضی مواقع ما نیاز داریم که داده های بسیاری را به صورت دستی تغییر دهیم که این عملیات ممکن است به شکست انجامد و ما نیازمند آن هستیم که داده های تغییر یافته شده را حالت اول برگردانیم این روش یکی از معمول روشهاست. نکته ۷: FileStream پشتیبانی نمی شود و اینکه زمان عمر مفید Snapshot حداکثر ۲۴ ساعت می باشد. نکته ۸: اگر اندازه فایل Snapshot از فضای دیسک بیشتر یا هم اندازه شود Database Snapshot به صورت Suspected در می آید و شما نیاز دارید که آن را حذف کنید. نکته ۹: اگر بیش از یک Snapshot از پایگاه داده وجود داشته باشد شما نمی توانید آن را Restore کنید. نکته ۱۰: و از همه مهمتر اینکه در زمان Restore جفت پایگاه داده و Snapshot از دسترس خارج می شوند و بعد از عملیات Restore به صورت اتوماتیکوار از فایل تراکنش دوباره می سازد که این باعث می شود زنجیره تراکنش از بین برود. پس در نتیجه قبل از Restore کردن شما باید یک Full Backup از پایگاه داده اصلی بگیرید. امیدوارم این نکات خاطر شما رو ناراحت نکرده باشه. پاسخ به دیدگاه فرشید علی اکبری ۱۱ / ۰۶ / ۹۴ - ۰۸:۳۰ سلام نکات دلسرد کننده ای بود، ظاهراً با توجه به این ایرادات وارده، باید با این وجود عطایش را به لقایش بخشید؟ ولی مطمئناً مایکروسافت با درنظر گرفتن هزینه هایی که این امکاندهی برای کاربرانش دارد، در دسترس قرار دادن این امکان رو جهت استفاده بجا توسط DBAها ترجیح داده و درغیر اینصورت در نسخه های بعدی حذف میشد. موفق باشید. پاسخ به دیدگاه مجتبی شهریور ۱۱ / ۰۶ / ۹۴ - ۰۱:۰۶ سلاممقاله خوبی داشتین متشکرموقعازمن از این خصوصیت در اس کیو ال اطلاع نداشتم بهره بردم پاسخ به دیدگاه مجتبی شهریور ۱۱ / ۰۶ / ۹۴ - ۰۱:۰۶ سلاممقاله خوبی داشتین متشکرموقعازمن از این خصوصیت در اس کیو ال اطلاع نداشتم بهره بردم پاسخ به دیدگاه 1 2