SQL Server veritabanını saklı bir prosedürden geri yüklemek için dinamik bir komut dosyası
Daha geniş bir bakım planının parçası olarak bir dizi parametreyi kullanarak veritabanlarını geri yükleyebilen dinamik SQL komut dosyası kullanarak merkezi, genel ve yeniden kullanılabilir bir saklı yordam oluşturun
İşlem
Bir veritabanını geri yükleme işlemi, SSMS'den komut dosyası oluşturulabilir. Bu bir Saklı Prosedüre kaydedildiğinde, diğer işlenmiş veya sunuculardan çağrılabilir ve özellikle birleştirilmiş bakım planının bir parçası olarak kullanışlıdır.
Aşağıda iki komut dosyası oluşturduk.
Basit komut dosyası ile SSMS'den oluşturulan kodu kullanın ve Saklı Yordamın içeriğini değiştirin.
Genel komut dosyasıyla, değişkenler kullanılarak tek veritabanları geri yüklenebilir, yani onu yeniden kullanabilirsiniz.
Simple Script
USE [utilities]GOCREATE PROC [maint].RestoreDatabase_{dbname} AS BEGINRESTORE 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'ENDGO
Yeniden kullanılabilir komut dosyası
Bu komut dosyası, başka bir yerden çağrılabilmesi için bir dizi parametre kullanır, böylece gerekirse yeniden kullanılabilir ve ç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 gönderimi düşünülerek geliştirilmiştir, bu nedenle ana veritabanınızdan raporlama veritabanına geri yükleme yapmak için kullanılabilir
SQL
USE [utilities]GOCREATE PROC [maint].RestoreDatabase(@dbname NVARCHAR(100),@Directory_Bak NVARCHAR(100),@Directory_Dat NVARCHAR(100),@Directory_Log NVARCHAR(100),@Directory_Stand BIT) AS BEGINDECLARE @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 CodeIF ISNULL(@Directory_Bak,'')<>''SET @SQL=@SQL+',STANDBY=N'''+@Directory_Stand+'ROLLBACK_UNDO_'+@dbname+'.bak'''EXEC master..sp_executesql @SQLENDGO