备份SQL Server数据库的时候是所有库都备份,有没有什么方法,在恢复的时候,直接恢复所有数据库,而不是一个一个执行。把脚本写到一起之后,也会只执行第一段内容。
在备份SQL Server数据库时,可以使用Maintenance Plan或者SQL Server Agent Job来完成。如果使用Maintenance Plan,可以在“Back Up Database Task”中选择“All databases”来备份所有数据库。如果使用SQL Server Agent Job,可以在“Steps”中使用T-SQL脚本来备份所有数据库,如下所示:
DECLARE @name VARCHAR(50) -- 数据库名称
DECLARE @path VARCHAR(256) -- 备份路径
DECLARE @fileName VARCHAR(256) -- 备份文件名
DECLARE @fileDate VARCHAR(20) -- 备份日期
SET @path = 'D:\Backup\' -- 备份路径
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') -- 排除系统数据库
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
在恢复数据库时,可以使用T-SQL脚本来恢复所有数据库,如下所示:
DECLARE @name VARCHAR(50) -- 数据库名称
DECLARE @path VARCHAR(256) -- 备份路径
DECLARE @fileName VARCHAR(256) -- 备份文件名
SET @path = 'D:\Backup\' -- 备份路径
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') -- 排除系统数据库
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.BAK'
RESTORE DATABASE @name FROM DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
这样就可以一次性恢复所有数据库了。如果在执行脚本时只执行了第一段内容,可能是因为脚本中存在语法错误或者逻辑错误,需要仔细检查脚本并进行调试。