SQL Server Express での SQL Server データベースのバックアップのスケジュール設定と自動化
この記事では、Transact-SQL スクリプトと Windows タスク スケジューラを使用して、スケジュールに基づいて SQL Server Express データベースのバックアップを自動化する方法について説明します。
元の製品バージョン: SQL Server
元の KB 番号: 2019698
まとめ
SQL Server Express エディションでは、SQL Server エージェント コンポーネントがこれらのに含まれていないため、ジョブまたはメンテナンス プランをスケジュールする方法はありません。 そのため、これらのエディションを使用する場合は、データベースをバックアップするために別の方法を使用する必要があります。
現在、SQL Server Express ユーザーは、次のいずれかの方法を使用してデータベースをバックアップできます。
SQL Server Management Studio または Azure Data Studio を使用します。 これらのツールを使用してデータベースをバックアップする方法の詳細については、次のリンクを参照してください。
BACKUP DATABASE のコマンド ファミリを使用する Transact-SQL スクリプトを使用します。 詳細については、「BACKUP (Transact-SQL)」を参照してください。
この記事では、タスク スケジューラと共に Transact-SQL スクリプトを使用して、スケジュールに基づいて SQL Server Express データベースのバックアップを自動化する方法について説明します。
Note
これは、SQL Server Express LocalDB ではなく、SQL Server Express Edition にのみ適用されます。
詳細
Windows タスク スケジューラを使用して SQL Server データベースをバックアップするには、次の 4 つの手順に従う必要があります。
手順 A: データベースをバックアップするストアド プロシージャを作成します。
SQL Express インスタンスに接続し、次の場所にあるスクリプトを使用して、マスター データベースにsp_BackupDatabasesストアド プロシージャを作成します。
手順 B: SQLCMD ツールをダウンロードします (該当する場合)。
sqlcmd
ユーティリティを使用すると、Transact-SQL ステートメント、システム プロシージャ、スクリプト ファイルを入力できます。 SQL Server 2014 以前のバージョンでは、ユーティリティは製品の一部として出荷されます。 SQL Server 2016 以降では、 sqlcmd
ユーティリティは別のダウンロードとして提供されます。 詳細については、 sqlcmd ユーティリティを参照してください。
手順 C: テキスト エディターを使用してバッチ ファイルを作成します。
テキスト エディターで、 Sqlbackup.batという名前のバッチ ファイルを作成し、シナリオに応じて次のいずれかの例のテキストをそのファイルにコピーします。
以下のすべてのシナリオでは、
D:\SQLBackups
をプレース ホルダーとして使用します。 スクリプトは、環境内の適切なドライブとバックアップ フォルダーの場所に調整する必要があります。SQL 認証を使用している場合は、パスワードがクリア テキストで格納されるため、フォルダーへのアクセスが承認されたユーザーに制限されていることを確認します。
Note
SQLCMD
実行可能ファイルのフォルダーは、通常、SQL Server をインストールした後、またはスタンドアロン ツールとしてインストールした後に、サーバーの Path 変数に含まれます。 ただし、Path 変数にこのフォルダーが一覧表示されない場合は、その場所を Path 変数に追加するか、ユーティリティへの完全なパスを指定できます。
例 1: Windows 認証を使用した SQLEXPRESS のローカル名前付きインスタンス内のすべてのデータベースの完全バックアップ。
// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @backupType='F'"
例 2: SQLLogin とそのパスワードを使用した、SQLEXPRESS のローカルの名前付きインスタンス内のすべてのデータベースの差分バックアップ。
// Sqlbackup.bat
sqlcmd -U <YourSQLLogin> -P <StrongPassword> -S .\SQLEXPRESS -Q "EXEC sp_BackupDatabases @backupLocation ='D:\SQLBackups', @BackupType='D'"
Note
SQLLogin には、少なくとも SQL Server のバックアップ オペレーター ロールが必要です。
例 3: Windows 認証を使用した SQLEXPRESS のローカル名前付きインスタンス内のすべてのデータベースのログ バックアップ
// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\',@backupType='L'"
例 4: Windows 認証を使用した SQLEXPRESS のローカル名前付きインスタンスでのデータベース USERDB の完全バックアップ
// Sqlbackup.bat
sqlcmd -S .\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='D:\SQLBackups\', @databaseName='USERDB', @backupType='F'"
同様に、 @backupType パラメーターに 'D' を貼り付けて USERDB の差分バックアップを作成し、 @backupType パラメーターに 'L' を貼り付けることで USERDB のログ バックアップを作成できます。
手順 D: Windows タスク スケジューラを使用してジョブをスケジュールし、手順 B で作成したバッチ ファイルを実行します。これを行うには、次の手順に従います。
SQL Server Express を実行しているコンピューターで、 Start をクリックし、テキスト ボックスに「 task Scheduler」と入力します。
[一致タスク スケジューラクリックして起動します。
タスク スケジューラで、 Task Schedule Library を右クリックし、 Create Basic タスク... をクリックします。
新しいタスクの名前 (例: SQLBackup) を入力し、[次へ ] をクリック。
タスク トリガー Daily を選択し、[次へ ] をクリック。
繰り返しを 1 日に設定し、[次へ] をクリック。
アクションとして プログラムの開始 を選択し、[次へ ] をクリック。
[ Browseをクリックし、手順 C で作成したバッチ ファイルをクリックし、[開く ] をクリック。
[ Finish をクリックすると、このタスクの [プロパティ] ダイアログ ボックスをオンにします。
[全般] タブで、
[セキュリティ] オプションを確認し、タスクを実行しているユーザー アカウントに対して次のことを確認します ([タスクの実行時に、ユーザーは次のユーザー アカウント] の下に表示されます)。
sqlcmd ユーティリティを起動するには、アカウントに少なくとも読み取りと実行のアクセス許可が必要です。 さらに、
バッチ ファイルでWindows 認証を使用する場合は、タスクの所有者が SQL バックアップを実行するためのアクセス許可を持っていることを確認します。
バッチ ファイルで SQL 認証を使用する場合、SQL ユーザーは SQL バックアップを実行するために必要なアクセス許可を持っている必要があります。
要件に応じて他の設定を調整します。
ヒント
テストとして、タスクを所有する同じユーザー アカウントで開始されたコマンド プロンプトから、手順 C のバッチ ファイルを実行します。
この記事に記載されている手順を使用する場合は、次の点に注意してください。
タスク スケジューラ サービスは、ジョブの実行がスケジュールされている時点で実行されている必要があります。 このサービスのスタートアップの種類を Automatic として設定することをお勧めします。 これにより、再起動時でもサービスが実行されるようになります。
バックアップの書き込み先となるドライブには、多くの領域が必要です。 ディスク領域が不足しないように、バックアップ フォルダー内の古いファイルを定期的にクリーンアップすることをお勧めします。 スクリプトには、古いファイルをクリーンアップするためのロジックが含まれていません。