还原多个SQL Server .bak文件

时间:2012-04-12 07:08:59

标签: sql sql-server-2008 stored-procedures

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

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

2 个答案:

答案 0 :(得分: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



尝试这样的事情。

答案 1 :(得分:0)

  1. 我猜数据库名称不会写入.bak文件。不知道如何通过脚本进行检索。您可以对已还原的数据库使用文件名或任何其他临时名称,并在还原后将其重命名为SSMS。
  2. 请注意.bak文件可能包含DIFF备份。在DIFF备份的情况下,它将无法正常工作 - 一个接一个。
  3. 如果文件夹包含FULL BACKUP和TRANSACTION LOG备份,则始终最好在SSMS中使用备份历史记录恢复数据库。
  4. 让我们谈谈从多个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,长度($ 1)-4)用于从文件名中剪切“.BAK”

    按以下方式构建输出脚本:

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

    ..并进行审核。

    也许有可能做这个powershell方式。不知道。

    http://gnuwin32.sourceforge.net/packages/gawk.htm

    下载GAWK