我们需要在一个 MS SQL Server 引擎中备份 40 个数据库。我们使用以下脚本备份每个数据库:
BACKUP DATABASE [dbname1] TO DISK = N'J:\SQLBACKUPS\dbname1.bak' WITH NOFORMAT, INIT, NAME = N'dbname1-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'dbname1' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'dbname1' )
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''dbname1'' not found.', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'J:\SQLBACKUPS\dbname1.bak' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO
我们希望在脚本中添加获取每个数据库并在上述脚本中替换它的功能。基本上是一个脚本,它将从引擎创建和验证每个数据库备份。
我正在寻找这样的东西:
For each database in database-list
sp_backup(database) // this is the call to the script above.
End For
有任何想法吗?
您可以使用未记录的数据库循环过程来执行此操作。
就像是:
应该做的伎俩。
市场上还有许多产品为 SQL Server 提供了非常灵活的备份选项,如果您的脚本变得更复杂,这可能更适合生产使用(尽管它们无疑并不便宜)。
我知道这不是对您的问题的直接回应,因为您想要一些带有特定脚本的东西,但我想我把它扔在那里。
如果您有完整版的 MS SQL,而不是 MS SQL Express,则可以执行维护计划路线。这是来自 Sunbelt Software 的 PDF,它提供了一个很好的使用方法,您可以在此处选择要备份的数据库:SQL-2005-maintenance-plan.pdf
我会改进你的脚本:
然后用
最后,如果您需要一个循环,请在上面显示的 RUNSCRIPTS.bat 文件中使用类似这样的内容:
要生成 myfile.txt,您可能可以让 SQL 以某种方式生成它: