簡體   English   中英

還原多個SQL Server .bak文件

[英]Restore multiple SQL Server .bak Files

我有一個包含多個.bak文件的sql server文件夾。

我想將它們還原到sql server。 我該如何做一個腳本,以便可以立即還原該文件夾中的所有備份文件。

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. 我猜數據庫名稱未寫入.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM