سرور مجازی لهستان با ترافیک نامحدود

بازگردانی همزمان دیتابیس های یک دایرکتوری

[ad_1]

یکی از چالش هایی که مدیران پایگاه داده بصورت مداوم با آن مواجه می باشند، پشتیبان گیری و بازگردانی دیتابیس ها می باشد. روش های مختلفی مانند نرم افزارهای جانبی، job نرم افزار sql و کوئری های مختلف برای اینکه پشتیبان گیری بصورت خودکار انجام شود وجود دارد، اما جهت بازگردانی دیتابیس ها اغلب بصورت تکی و با انجام چندین مرحله عملیات صورت می گیرد و در صورتیکه تعداد زیادی دیتابیس را بخواهید بازگردانی کنید، مجبور خواهید بود این مراحل را برای هر دیتابیس بصورت مجزا انجام دهید.

در این مقاله و با روش ذکر شده می توان تنها با خواندن محتویات یک دایرکتوری که برای فایل های پشتیبان وجود دارد، بازگردانی را انجام داد و بصورت همزمان و با اجرای یک کوئری کلیه دیتابیس های موجود در یک دایرکتوری را بازگردانی نمود.

جهت اجرای این کوئری به موارد زیر توجه نمائید:

مسیر فایل های پشتیبان جایگزین C:Backup در متغیرهای Path و Path3 می شود.

عدد ۱۰ حداکثر تعداد دیتابیس هایی که می خواهید بازگردانی کنید را مشخص می کند که می توانید آن را مطابق نیاز افزایش یا کاهش دهید.

توجه داشته باشید نام فایل های بکآپ و نام دیتابیس ها در صورتیکه قبلا در sql  سرور وجود دارند لازم است یکسان باشد.

روش کار:

Sql Server Management را باز نموده و مطابق نیاز به لوکال یا سرور مورد نظر connect شوید.

گزینه New Query در منو بالای نرم افزار mssql را انتخاب نمائید.

کوئری زیر را کپی نمائید.

با توجه به موارد ذکر شده در مورد مسیر دهی و تعداد دیتابیس تغییرات را ایجاد نمائید.

سپس کوئری را اجرا کنید.

پس از گذشت مدت زمانی که بستگی به تعداد و حجم دیتابیس ها دارد، بازگردانی انجام خواهد شد.

Use [master]
CREATE TABLE myFileList (FileNumber INT IDENTITY,FileName VARCHAR(256))
--Insert file list from directory to SQL Server
DECLARE @Path varchar(256) = 'dir C:Backup'
DECLARE @Path3 varchar(256) = 'C:Backup'
DECLARE @Path2 varchar(256)
DECLARE @Command varchar(1024) =  @Path + ' /A-D  /B'
INSERT INTO myFileList
EXEC MASTER.dbo.xp_cmdshell @Command
Declare @bakdbname varchar(256)
Declare @dbname varchar(256)
Declare @numberdb int
Declare @mainlen int
set @numberdb=1
--Check the list
while (@numberdb < 10)
begin
       set @bakdbname = (SELECT  FileName   FROM myFileList where FileNumber = @numberdb)
       print @bakdbname
       set  @mainlen = Len(@bakdbname)
       set @dbname = left(@bakdbname,@mainlen - 4)
       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 = 1,  NOUNLOAD,  REPLACE,  STATS = 5
       ALTER DATABASE [@dbname] SET MULTI_USER
    set @numberdb=@numberdb + 1
END
GO
--Clean up
DROP TABLE myFileList
GO

[ad_2]

لینک منبع