0

我有一个包含多个 .bak sql server 文件的文件夹。

我想将它们恢复到 sql server。我如何编写脚本以便可以立即恢复该文件夹中的所有备份文件。

4

2 回答 2

1
RESTORE DATABASE [db1] FROM  DISK = N'C:\folder\db1.bak' WITH  FILE = 1,  MOVE N'DB_Data' TO N'C:\folder\db2.mdf',  MOVE N'DB_log' TO N'C:\folder\db1.LDF',  NOUNLOAD,  STATS = 10
GO
RESTORE DATABASE [db2] FROM  DISK = N'C:\folder\db2.bak' WITH  FILE = 1,  MOVE N'DB_Data' TO N'C:\folder\db2.mdf',  MOVE N'DB_Log' TO N'C:\folder\db2.LDF',  NOUNLOAD,  STATS = 10
GO



尝试这样的事情。

于 2012-04-12T08:15:22.317 回答
0
  1. 我猜数据库名称没有写入 .bak 文件。不知道如何通过脚本检索。您可以使用文件名或任何其他临时名称来恢复数据库,并在恢复后在 SSMS 下重命名它。
  2. 请注意,.bak 文件可能包含 DIFF 备份。在 DIFF 备份的情况下,它不会像那样工作 - 一个一个。
  3. 如果文件夹包含 FULL BACKUP 和 TRANSACTION LOG 备份,最好使用 SSMS 中的备份历史记录开始还原数据库。

我们来谈谈从多个 BAK 文件中恢复多个数据库。我认为 GAWK 可能会有所帮助。这不是 MS 方式,但可能是最快的方式。

你知道GAWK吗?

让您使用文件名构建输入文件:

dir *.bak > input.txt

将 GAWK 程序写入文件 program.gawk.txt:

BEGIN {
printf "-- My auto-generated script \n"
}
{
printf "RESTORE DATABASE [substr($1,1,length($1)-4)] FROM DISK = N'$1 \n'"
printf "GO \n\n"
}
END {
printf "-- End of script"
}

尝试使用 substr 根据 BAK 文件名为恢复的数据库生成临时名称。不确定 substr 表达式是否正确 - 请检查自己。

  • $1 将从 input.txt 更改为文件名

  • substr($1,1,length($1)-4) 用于从文件名中剪切“.BAK”

通过以下方式构建输出脚本:

gawk --file=program.gawk.txt input.txt > my_script.sql

..并审查它。

也许有可能做到这一点。不知道。

从以下网址下载 GAWK:http: //gnuwin32.sourceforge.net/packages/gawk.htm

于 2012-04-12T10:56:45.307 回答