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 を使用します。 これらのツールを使用してデータベースをバックアップする方法の詳細については、次のリンクを参照してください。

この記事では、Transact-SQL スクリプトをタスク スケジューラと共に使用して、定期的に SQL Server Express データベースのバックアップを自動化する方法について説明します。

注:

これは、SQL Server Express エディションのみに適用され、SQL Server Express LocalDB には適用されません。

詳細情報

Windows タスク スケジューラを使用して SQL Server データベースをバックアップするには、次の 4 つの手順を実行する必要があります。

手順 A: データベースをバックアップするストアド プロシージャを作成します。

SQL Express インスタンスに接続し、次の場所にあるスクリプトを使用して、マスター データベースに sp_BackupDatabases ストアド プロシージャを作成します。

SQL_Express_Backups

手順 B: SQLCMD ツールをダウンロードします (該当する場合)。

この sqlcmd ユーティリティを使用すると、Transact-SQL ステートメント、システム プロシージャ、スクリプト ファイルを入力できます。 SQL Server 2014 以前のバージョンでは、ユーティリティは製品の一部として出荷されています。 SQL Server 2016 以降、sqlcmdユーティリティは別のダウンロードとして提供されます。 詳細については、「sqlcmd ユーティリティ」を参照してください。

手順 C: テキスト エディターを使用してバッチ ファイルを作成します。

テキスト エディターで、Sqlbackup.bat という名前のバッチ ファイルを作成し、シナリオに応じて、次の例のいずれかのテキストをそのファイルにコピーします。

  • 以下のすべてのシナリオでは、D:\SQLBackups をプレース ホルダーとして使用します。 スクリプトは、環境内の適切なドライブとバックアップ フォルダーの場所に調整する必要があります。

  • SQL 認証を使用している場合は、パスワードがクリア テキストで保存されるため、フォルダーへのアクセスが許可されたユーザーに制限されていることを確認してください。

注:

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'"

注:

SQLLogin には、少なくとも SQL Server の Backup Operator ロールが必要です。

例 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' を貼り付け、 @backupType パラメーターに 'L' を貼り付けることで USERDB のログ バックアップを貼り付けることで、USERDB の差分 バックアップを作成 できます。

手順 D: Windows タスク スケジューラを使用してジョブをスケジュールし、手順 B で作成したバッチ ファイルを実行します。これを行うには、次の手順を実行します。

  1. SQL Server Express実行しているコンピューターで、[スタート] をクリックし、テキスト ボックスに「Task Scheduler」と入力します。

    [スタート] メニューの検索バーにあるタスク スケジューラ デスクトップ アプリ オプションのスクリーンショット。

  2. [ 最適な一致] で、[ タスク スケジューラ ] をクリックして起動します。

  3. タスク スケジューラで、[ タスク スケジュール ライブラリ ] を右クリックし、[ Create Basic task...]\(基本的なタスクの作成\) をクリックします。

  4. 新しいタスクの名前 (例: SQLBackup) を入力し、[次へ] をクリックします。

  5. タスク トリガーの [ 毎日 ] を選択し、[ 次へ] をクリックします。

  6. 繰り返しを 1 日に設定し、[ 次へ] をクリックします。

  7. アクションとして [ プログラムの開始 ] を選択し、[ 次へ] をクリックします。

  8. [参照]をクリックし、手順Cで作成したバッチ ファイルをクリックし、[開く]をクリックします。

  9. [完了]をクリックするときに、[このタスクの [プロパティ] ダイアログを開く]チェック ボックスをオンにします。

  10. [全般] タブで。

    1. [セキュリティ] オプションを確認し、タスクを実行しているユーザー アカウントに対して次のことを確認します (タスクの実行時に、次のユーザー アカウントをユーザーに示します)。

      sqlcmd ユーティリティを起動するには、少なくとも読み取りアクセス許可と実行アクセス許可がアカウントに必要です。 その他、次の作業が必要になります。

      • バッチ ファイルで Windows 認証を使用する場合は、SQL バックアップを実行するためのタスクのアクセス許可の所有者を確認します。

      • バッチ ファイルで SQL 認証を使用する場合、SQL ユーザーは SQL バックアップを実行するために必要なアクセス許可を持っている必要があります。

    2. 必要に応じて他の設定を調整します。

ヒント

テストとして、タスクを所有するのと同じユーザー アカウントで起動されたコマンド プロンプトから、手順 C のバッチ ファイルを実行します。

この記事に記載されている手順を使用する場合は、次の点に注意してください。

  • タスク スケジューラ サービスは、ジョブの実行がスケジュールされているときに実行されている必要があります。 このサービスのスタートアップの種類を [自動] に設定することをお勧めします。 これにより、再起動してもサービスが確実に実行されます。

  • バックアップが書き込まれるドライブには、十分なスペースが必要です。 古いファイルをバックアップ フォルダーに定期的にクリーンして、ディスク領域が不足しないようにすることをお勧めします。 スクリプトには、古いファイルをクリーンアップするロジックが含まれていません。

関連情報

タスク スケジューラの概要