آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

SQL Server point in time restore

گزینه ی RESTORE ... WITH STOPAT اجازه ی بازگردانی دیتابیس را در یک نقطه اززمان به شما می دهد. این امر به شما توانایی بازگردانی یک دیتابیس به قبل از یک رویداد را می دهد که برای دیتابیس شما مفید نبود. برای اینکه این گزینه کار کند، دیتابیس نیاز به مدل ریکاوری FULL یا Bulk- Logged دارد و شما نیز لازم است بک آپ های transaction log را انجام دهید.


توضیحات

وقتی داده ای روی دیتابیس شما نوشته می شود، ابتدا روی transaction log نوشته می شود و پس از تکمیل تراکنش روی فایل داده. وقتی که شما transaction log را ترمیم می کنید، SQL Server تمام تراکنش های موجود در را transaction log مجددا اجرا خواهد کرد و تراکنش هایی که نیاز دارد به جلو یا عقب می کشاند تا دیتابیس را در یک حالت قابل استفاده قرار دهد.
هر کدام از این تراکنشها دارای یک LSN به همراه یک timestamp می باشند، بنابراین در هنگام بازگردانی transaction log توانایی این را دارید که به SQL Server بگویید در کجا خواندن تراکنش هایی را که نیازبه بازگردانی دارند را متوقف کند.
یک نکته قابل ذکر این است که اگر دیتابیس شما در حال استفاده از مدل ریکاوری Bulk-Logged می باشد و عملکردهای به سیستم وارد شده ی کمی در transaction log وجود دارد، شما نمی توانید با استفاده از آن transaction log یک ریکاوری در زمان انجام دهید. اما اگر بک آپ دیگری دارید که بعدا اتفاق افتاده و دارای چنین عملکردی نمی باشد، می توانید از این transaction log برای ریکاوری در زمان استفاده کنید، اما زمانی که به آن اشاره می کنید باید در داخل دومین بک آپ transaction log اتفاق بیفتد.


T-SQL
Restore database with STOPAT

این فرمان دیتابیس AdventureWorks را به یک نقطه در زمان برابر با "March 23, 2009 at 5:31PM" بازگردانی خواهد کرد.


RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK' ‎

WITH NORECOVERY

GO ‎

RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN' ‎

WITH RECOVERY, ‎

STOPAT = 'Mar 23, 2009 05:31:00 PM' ‎

GO

بازگردانی دیتابیس با STOPAT که در آن مدل ریکاوری Bulk-Logged می باشد و عملکردهای وارد شده ی کمی وجود دارد.
در این مثال یک بک آپ کامل داریم و transaction log دارای حداقل عملیات وارد شده به سیستم می باشد. می توانیم با استفاده ازفرمان زیر یک ریکاوری در زمان انجام دهیم:


RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK' ‎

WITH NORECOVERY

GO ‎

RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN' ‎

WITH RECOVERY, ‎

STOPAT = 'Mar 23, 2009 05:31:00 PM' ‎

GO

اما اگر عملکردهای حجم وجود داشته باشند، پیغام خطای زیر را دریافت خواهیم کرد:


Msg 4341, Level 16, State 1, Line 1
This log backup contains bulk-logged changes. It cannot be used to stop at an arbitrary point in time.
Msg 4338, Level 16, State 1, Line 1
The STOPAT clause specifies a point too early to allow this backup set to be restored. Choose a different stop point or use RESTORE DATABASE WITH RECOVERY to recover at the current point.
Msg 3013, Level 16, State 1, Line 1
RESTORE LOG is terminating abnormally.

عملکرد بازگردانی کامل خواهد شد، اما کل بک آپ transaction log را بازگردانی خواهد کرد و دیتابیس را در یک حالت restoring رها خواهد کرد. بنابراین شما می توانید یا transaction log بیشتری را بازگردانی کنید و یا از RESTORE .. WITH RECOVERY برای آنلاین کردن دیتابیس استفاده کنید.


SQL Server Management Studio

برای بازگردانی به نقطه در زمان با استفاده از SSMS، کارهای زیر را انجام دهید، بک آپ و transaction log را که می خواهید بازگردانی کنید، انتخاب کرده و سپس از گزینه ی "To a point in time." مانند تصویر زیر استفاده کنید تا زمانی که را که می خواهید در آن دیتابیس را ریکاور کنید، انتخاب کنید.


آموزش sql

بازگردانی به یک نقطه در زمان با یک عملکرد bulk-logged در transaction log اگر سعی در بازگردانیبا استفاده از SSMS دارید، پیغام خطای زیر را دریافت خواهید کرد، مشابه آنچه با کد T-SQL دریافت کردیم.


آموزش sql
  • 2162
  •    642
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .