close
دانلود فیلم
Restore کردن تکه تکه (Piecemeal) دیتابیس با اسکیوال سرور

وقتی ما در دیتابیسمون از چندین filegroup استفاده کنیم قادر خواهیم بود بجای Restore کردن کل دیتابیس که کار زمان بری است (با توجه به سناریوی ما) بخشی از دیتابیس رو که برای ما از اهمیت بیشتری برخورداره Restore کنیم .در این روش بعد Restore کردن بخش مورد نظر (filegroup) دیتابیس آنلاین شده و کاربر میتونه به کار خودش ادامه بده در حالی که بخش های باقی مونده (filegroups) در حال Restore شدن هستند.



مثال:فرض کنید دیتابیسی بنام Sales داریم که از 2 filegroup بنام های Sales_Main (که شامل جداول اصلی ما است) و Sales_Archive (که شامل جداول آرشیو ما است) تشکیل شده

1CREATE DATABASE [Sales] ON PRIMARY (NAME = N'Sales', FILENAME = N'j:SQL DataSales.mdf')
2, FILEGROUP [Sales_Main] (NAME = N'Sales_Main', FILENAME = N'j:SQL DataSales_Main.ndf')
3, FILEGROUP [Sales_Archive] (NAME = N'Sales_Archive', FILENAME = N'j:SQL DataSales_Archive.ndf')
4LOG ON (NAME = N'Sales_log', FILENAME = N'j:SQL LogSales_log.ldf')


Best practice میگوید اشیای یوزر رو در فایل گروپ primary نسازید (بمنظور تسریع عملیات Restore ) از اینرو ما Sales_Main رو بعنوان پیش فرض قرار میدیم و جداول مورد نظر رو میسازیم



01ALTER DATABASE [Sales]
02MODIFY FILEGROUP [Sales_Main] DEFAULT
03
04USE [SALES]
05GO
06
07CREATE TABLE dbo.Table_1 (Col1 nchar(10) NULL) ON Sales_Main
08GO
09
10CREATE TABLE dbo.Table_2 (Col1 nchar(10) NULL) ON Sales_Archive
11GO


جداول بالا رو با دیتای تست پرمیکنیم



01INSERT table_1
02VALUES ('one')
03GO
04INSERT table_2
05VALUES ('two')
06GO
07
08
09BACKUP DATABASE [Sales]
10FILEGROUP = N'PRIMARY'
11TO DISK = N'G:SQL BackupSales_Primary_FG.bak'
12WITH INIT
13GO
14
15BACKUP DATABASE [Sales]
16FILEGROUP = N'Sales_Main'
17TO DISK = N'G:SQL BackupSales_Sales_Main_FG.bak'
18WITH INIT
19GO
20
21BACKUP DATABASE [Sales]
22FILEGROUP = N'Sales_Archive'
23TO DISK = N'G:SQL BackupSales_Sales_Archive_FG.bak'
24WITH INIT
25GO
26
27INSERT table_2
28VALUES ('two - two')
29GO


حال فرض کنید دیسک (های) ما که فایل گروپ های ما تو اونا ایجاد شده بودن از بین رفتن (خراب شدن) ولی دیسکی که فایل لاگ تو اون ساختیم هنوز سالمه.با فرض نداشتن فایل گروپ ما باید چندین ترابایت رو Restore کنیم و در این مدت هم سیستم از دسترس خارجه ولی با توجه به اینکه ما فایل گروپ داریم مراحل زیر رو انجام میدیم


1-از دم لاگ بکاپ میگیریم



2-اولویت بندی کردن فایل گروپ ها که اول کدوم فایل گروپ رو Restore کنیم(در اینجا Sales_Main )



3-Restore کردن فایل گروپ primary (چون ما Best practice رو رعایت کردیم این مرحله سریع انجام میشه و دیتابیس آنلاین میشه)



4-Restore کردن فایل گروپ Sales_Main



5-Restore کردن لاگ بکاپ(دم لاگ)




01USE MASTER
02GO
03
04BACKUP LOG [Sales]
05TO DISK = N'G:SQL BackupSales_log_tail.bak'
06WITH NORECOVERY, NO_TRUNCATE
07GO
08
09
10RESTORE DATABASE [Sales]
11FILEGROUP='Primary'
12FROM DISK = N'G:SQL BackupSales_Primary_FG.bak'
13WITH PARTIAL, NORECOVERY
14
15RESTORE DATABASE [Sales]
16FILEGROUP='Sales_Main'
17FROM DISK = N'G:SQL BackupSales_Sales_Main_FG.bak'
18WITH NORECOVERY
19
20RESTORE LOG [Sales]
21FROM DISK = N'G:SQL BackupSales_log_tail.bak'
22WITH RECOVERY
23GO


در این لحظه Sales_Main آماده استفاده است

توجه کنید هرگونه تلاش برای استفاده از جداول فایل گروپ Sales_Archive با ارور زیر مواجه میشود

1Msg 8653, Level 16, State 1, Line 1
2The query processor is unable to produce a plan for the table or view
3'table_2' because the table resides in a filegroup which is not online.


خوب از اینجا به بعد ما میتونیم بصورت موازی که سیستم در دسترس کاربران هست اقدام به Restore کردن مابقی فایل گروپ ها بکنیم

01RESTORE DATABASE [Sales]
02FILEGROUP='Sales_Archive'
03FROM DISK = N'G:SQL BackupSales_Sales_Archive_FG.bak'
04WITH NORECOVERY
05GO
06
07RESTORE LOG [Sales]
08FROM DISK = N'G:SQL BackupSales_log_tail.bak'
09WITH RECOVERY
10GO


ضمنا اگه برای دیگر فایل گروپ های ما مشکلی پیش نیومده میتونیم از دستور زیر استفاده کنیم



1RRESTORE DATABASE [Sales] FILEGROUP='Sales_Archive' WITH RECOVERY


برچسب ها
لینک کوتاه پست
مطالب مرتبط با پست جاری
  • نکات مهم
    1- لطفا نظر خود را با زبان فارسی بیان کنید
    2- رایتم نظرات اسپم و تبلیغی شما را تایید نمی کند
    3- لطفا نظرات شما بدون ابهام و واضح باشد
  • نام
    ایمیل (منتشر نمی‌شود) (لازم)
    وبسایت
    :):(;):D;)):X:?:P:*=((:O@};-:B/:):S
    نظر خصوصی
    مشخصات شما ذخیره شود ؟[حذف مشخصات] [شکلک ها]
    کد امنیتی
به کانال تلگرام سایت ما بپیوندید