Netbackup恢复SQL Server能否直接恢复多个数据库?

备份SQL Server数据库的时候是所有库都备份,有没有什么方法,在恢复的时候,直接恢复所有数据库,而不是一个一个执行。把脚本写到一起之后,也会只执行第一段内容。

参与5

1同行回答

wangqlwangql系统工程师NULL
不能,得一个个来显示全部

不能,得一个个来

收起
IT咨询服务 · 2023-10-19

ChatGPT 回答

在备份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

这样就可以一次性恢复所有数据库了。如果在执行脚本时只执行了第一段内容,可能是因为脚本中存在语法错误或者逻辑错误,需要仔细检查脚本并进行调试。

提问者

zhenyu6688
运维工程师中亦安图
擅长领域: 备份存储软件定义存储

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2023-10-18
  • 关注会员:2 人
  • 问题浏览:1358
  • 最近回答:2023-10-19
  • X社区推广