یکی از چالش هایی که مدیران پایگاه داده بصورت مداوم با آن مواجه می باشند، پشتیبان گیری و بازگردانی دیتابیس ها می باشد. روش های مختلفی مانند نرم افزارهای جانبی، job نرم افزار sql و کوئری های مختلف برای اینکه پشتیبان گیری بصورت خودکار انجام شود وجود دارد، اما جهت بازگردانی دیتابیس ها اغلب بصورت تکی و با انجام چندین مرحله عملیات صورت می گیرد و در صورتیکه تعداد زیادی دیتابیس را بخواهید بازگردانی کنید، مجبور خواهید بود این مراحل را برای هر دیتابیس بصورت مجزا انجام دهید.
در این مقاله و با روش ذکر شده می توان تنها با خواندن محتویات یک دایرکتوری که برای فایل های پشتیبان وجود دارد، بازگردانی را انجام داد و بصورت همزمان و با اجرای یک کوئری کلیه دیتابیس های موجود در یک دایرکتوری را بازگردانی نمود.
جهت اجرای این کوئری به موارد زیر توجه نمائید:
مسیر فایل های پشتیبان جایگزین C:\Backup\ در متغیرهای Path و Path3 می شود.
عدد ۱۰ حداکثر تعداد دیتابیس هایی که می خواهید بازگردانی کنید را مشخص می کند که می توانید آن را مطابق نیاز افزایش یا کاهش دهید.
توجه داشته باشید نام فایل های بکآپ و نام دیتابیس ها در صورتیکه قبلا در sql سرور وجود دارند لازم است یکسان باشد.
روش کار:
Sql Server Management را باز نموده و مطابق نیاز به لوکال یا سرور مورد نظر connect شوید.
گزینه New Query در منو بالای نرم افزار mssql را انتخاب نمائید.
کوئری زیر را کپی نمائید.
با توجه به موارد ذکر شده در مورد مسیر دهی و تعداد دیتابیس تغییرات را ایجاد نمائید.
سپس کوئری را اجرا کنید.
پس از گذشت مدت زمانی که بستگی به تعداد و حجم دیتابیس ها دارد، بازگردانی انجام خواهد شد.
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
۲۰
۲۱
۲۲
۲۳
۲۴
۲۵
۲۶
۲۷
۲۸
۲۹
۳۰
۳۱
۳۲
۳۳
|
Use [master]
CREATE TABLE myFileList (FileNumber INT IDENTITY,FileName VARCHAR(۲۵۶))
--Insert file list from directory to SQL Server
DECLARE @Path varchar(۲۵۶) = 'dir C:\Backup\'
DECLARE @Path3 varchar(256) = 'C:\Backup\'
DECLARE @Path2 varchar(۲۵۶)
DECLARE @Command varchar(۱۰۲۴) = @Path + ' /A-D /B'
INSERT INTO myFileList
EXEC MASTER.dbo.xp_cmdshell @Command
Declare @bakdbname varchar(۲۵۶)
Declare @dbname varchar(۲۵۶)
Declare @numberdb int
Declare @mainlen int
set @numberdb=۱
--Check the list
while (@numberdb < ۱۰)
begin
set @bakdbname = (SELECT FileName FROM myFileList where FileNumber = @numberdb)
print @bakdbname
set @mainlen = Len(@bakdbname)
set @dbname = left(@bakdbname,@mainlen - ۴)
print @dbname
SET @Path2 = @Path3 + @bakdbname ;
print @Path2
ALTER DATABASE [@dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE @dbname FROM DISK = @Path2 WITH FILE = ۱, NOUNLOAD, REPLACE, STATS = ۵
ALTER DATABASE [@dbname] SET MULTI_USER
set @numberdb=@numberdb + ۱
END
GO
--Clean up
DROP TABLE myFileList
GO
|