SQL Tüm databaseler için Backup-Restore Scripti Oluşturmak

Aşağıdaki scriptle tüm user databaselerini yedek alıp, kopyalacağınız sunucuda istediğiniz dizine restore etmek için script oluşturabilirsiniz. Kaynak sunucuda backup scripti, hedef sunucuda restore scripti çalıştırılmalı, eğer aynı sunucu üzerinde backup restore yapıyorsanız her iki outputda aynı sunucuda çalıştırılır. Prod ortamdan alınan backupları test ortamına restore etmek için işinize yarayabilir.

Backupların alınacağı pathi, restore için datafile pathini ve log filelar için dosya pathini değiştirin.

DECLARE @date CHAR(8)
SET @date = (SELECT CONVERT(char(8), GETDATE(), 112))
DECLARE @backup_path VARCHAR(125),@data_restore_path VARCHAR(250),@log_restore_path VARCHAR(250)
SET @backup_path = 'D:\SQLBackup\' ---- Source ve Target sunucuda backupların alınacağı ve kopyalanacağı dizin
SET @data_restore_path = 'D:\SQLData\' ---- Target sunucuda data dosyalarının restore olacağı dizin
SET @log_restore_path = 'E:\SQLLog\' ---- Target sunucuda log dosyalarının restore olacağı dizin.
;WITH MoveCmdCTE ( DatabaseName, MoveCmd )
AS ( SELECT DISTINCT
DB_NAME(database_id) ,
STUFF((SELECT ' ' + CHAR(13)+', MOVE ''' + name + ''''
+ CASE Type
WHEN 0 THEN ' TO ''' + @data_restore_path +''
ELSE ' TO ''' + @log_restore_path + ''
END
+ REVERSE(LEFT(REVERSE(physical_name),
CHARINDEX('\',
REVERSE(physical_name),
1) - 1)) + ''''
FROM sys.master_files sm1
WHERE sm1.database_id = sm2.database_ID
and sm2.database_id >4 
FOR XML PATH('') ,
TYPE).value('.', 'varchar(max)'), 1, 1, '') AS MoveCmd
FROM sys.master_files sm2
where sm2.database_id > 4 )
SELECT
'BACKUP DATABASE ' + name + ' TO DISK = ''' + @backup_path + '' + name + '_' + @date + '.bak'' WITH COMPRESSION, STATS=5' as script_backup_all_databases,
'RESTORE DATABASE '+ name + ' FROM DISK = ''' + @backup_path + '' + name + '_' + @date + '.bak'' WITH RECOVERY, REPLACE, STATS=5 ' + movecmdCTE.MoveCmd as script_restore_all_databases
FROM sys.databases d
INNER JOIN MoveCMDCTE ON d.name = movecmdcte.databasename
WHERE d.name LIKE '%' ----- Sadece belirli databaseler için yapılacaksa buraya belirtin..
GO

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir