0

SQLServerの複数の.bakファイルを含むフォルダーがあります。

それらをSQLサーバーに復元したいと思います。そのフォルダからバックアップされたすべてのファイルを一度に復元できるようにスクリプトを実行するにはどうすればよいですか。

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バックアップの場合、1つずつそのようには機能しません。
  3. フォルダに完全バックアップとトランザクションログのバックアップが含まれている場合は、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

..そしてそれを確認します。

たぶん、このPowerShellの方法を実行することは可能です。わからない。

GAWKをhttp://gnuwin32.sourceforge.net/packages/gawk.htmからダウンロードします。

于 2012-04-12T10:56:45.307 に答える