すべてのSQL Serverデータベースをバックアップするためのバッチスクリプト
SQL Serverデータベースをコマンドラインからバックアップする方法については既に説明しました。すべてのデータベースを一度にバックアップする場合はどうなりますか。データベースごとにバックアップコマンドを実行するバッチスクリプトを作成できますが、このスクリプトはデータベースが追加または削除されるたびに更新する必要があります。さらに、データベースのバックアップはすべて1つのファイルに追加され、実行されるたびに新しいバックアップのサイズが大きくなります。代わりに、実際には「設定して忘れる」方法で、新しいデータベースが追加および削除されたときにSQL Serverに適応するバッチスクリプトを作成します。.
簡単に言うと、これはバックアップスクリプトです。
@ECHO OFF
SETLOCALREM日付をYYYY-MM-DDの形式で取得します(ロケールはアメリカ合衆国です)。
FOR / F“ tokens = 1,2,3,4 delims = /” %% A IN( '日付/ T')DO SET NowDate = %% D - %% B - %% CREMバックアップするデータベースのリストを作成する
SET DBList =%SystemDrive%SQLDBList.txt
SqlCmd -E -S MyServer -h-1 -W -Q“ SET NoCount ON; SELECT name from master.dbo.sysDatabases [名前] NOT IN( 'master'、 'model'、 'msdb'、 'tempdb')”>“%DBList%”REM各データベースをバックアップし、ファイル名の前に日付を付けます。
FOR / F“ tokens = *” %% I IN(%DBList%)DO(
ECHOデータベースのバックアップ中:%% I
SqlCmd -E -S MyServer -Q「データベースのバックアップデータベース[%% I] = "D:バックアップ%NowDate%_ %% I.bak"」
エコー.
)REM一時ファイルをクリーンアップする
“%DBList%”が存在する場合DEL / F / Q“%DBList%”ENDLOCAL
日付が2009年1月13日で、 'MyDB'、 'AnotherDB'、 'DB Name with Spaces'という3つのデータベースがあるとすると、スクリプトは指定されたバックアップの場所に3つのファイルを作成します。
- 2009-01-13_その他DB.bak
- 2009-01-13_DB Spaces.bakの名前
- 2009-01-13_MyDB.bak
バッチスクリプトのカスタマイズと実行
もちろん、あなたは自分の環境に合わせてスクリプトをカスタマイズしたいと思うでしょう。
- あなたのマシンのロケールが米国に設定されていない場合、 'Date / T'コマンドは日付を“ Tue 01/13/2009”の形式で返さないかもしれません。この場合、NowDate変数は目的のフォーマットを生成しないので調整する必要があります。 (1か所)
- MyServerをSQL Serverの名前に変更します(該当する場合はインスタンス名を追加します)。 (2か所)
- 'master'、 'model'、 'msdb'および 'tempdb'という名前のデータベースは、SQL Serverに同梱されているデータベースです。バックアップしたくない場合は、このリストにデータベース名を追加することができます。 (1か所)
- バックアップの場所を「D:Backup」からデータベースのバックアップファイルを保存する場所に変更します。.
バッチスクリプトをカスタマイズしたら、Windowsタスクスケジューラを介して管理者権限を持つユーザーとして実行するようにスケジュールします。.