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 にのみ適用されます。
SQL Express でスケジュールされたバックアップを作成する方法
Windows タスク スケジューラを使用して SQL Server データベースをバックアップするには、次の 4 つの手順に従う必要があります。
手順 1: データベースをバックアップするストアド プロシージャを作成する
SQL Express インスタンスに接続し、次の場所にあるスクリプトを使用してマスター データベースに sp_BackupDatabases
ストアド プロシージャを作成します。
手順 2: SQLCMD クライアント ユーティリティをダウンロードする
sqlcmd
ユーティリティを使用すると、Transact-SQL ステートメント、システム プロシージャ、スクリプト ファイルを入力できます。 SQL Server 2014 以前のバージョンでは、ユーティリティは製品の一部として出荷されます。 SQL Server 2016 以降では、 sqlcmd
ユーティリティは別のダウンロードとして提供されます。 詳細については、 sqlcmd ユーティリティを参照してください。
手順 3: テキスト エディターを使用してバッチ ファイルを作成する
テキスト エディターで、 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 のログ バックアップを作成できます。
手順 4: Windows タスク スケジューラを使用してジョブをスケジュールし、手順 2 で作成したバッチ ファイルを実行する
次のステップを実行します。
SQL Server Express を実行しているコンピューターで、 Start を選択し、テキスト ボックスに「 Task Scheduler 」と入力します。
[ Best matchで、 Task Scheduler を選択して起動します。
Task Scheduler で、Task Scheduler (Local) を右クリックし、 [基本タスクの作成] を選択。
新しいタスクの名前 (例: SQLBackup) を入力し、 [次へ] を選択します。
タスク トリガーの [ Daily を選択し、 次へを選択します。
繰り返しを 1 日に設定し、 次へを選択します。
アクションとして プログラムの開始 を選択し 次へを選択します。
Browseを選択し、Step 3 で作成したバッチ ファイルを選択し、Open を選択します。
[完了]をクリックしたときに、このタスクの[プロパティ]ダイアログボックスを開くチェックボックスをオンにします。
[ General タブで、次の手順を実行します。
セキュリティ オプションを確認しタスクを実行しているユーザー アカウントについて次のことを確認します (タスクを実行する場合は、次のユーザー アカウントを使用します:)
sqlcmd
ユーティリティを起動するには、アカウントに少なくとも読み取りと実行のアクセス許可が必要です。 さらに、バッチ ファイルで Windows 認証を使用する場合は、タスク所有者が SQL バックアップを実行するアクセス許可を持っていることを確認します。
バッチ ファイルで SQL 認証を使用する場合、SQL ユーザーは SQL バックアップを実行するために必要なアクセス許可を持っている必要があります。
要件に応じて他の設定を調整します。
ヒント
テストとして、タスクを所有する同じユーザー アカウントで開始されたコマンド プロンプトから、 Step 3 からバッチ ファイルを実行します。
要件
この記事に記載されている手順を使用する場合は、次の要件に注意してください。
タスク スケジューラ サービスは、ジョブの実行がスケジュールされている時点で実行されている必要があります。 このサービスのスタートアップの種類を Automatic として設定することをお勧めします。 これにより、再起動時でもサービスが実行されるようになります。
バックアップが書き込まれるドライブに十分な領域を作成する必要があります。 ディスク領域が不足しないように、 Backup フォルダー内の古いファイルを定期的にクリーンアップすることをお勧めします。 スクリプトには、古いファイルをクリーンアップするためのロジックは含まれません。