バックアップ操作と復元操作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
使用して、実行中のバックアップと復元操作の進行状況を追跡できます。および パフォーマンス モニター カウンターを使用して、バックアップと
Backup/Restore throughput/sec
復元のスループット情報をDevice throughput Bytes/sec
測定できます。 詳細については、「SQL Server、バックアップ デバイス オブジェクト」を参照してください。estimate_backup_restore スクリプトを使用して、バックアップ時間の見積もりを取得します。
「 仕組み: 復元/バックアップの動作とは」を参照してください。 このブログ投稿では、バックアップ操作または復元操作の現在のステージに関する分析情報を提供します。
チェック
次の表に示す既知の問題のいずれかが発生しているかどうかを確認します。 変更を実装するか、対応する記事で説明されている修正プログラムとベスト プラクティスを適用するかを検討します。
ナレッジ ベースまたはオンライン ブックのリンク 説明と推奨されるアクション SQL Serverでのバックアップと復元のパフォーマンスの最適化 オンライン ブックトピックでは、バックアップ/復元操作のパフォーマンスを向上させるために使用できるさまざまなベスト プラクティスについて説明します。 たとえば、SQL Serverを実行している Windows アカウントに特別な特権を割り当てて SE_MANAGE_VOLUME_NAME
、データ ファイルの即時初期化を有効にすることができます。 これにより、パフォーマンスが大幅に向上する可能性があります。2920151 R2 ベースのフェールオーバー クラスターに推奨される修正プログラムと更新プログラムWindows Server 2012
2822241 Windows 8およびWindows Server 2012更新プログラムのロールアップ: 2013 年 4 月現在のシステム ロールアップには、SQL Serverなどのプログラムのパフォーマンスを低下させる可能性がある、システム レベルでの既知の問題の修正プログラムが含まれる場合があります。 これらの更新プログラムをインストールすると、このような問題を防ぐことができます。 2878182 FIX: アプリケーション内のユーザー モード プロセスが、Windows Server 2012を実行しているサーバーで応答しない バックアップ操作は I/O 集中型であり、このバグの影響を受ける可能性があります。 これらの問題を防ぐために、この修正プログラムを適用します。 SQL Serverで動作するようにウイルス対策ソフトウェアを構成する ウイルス対策ソフトウェアは、.bakファイルのロックを保持することがあります。 これは、バックアップ操作と復元操作のパフォーマンスに影響する可能性があります。 ウイルス スキャンからバックアップ ファイルを除外するには、この記事のガイダンスに従ってください。 2820470 Windows に存在しなくなった共有フォルダーにアクセスしようとすると、遅延エラー メッセージが表示される Windows 2012 以降のバージョンに存在しなくなった共有フォルダーにアクセスしようとすると発生する問題について説明します。 967351 NTFS ボリューム内の断片化が激しいファイルは、特定のサイズを超えて拡張されない可能性があります NTFS ファイル システムが大きく断片化されている場合に発生する問題について説明します。 304101 バックアップ プログラムは、大規模なシステム ボリュームをバックアップするときに失敗します 2455009修正: 2005 年、SQL Server 2008 または SQL Server SQL Server 2008 R2 のトランザクション ログ内に多数の VDF がある場合、データベースを復旧するとパフォーマンスが低下する 多くの仮想ログ ファイルが存在すると、データベースの復元に必要な時間に影響する可能性があります。 これは、復元操作の復旧フェーズ中に特に当てはまります。 多数の VDF が存在することが原因で発生する可能性のあるその他の問題については、「 データベース操作の完了に時間がかかるか、トランザクション ログに多数の仮想ログ ファイルがある場合にエラーがトリガーされる」を参照してください。 ネットワークの場所へのバックアップまたは復元操作が遅い 同様のサイズのファイルを、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にコピーするには、次の方法を使用します。
注:
次の手順では、SQL_A (上位バージョン) と SQL_B (下位バージョン) という名前の 2 つのSQL Server インスタンスがあることを前提としています。
- SQL_AとSQL_Bの両方に最新バージョンのSQL Server Management Studio (SSMS) をダウンロードしてインストールします。
- SQL_Aで、次の手順に従います。
- [YourDatabase>タスク>] [スクリプトの生成] を右クリック<し、データベース全体とすべてのデータベース オブジェクトをスクリプト化するオプションを選択します。
- [スクリプト オプションの設定] 画面で、[詳細設定] を選択し、[SQL Server バージョンの全般>スクリプト] でSQL_Bのバージョンを選択します。 また、生成されたスクリプトを保存するのに最適なオプションを選択します。 次に、ウィザードを続行します。
- 一括コピー プログラム ユーティリティ (bcp) を使用して、異なるテーブルからデータをコピーします。
- SQL_Bで、次の手順に従います。
- データベース スキーマを作成するには、SQL_A サーバーで生成されたスクリプトを使用します。
- 各テーブルで、外部キーの制約とトリガーを無効にします。 テーブルに ID 列がある場合は、ID の挿入を有効にします。
- bcp を使用して、前の手順でエクスポートしたデータを対応するテーブルにインポートします。
- データのインポートが完了したら、外部キーの制約とトリガーを有効にし、手順 c. で影響を受ける各テーブルの ID 挿入を無効にします。
この手順は、通常、小規模から中規模のデータベースに適しています。 大規模なデータベースの場合、SSMS やその他のツールでメモリ不足の問題が発生する可能性があります。 SQL Server Integration Services (SSIS)、レプリケーション、またはその他のオプションを使用して、新しいバージョンから以前のバージョンのSQL Serverにデータベースのコピーを作成することを検討する必要があります。
データベースのスクリプトを生成する方法の詳細については、「 スクリプトの生成オプションを使用してデータベースをスクリプト化する」を参照してください。
Always On環境でのバックアップ ジョブの問題
Always On環境でバックアップ ジョブまたはメンテナンス プランに影響する問題が発生した場合は、次の点に注意してください。
- 既定では、自動バックアップの基本設定は [ セカンダリを優先する] に設定されています。 これは、プライマリ レプリカがオンラインの唯一のレプリカである場合を除き、セカンダリ レプリカでバックアップを実行することを指定します。 この設定を使用して、データベースの差分バックアップを作成することはできません。 この設定を変更するには、現在のプライマリ レプリカで SSMS を使用し、[可用性グループのプロパティ] の [バックアップ設定] ページに移動します。
- メンテナンス プランまたはスケジュールされたジョブを使用してデータベースのバックアップを生成する場合は、可用性グループの可用性レプリカをホストするすべてのサーバー インスタンスで、各可用性データベースのジョブを作成してください。
Always On環境でのバックアップの詳細については、次のトピックを参照してください。
バックアップからデータベースを復元するときのメディア関連のエラー
ファイルの問題を示すエラー メッセージが表示される場合、これは破損したバックアップ ファイルの症状です。 バックアップ セットが破損している場合に発生する可能性があるエラーの例を次に示します。
-
3241: デバイス '%ls' のメディア ファミリが正しく形成されていません。 SQL Serverは、このメディア ファミリを処理できません。
-
3242: デバイス '%ls' 上のファイルは、有効な Microsoft テープ形式のバックアップ セットではありません。
-
3243: デバイス '%ls' のメディア ファミリは、Microsoft Tape Format バージョン %d.%d を使用して作成されました。 SQL Serverでは、バージョン %d.%d がサポートされています。
注:
Restore Header ステートメントを使用して、バックアップをチェックできます。
これらの問題は、基になるハードウェア (ハード ディスク、ネットワーク ストレージなど) に影響する問題、またはウイルスやマルウェアに関連する問題が原因で発生する可能性があります。 報告されたエラーの Windows システム イベント ログとハードウェア ログを確認し、適切なアクションを実行します (ファームウェアのアップグレードやネットワークの問題の修正など)。
これらのエラーを防ぐには、バックアップの実行時に バックアップ CHECKSUM オプションを有効にして、破損したデータベースのバックアップを回避します。 詳細については、「バックアップと復元中に発生する可能性のあるメディア エラー (SQL Server)」を参照してください。
また、トレース フラグ 3023 を有効にして、バックアップ ツールを使用してバックアップを実行するときにチェックサムを有効にすることもできます。 詳細については、「 バックアップ ユーティリティでオプションが公開されていない場合に CHECKSUM オプションを有効にする方法」を参照してください。
これらの問題を解決するには、別の使用可能なバックアップ ファイルを見つけるか、新しいバックアップ セットを作成する必要があります。 Microsoft は、破損したバックアップ セットからデータを取得するのに役立つソリューションを提供していません。
注:
バックアップ ファイルが 1 つのサーバーで正常に復元されるが、別のサーバーでは復元されない場合は、サーバー間でファイルをコピーするさまざまな方法を試してください。 たとえば、通常のコピー操作ではなく robocopy を試します。
アクセス許可の問題のためにバックアップが失敗する
データベース バックアップ操作を実行しようとすると、次のいずれかのエラーが発生します。
シナリオ 1: SQL Server Management Studioからバックアップを実行すると、バックアップは失敗し、次のエラー メッセージが返されます。
サーバー <サーバー名>のバックアップに失敗しました。 (Microsoft.SqlServer.SmoExtended)
System.Data.SqlClient.SqlError: バックアップ デバイス 'デバイス名>' を<開くことができません。 オペレーティング システム エラー 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 Service スタートアップ アカウントのコンテキストで常に実行されます。 そのため、サービス アカウントに必要な権限がない場合は、前に示したエラー メッセージが表示されます。
詳細については、「 バックアップ デバイス」を参照してください。
注:
フォルダー上の SQL Service アカウントの現在のアクセス許可をチェックするには、対応するフォルダーのプロパティの [セキュリティ] タブに移動し、[詳細設定] ボタンを選択してから、[有効なアクセス] タブを使用します。
サードパーティのバックアップ アプリケーションを使用するバックアップ操作または復元操作が失敗する
SQL Serverは、仮想バックアップ デバイス インターフェイス (VDI) ツールを提供します。 この API を使用すると、独立系ソフトウェア ベンダーはSQL Serverを製品に統合して、バックアップと復元の操作をサポートできます。 これらの API は、最大の信頼性とパフォーマンスを提供し、SQL Serverのバックアップと復元の機能の全範囲をサポートするように設計されています。 これには、スナップショットおよびホット バックアップ機能の全範囲が含まれます。
一般的なトラブルシューティング手順
2012 SQL Serverより前のバージョンの場合は、SQLWriter サービスが開始されていること、およびスタートアップ アカウントがローカル システムに設定されていることを確認します。 また、NT AUTHORITY\SYSTEM ログインがSQL Serverに存在し、バックアップが実行されるインスタンスの Sysadmin サーバー ロールの一部であることを確認します。
SQL Server 2012 以降のバージョンでは、[NT SERVICE\SQLWriter] という名前の新しいログインが作成され、セットアップ中にログインとしてプロビジョニングされます。 このログインがSQL Serverに存在し、Sysadmin サーバー ロールの一部であることを確認します。
SQL Serverを実行しているサーバーのコマンド プロンプトでコマンドを実行するときに
VSSADMIN LIST WRITERS
、SqlServerWriter が一覧表示されていることを確認します。 このライターはライターとして一覧表示する必要があります。VSS バックアップを正常に完了するには 、安定した 状態にする必要があります。詳細については、対応するバックアップ ソフトウェアとそのサポート サイトからログをチェックします。
症状またはシナリオ サポート技術情報の文書番号 大文字と小文字が区別されるデータベースのバックアップが失敗する 2987610 FIX: SQL Server 2012 SP2 で VSS を使用して大文字と小文字が区別される照合順序を持つデータベースをバックアップするときにエラーが発生する VSS ライターを使用して作成されたサード パーティ製のバックアップが失敗し、8229 エラーが返される場合があります。 2987610 FIX: SQL Server 2012 SP2 で VSS を使用して大文字と小文字が区別される照合順序を持つデータベースをバックアップするときにエラーが発生する VDI バックアップのしくみについて 動作方法: SQL Server - VDI (VSS) バックアップ リソース Azure Site Recovery エージェントがエラーを報告する ASR エージェントまたはその他のコンポーネント以外の VSS バックアップが、2008 R2 SQL Serverホストしているサーバーに対して失敗する
その他のリソース
動作方法: 同時にバックアップできるデータベースの数はいくつですか?
その他の問題
現象/シナリオ | 修復アクションまたは追加情報 |
---|---|
データベースで変更の追跡が有効になっていて、次のようなエラーが返されると、バックアップが失敗する可能性があります。 "エラー: 3999、重大度: 17、状態: 1。 <タイム スタンプ> spid spid><エラー 2601 が原因で dbid 8 のディスクにコミット テーブルをフラッシュできませんでした。 詳細については、エラー ログを確認してください。 |
次の Microsoft サポート技術情報の記事を参照してください。 |
暗号化されたデータベースのバックアップの復元に関する問題 | TDE 保護データベースを別のSQL Serverに移動する |
Enterprise エディションから CRM バックアップを復元しようとすると、Standard エディションで失敗する | Microsoft Dynamics CRM データベースを復元するときに"このエディションのSQL Serverでデータベースを起動できません" エラーを2567984 |
バックアップ操作と復元操作SQL Server関する FAQ
バックアップ操作の状態をチェックするにはどうすればよいですか?
estimate_backup_restore スクリプトを使用して、バックアップ時間の見積もりを取得します。
バックアップの途中でフェールオーバー SQL Server場合はどうすればよいですか?
[ 中断された復元操作の再起動 ] (Transact-SQL) ごとに復元操作またはバックアップ操作を再起動します。
より新しいバージョンの古いプログラム バージョンからデータベース バックアップを復元できますか。その逆も可能ですか?
SQL Serverバックアップを作成したバージョンより後のバージョンのSQL Serverを使用して、バックアップを復元することはできません。 詳細については、「 互換性サポート」を参照してください。
SQL Server データベースのバックアップを確認操作方法?
RESTORE ステートメント - VERIFYONLY (Transact-SQL) に記載されている手順を参照してください。
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 マネージド バックアップと関連する手順について説明します。