如何构建一个脚本来备份SQL Server中的所有数据库?

时间:2009-08-04 19:45:09

标签: sql sql-server sql-server-2005 scripting backup

我们需要在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

任何想法?

5 个答案:

答案 0 :(得分:2)

使用SqlBackupAndFTP。选择“备份所有非系统数据库”

答案 1 :(得分:1)

也许您可以查看sp_MSForEachDB存储过程。

EXEC sp_MSForEachDB 'EXEC sp_backup ?'

哪里? mark代表每次迭代的当前数据库。

答案 2 :(得分:1)

您也说“验证”......这需要每个数据库发送第2条语句(RESTORE VERIFYONLY,以及提供的其他答案。

我正在调查使用maintenance plans来包含索引维护......

答案 3 :(得分:0)

类似的东西:

DECLARE @SQL varchar(max)
SET @SQL = ''

SELECT @SQL = @SQL + 'BACKUP ' + Name + ' To Disk=''c:\' + Name + '.bak'';'
    FROM sys.sysdatabases

EXEC(@SQL)

答案 4 :(得分:0)

SQL Backup Master能够备份给定服务器实例上的所有数据库,然后将备份发送到Dropbox,FTP,Amazon S3,Google Drive或本地/网络文件夹。