Depolanan bir prosedürden SQL Server veritabanını geri yüklemek için dinamik bir komut dosyası
İşlem

Bir veritabanını geri yükleme işlemi, SSMS'den komut dosyası olarak yazılabilir. Bu bir Depolanan Prosedüre kaydedildiğinde, diğer işlenmiş veya sunuculardan çağrılabilir ve özellikle birleştirilmiş bir bakım planının parçası olarak kullanışlıdır.
Aşağıda iki komut dosyası oluşturduk.
Basit komut dosyasıyla SSMS'den oluşturulan kodu kullanın ve Depolanan Prosedürün içeriğini değiştirin.
Genel komut dosyasıyla, tek veritabanları değişkenler kullanılarak geri yüklenebilir, bu da onu yeniden kullanabileceğiniz anlamına gelir.
Simple Script
USE [utilities]
GO
CREATE PROC [maint].RestoreDatabase_{dbname} AS BEGIN
RESTORE DATABASE [dbname] FROM DISK=N'c:\backupfolder\{dbname}.bak' WITH FILE= 1,
MOVE N'{dbname}' TO N'd:\database\{dbname}.mdf',
MOVE N'{dbname}_log' TO N'e:\database\{dbname}.ldf',
NOUNLOAD, REPLACE, STATS= 10,
STANDBY=N'e:\database\ROLLBACK_UNDO_{dbname}.bak'
END
GO
Yeniden kullanılabilir komut dosyası
Bu komut dosyası, başka bir yerden çağrılmasını sağlamak için bir dizi parametre kullanır, bu nedenle yeniden kullanılabilir ve gerekirse çapraz sunucu olarak adlandırılabilir.
- @dbname - Çağrılmasını istediğiniz veritabanı adı
- @Directory_Bak - Yedeklerin depolandığı klasör
- @Directory_Dat - Günlük dosyalarını ve veritabanı dosyalarını farklı disklerde tutmak en iyisidir, bu yüzden onu depolamak istediğiniz dizin budur
- @Directory_Log - Yukarıdaki gibi, günlük dosyanız için ayrı bir dizin kullanın
- @Directory_Stand - Bu, günlük sevkiyatı düşünülerek geliştirilmiştir, bu nedenle bu, ana veritabanınızdan raporlama veritabanına geri yükleme yapmak için kullanılabilir
SQL
USE [utilities]
GO
CREATE PROC [maint].RestoreDatabase(@dbname NVARCHAR(100),@Directory_Bak NVARCHAR(100),@Directory_Dat NVARCHAR(100),@Directory_Log NVARCHAR(100),@Directory_Stand BIT) AS BEGIN
DECLARE @SQL NVARCHAR(MAX)=
'RESTORE DATABASE ['+@dbname+'] FROM DISK=N'''+@Directory_Bak+''+@dbname+'.bak'' WITH FILE= 1,
MOVE N'''+@dbname+''' TO N'''+@Directory_Dat+@dbname+'.mdf'',
MOVE N'''+@dbname+'_log'' TO N'''+@Directory_Log+@dbname+'.ldf'',
NOUNLOAD, REPLACE, STATS=10'
--Standby Code
IF ISNULL(@Directory_Bak,'')<>''
SET @SQL=@SQL+',STANDBY=N'''+@Directory_Stand+'ROLLBACK_UNDO_'+@dbname+'.bak'''
EXEC master..sp_executesql @SQL
END
GO