SQL Server のバックアップと復元操作のトラブルシューティング
この記事では、Microsoft SQL Server のバックアップおよび復元操作中に発生する可能性がある一般的な問題の解決策と、これらの操作に関する詳細情報への参照を提供します。
元の製品バージョン: SQL Server
元の KB 番号: 224071
バックアップと復元の操作に時間がかかる
バックアップと復元の操作は I/O を集中的に実行します。 バックアップと復元のスループットは、基になる I/O サブシステムが I/O の量を処理するように最適化されているかどうかによって異なります。 バックアップ操作が停止しているか、完了に時間がかかりすぎることが疑われる場合は、次の 1 つ以上の方法を使用して、完了までの時間を見積もったり、バックアップ操作または復元操作の進行状況を追跡したりできます。
SQL Server エラー ログには、以前のバックアップ操作と復元操作に関する情報が含まれています。 これらの詳細を使用して、データベースを現在の状態でバックアップおよび復元するために必要な時間を見積もることができます。 エラー ログからの出力例を次に示します。
RESTORE DATABASE successfully processed 315 pages in 0.372 seconds (6.604 MB/sec)
SQL Server 2016 以降のバージョンでは、XEvent backup_restore_progress_trace を使用してバックアップ操作と復元操作の進行状況を追跡できます。
sys.dm_exec_requestsの
percent_complete
列を使用して、実行中のバックアップ操作と復元操作の進行状況を追跡できます。Device throughput Bytes/sec
とBackup/Restore throughput/sec
パフォーマンス モニター カウンターを使用して、バックアップと復元のスループット情報を測定できます。 詳細については、「 SQL サーバー、バックアップ デバイス オブジェクト」を参照してください。estimate_backup_restore スクリプトを使用して、バックアップ時間の見積もりを取得します。
「 しくみ: 復元/バックアップとは何ですか?を参照してください。 このブログ記事では、バックアップ操作または復元操作の現在のステージに関する分析情報を提供します。
チェックする項目
次の表に示す既知の問題が発生しているかどうかを確認します。 変更を実装するか、対応する記事で説明されている修正プログラムとベスト プラクティスを適用するかを検討します。
ナレッジ ベースまたはオンライン ブックのリンク 説明と推奨されるアクション SQL Server でのバックアップと復元のパフォーマンスの最適化 オンライン ブックのトピックでは、バックアップ/復元操作のパフォーマンスを向上させるために使用できるさまざまなベスト プラクティスについて説明します。 たとえば、SQL Server を実行している Windows アカウントに SE_MANAGE_VOLUME_NAME
特別な特権を割り当てて、データ ファイルの瞬時初期化を有効にすることができます。 これにより、パフォーマンスが大幅に向上する可能性があります。2920151 Windows Server 2012 R2 ベースのフェールオーバー クラスターに推奨される修正プログラムと更新プログラム
2822241 Windows 8 および Windows Server 2012 更新プログラムのロールアップ: 2013 年 4 月現在のシステム ロールアップには、SQL Server などのプログラムのパフォーマンスを低下させる可能性がある、システム レベルでの既知の問題の修正プログラムを含めることができます。 これらの更新プログラムをインストールすると、このような問題を防ぐことができます。 2878182修正: アプリケーションのユーザー モード プロセスが Windows Server 2012 を実行しているサーバーで応答しない バックアップ操作は I/O 集中型であり、このバグの影響を受ける可能性があります。 これらの問題を防ぐために、この修正プログラムを適用します。 SQL Server で動作するようにウイルス対策ソフトウェアを構成する ウイルス対策ソフトウェアは、.bakファイルのロックを保持することがあります。 これは、バックアップ操作と復元操作のパフォーマンスに影響する可能性があります。 ウイルス スキャンからバックアップ ファイルを除外するには、この記事のガイダンスに従ってください。 2820470 Windows に存在しなくなった共有フォルダーにアクセスしようとすると、遅延エラー メッセージが表示される Windows 2012 以降のバージョンに存在しなくなった共有フォルダーにアクセスしようとすると発生する問題について説明します。 967351 NTFS ボリューム内の断片化が多いファイルは、特定のサイズを超えて拡張されない可能性があります NTFS ファイル システムが大きく断片化されている場合に発生する問題について説明します。 304101 バックアップ プログラムは、大規模なシステム ボリュームをバックアップするときに失敗します。 2455009修正: SQL Server 2005、SQL Server 2008、または SQL Server 2008 R2 のトランザクション ログ内に多数の VTF がある場合、データベースを復旧するとパフォーマンスが低下する 仮想ログ ファイルが多数存在すると、データベースの復元に必要な時間に影響する可能性があります。 これは、復元操作の復旧フェーズ中に特に当てはまります。 多くの VTF が存在することによって発生する可能性のあるその他の問題については、「 Database 操作の完了に時間がかかるか、トランザクション ログに多数の仮想ログ ファイルがある場合にエラーをトリガーする」を参照してください。 ネットワークの場所へのバックアップ操作または復元操作が遅い SQL Server を実行しているサーバーから同様のサイズのファイルをネットワークの場所にコピーして、問題をネットワークに分離します。 パフォーマンスを確認します。 問題の原因に関するその他のポインターについては、SQL Server エラー ログと Windows イベント ログでエラー メッセージを確認します。
サードパーティ製のソフトウェアまたはデータベースメンテナンスプランを使用して同時バックアップを実行する場合は、バックアップの書き込み先ドライブの競合を最小限に抑えるためにスケジュールを変更する必要があるかどうかを検討してください。
Windows 管理者と協力して、ハードウェアのファームウェア更新プログラムを確認してください。
異なる SQL Server バージョン間のデータベースの復元に影響する問題
SQL Server バックアップを、バックアップが作成されたバージョンより前のバージョンの SQL Server に復元することはできません。 たとえば、SQL Server 2019 インスタンスで作成されたバックアップを SQL Server 2017 インスタンスに復元することはできません。 それ以外の場合は、次のエラー メッセージが表示されます。
エラー 3169: データベースは、バージョン %ls を実行しているサーバーにバックアップされました。 このバージョンは、このサーバー (バージョン %ls を実行) とは互換性がありません。 バックアップをサポートしているサーバーでデータベースを復元するか、またはこのサーバーと互換性のあるバックアップを使用してください。
新しいバージョンの SQL Server でホストされているデータベースを以前のバージョンの SQL Server にコピーするには、次の方法を使用します。
Note
次の手順では、SQL_A (上位バージョン) と SQL_B (下位バージョン) という名前の 2 つの SQL Server インスタンスがあることを前提としています。
- 最新バージョンの SQL Server Management Studio (SSMS) をダウンロードして、SQL_A と SQL_B の両方にインストールします。
- SQL_Aで、次の手順に従います。
- <YourDatabase>Tasks>Generate Scripts を右クリックし、データベース全体とすべてのデータベース オブジェクトをスクリプト化するオプションを選択します。
- Set Scripting Options 画面で、Advanced を選択し、SQL Server バージョンの General>Script でSQL_Bのバージョンを選択します。 また、生成されたスクリプトを保存するのに最適なオプションを選択します。 次に、ウィザードを続行します。
- 異なるテーブルからデータをコピーするには、 bulk コピー プログラム ユーティリティ (bcp) を使用します。
- SQL_Bで、次の手順に従います。
- SQL_A サーバーで生成されたスクリプトを使用して、データベース スキーマを作成します。
- 各テーブルで、外部キー制約とトリガーをすべて無効にします。 テーブルに ID 列がある場合は、ID の挿入を有効にします。
- bcp を使用して、前の手順でエクスポートしたデータを対応するテーブルにインポートします。
- データのインポートが完了したら、外部キーの制約とトリガーを有効にし、手順 c. で影響を受ける各テーブルの ID 挿入を無効にします。
この手順は、通常、小規模から中規模のデータベースに適しています。 大規模なデータベースでは、SSMS やその他のツールでメモリ不足の問題が発生する可能性があります。 SQL Server Integration Services (SSIS) 、レプリケーション、またはその他のオプションを使用して、新しいバージョンから以前のバージョンの SQL Server にデータベースのコピーを作成することを検討する必要があります。
データベース用のスクリプトの生成方法について詳しくは、「[スクリプトの生成] オプションを使用してデータベースのスクリプトを作成する」をご覧ください。
Always On 環境でのバックアップ ジョブの問題
Always On 環境でバックアップ ジョブまたはメンテナンス プランに影響する問題が発生した場合は、次の点に注意してください。
- 既定では、自動バックアップ設定は Prefer Secondary に設定されます。 これは、プライマリ レプリカがオンラインの唯一のレプリカである場合を除き、セカンダリ レプリカでバックアップを実行することを指定します。 この設定を使用して、データベースの差分バックアップを作成することはできません。 この設定を変更するには、現在のプライマリ レプリカで SSMS を使用し、可用性グループの Properties の下にある Backup Preferences ページに移動します。
- メンテナンス プランまたはスケジュールされたジョブを使用してデータベースのバックアップを生成する場合は、可用性グループの可用性レプリカをホストするすべてのサーバー インスタンスで、各可用性データベースのジョブを作成してください。
Always On 環境でのバックアップの詳細については、次のトピックを参照してください。
バックアップからデータベースを復元するときのメディア関連のエラー
ファイルの問題を示すエラー メッセージが表示される場合、これは破損したバックアップ ファイルの症状です。 バックアップ セットが破損した場合に発生する可能性があるエラーの例を次に示します。
-
3241: デバイス '%ls' のメディア ファミリの形式が正しくありません。 SQL Server はこのメディア ファミリを処理できません。
-
3242: デバイス '%ls' のファイルが有効な Microsoft テープ形式バックアップ セットではありません。
-
3243: デバイス '%ls' のメディア ファミリは Microsoft Tape Format バージョン %d.%d を使用して作成されました。 SQL Server でサポートされるバージョンは %d.%d です。
Note
Restore Header ステートメントを使用して、バックアップを確認できます。
これらの問題は、基になるハードウェア (ハード ディスク、ネットワーク ストレージなど) に影響する問題や、ウイルスやマルウェアに関連する問題が原因で発生する可能性があります。 Windows システムのイベント ログとハードウェア ログで報告されたエラーを確認し、適切なアクションを実行します (ファームウェアのアップグレードやネットワークの問題の修正など)。
これらのエラーを回避するには、バックアップを実行するときに Backup CHECKSUM オプションを有効にして、破損したデータベースのバックアップを回避します。 詳細については、「 バックアップと復元中に発生するメディア エラー (SQL Server)」を参照してください。
バックアップ ツールを使用してバックアップを実行するときに、トレース フラグ 3023 を有効にしてチェックサムを有効にすることもできます。 詳細については、「 バックアップ ユーティリティでオプションが公開されない場合に CHECKSUM オプションを有効にする方法を参照してください。
これらの問題を解決するには、別の使用可能なバックアップ ファイルを見つけるか、新しいバックアップ セットを作成する必要があります。 Microsoft は、破損したバックアップ セットからデータを取得するのに役立つソリューションを提供していません。
Note
バックアップ ファイルが 1 つのサーバーで正常に復元されるが、別のサーバーでは復元されない場合は、サーバー間でファイルをコピーするさまざまな方法を試してください。 たとえば、通常のコピー操作ではなく robocopy を試します。
アクセス許可の問題が原因でバックアップが失敗する
データベース バックアップ操作を実行しようとすると、次のいずれかのエラーが発生します。
シナリオ 1: SQL Server Management Studio からバックアップを実行すると、バックアップは失敗し、次のエラー メッセージが返されます。
Server <Server name> のバックアップに失敗しました。 (Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError: バックアップ デバイス '<device name>' を開くことができません。 オペレーティング システム エラー 5 (アクセスが拒否されました。) (Microsoft.SqlServer.Smo)シナリオ 2: スケジュールされたバックアップは失敗し、失敗したジョブのジョブ履歴に記録され、次のようなエラー メッセージが生成されます。
Executed as user: <Owner of the job>. ....2 for 64-bit Copyright (C) 2019 Microsoft. All rights reserved. Started: 5:49:14 PM Progress: 2021-08-16 17:49:15.47 Source: {GUID} Executing query "DECLARE @Guid UNIQUEIDENTIFIER EXECUTE msdb..sp...".: 100% complete End Progress Error: 2021-08-16 17:49:15.74 Code: 0xC002F210 Source: Back Up Database (Full) Execute SQL Task Description: Executing the query "EXECUTE master.dbo.xp_create_subdir N'C:\backups\D..." failed with the following error: "xp_create_subdir() returned error 5, 'Access is denied.'". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
これらのシナリオは、SQL Server サービス アカウントに、バックアップの書き込み先フォルダーに対する読み取りおよび書き込みアクセス許可がない場合に発生する可能性があります。 バックアップ ステートメントは、ジョブ ステップの一部として実行することも、SQL Server Management Studio から手動で実行することもできます。 どちらの場合も、SQL Server サービスのスタートアップ アカウントのコンテキストで常に実行されます。 そのため、サービス アカウントに必要な特権がない場合は、前に示したエラー メッセージが表示されます。
詳しくは、「バックアップ デバイス」をご覧ください。
Note
フォルダーの SQL Service アカウントの現在のアクセス許可を確認するには、対応するフォルダーのプロパティの [ セキュリティ ] タブに移動し、[ Advanced ] ボタンを選択してから、[ Effective Access ] タブを使用します。
サードパーティのバックアップ アプリケーションを使用するバックアップ操作または復元操作が失敗する
SQL Server には、仮想バックアップ デバイス インターフェイス (VDI) ツールが用意されています。 この API を使用すると、独立系ソフトウェア ベンダーは SQL Server を製品に統合して、バックアップと復元の操作をサポートできます。 これらの API は、最大限の信頼性とパフォーマンスを提供し、SQL Server のバックアップと復元のすべての機能をサポートするように設計されています。 これには、スナップショットとホット バックアップのすべての機能が含まれます。
一般的なトラブルシューティング手順
SQL Server 2012 より前のバージョンの場合は、SQLWriter サービスが開始されていること、およびスタートアップ アカウントが ローカル システムに設定されていることを確認します。 また、NT AUTHORITY\SYSTEM ログインが SQL Server に存在し、バックアップが実行されるインスタンスの Sysadmin サーバー ロールの一部であることを確認します。
SQL Server 2012 以降のバージョンでは、[NT SERVICE\SQLWriter] という名前の新しいログインが作成され、設定中にログインとして作成およびプロビジョニングされます。 このログインが SQL Server に存在し、Sysadmin サーバー ロールの一部であることを確認します。
sql Server を実行しているサーバー上のコマンド プロンプトで
VSSADMIN LIST WRITERS
コマンドを実行するときに、SqlServerWriter が一覧表示されていることを確認します。 VSS バックアップが正常に完了するためには、このライターがライターとして一覧に表示され、安定状態である必要があります。詳細については、対応するバックアップ ソフトウェアとそのサポート サイトのログを確認してください。
症状またはシナリオ KB 記事 大文字と小文字が区別されるデータベースのバックアップが失敗する 2987610修正: SQL Server 2012 SP2 で VSS を使用して、大文字と小文字が区別される照合順序を持つデータベースをバックアップするときにエラーが発生する VSS ライターを使用して作成されたサードパーティのバックアップが失敗し、8229 エラーが返される場合があります。 2987610修正: SQL Server 2012 SP2 で VSS を使用して、大文字と小文字が区別される照合順序を持つデータベースをバックアップするときにエラーが発生する VDI バックアップのしくみを理解する しくみ: SQL Server - VDI (VSS) バックアップ リソース Azure Site Recovery エージェントがエラーを報告する SQL Server 2008 R2 をホストしているサーバーの ASR エージェントまたはその他のコンポーネント以外の VSS バックアップが失敗する
その他のリソース
しくみ: 同時にバックアップできるデータベースの数はいくつですか?
その他の問題
現象/シナリオ | 修復アクションまたは追加情報 |
---|---|
データベースで変更の追跡が有効になっていて、次のようなエラーが返された場合、バックアップが失敗する可能性があります。 "エラー: 3999、重大度: 17、状態: 1。 <タイム スタンプ> spid <spid> エラー 2601 が原因で、コミット テーブルを dbid 8 のディスクにフラッシュできませんでした。 詳細については、エラー ログを確認してください。 |
次のマイクロソフト サポート技術情報の記事を参照してください。 |
暗号化されたデータベースのバックアップの復元に関する問題 | 別の SQL Server への TDE で保護されたデータベースの移動 |
Enterprise エディションから CRM バックアップを復元しようとすると、Standard エディションで失敗する | 2567984 Microsoft Dynamics CRM データベースを復元するときに"このエディションの SQL Server でデータベースを起動できません" というエラーが表示される |
SQL Server のバックアップと復元の操作に関する FAQ
バックアップ操作の状態を確認するにはどうすればよいですか?
estimate_backup_restore スクリプトを使用して、バックアップ時間の見積もりを取得します。
バックアップの途中で SQL Server がフェールオーバーした場合はどうすればよいですか?
割り込み復元操作 (Transact-SQL) を開始して、復元操作またはバックアップ操作を再開します。
新しいバージョンの古いプログラム バージョンからデータベース バックアップを復元することはできますか。その逆も可能ですか?
バックアップを作成したバージョンより新しいバージョンの SQL Server を使用して、SQL Server バックアップを復元することはできません。 詳細については、「 互換性サポート」を参照してください。
SQL Server データベースのバックアップ操作方法確認しますか?
SQL Server でデータベースのバックアップ履歴を取得するにはどうすればよいですか?
「 SQL Server のデータベースのバックアップ履歴を取得する方法を参照してください。
64 ビット サーバーで 32 ビット バックアップを復元することはできますか。その逆も可能ですか?
はい。 SQL Server のディスク上ストレージ形式は、64 ビット環境と 32 ビット環境で同じです。 そのため、バックアップ操作と復元操作は、64 ビット環境と 32 ビット環境で機能します。
一般的なトラブルシューティングのヒント
- バックアップの書き込み先フォルダーの SQL Server サービス アカウントに対する読み取りおよび書き込みアクセス許可をプロビジョニングしてください。 詳しくは、バックアップのアクセス許可をご覧ください。
- バックアップが書き込まれているフォルダーに、データベース バックアップに対応できる十分な領域があることを確認します。
sp_spaceused
ストアド プロシージャを使用して、特定のデータベースのバックアップ サイズの大まかな見積もりを取得できます。 - 常に最新バージョンの SSMS を使用して、ジョブとメンテナンス プランの構成に関連する既知の問題が発生しないようにします。
- ジョブのテスト実行を実行して、バックアップが正常に作成されていることを確認します。 バックアップを検証するロジックを必ず追加します。
- システム データベースをあるサーバーから別のサーバーに移動する予定がある場合は、 システム データベースの移動を確認します。
- 断続的なバックアップエラーが発生した場合は、SQL Server バージョンの最新の更新プログラムで既に修正されている問題が発生しているかどうかを確認します。 詳しくは、SQL Server のバージョンと更新プログラムに関する記事をご覧ください。
- SQL Express エディションのバックアップをスケジュールして自動化するには、「SQL Server Express で SQL Server データベースのバックアップをスケジュールして自動化する」をご覧ください。
SQL Server のバックアップと復元の操作に関するリファレンス トピック
バックアップ操作と復元操作の詳細については、オンライン ブックの次のトピックを参照してください。
"SQL Server データベースのバックアップと復元": このトピックでは、SQL Server データベースのバックアップ操作と復元操作の概念について説明し、追加のトピックへのリンクを提供します。また、さまざまなバックアップまたは復元タスク (バックアップの検証、T-SQL または SSMS を使用したバックアップなど) の詳細な手順について説明します。 これは、SQL Server ドキュメントのこのトピックに関する親トピックです。
次の表に、バックアップ操作と復元操作に関連する特定のタスクについて確認する必要があるその他のトピックを示します。
リファレンス 説明 BACKUP (Transact-SQL) バックアップに関連する基本的な質問に対する回答を提供します。 さまざまな種類のバックアップ操作と復元操作の例を示します。 バックアップ デバイス (SQL Server) さまざまなバックアップ デバイスを理解し、ネットワーク共有、Azure BLOB ストレージ、関連タスクにバックアップするための優れたリファレンスを提供します。 復旧モデル (SQL Server) シンプル、フル、一括ログなど、さまざまな復旧モデルについて詳しく説明します。 復旧モデルがバックアップに与える影響に関する情報を提供します。 バックアップと復元: システム データベース (SQL Server) システム データベースのバックアップ操作と復元操作を行うときに注意する必要がある方法について説明します。 復元と復旧の概要 (SQL Server) 復旧モデルが復元操作に与える影響について説明します。 データベースの復旧モデルが復元プロセスにどのように影響するかについて質問がある場合は、これを確認する必要があります。 データベースを別のサーバーで使用できるようにするときのメタデータの管理 データベースが移動されたとき、またはログイン、暗号化、レプリケーション、アクセス許可に影響する問題が発生した場合に注意する必要があるさまざまな考慮事項。 トランザクション ログ バックアップの操作 完全復旧モデルと一括ログ復旧モデルでトランザクション ログをバックアップおよび復元 (適用) する方法に関する概念を示します。 トランザクション ログの定期的なバックアップ (ログ バックアップ) を作成してデータを回復する方法について説明します。 Microsoft Azure への SQL Server マネージド バックアップ マネージド バックアップと関連する手順について説明します。