ページの自動修復 (可用性グループ: データベース ミラーリング)Automatic Page Repair (Availability Groups: Database Mirroring)

適用対象: ○SQL Server XAzure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

ページの自動修復は、データベース ミラーリングおよび Always On 可用性グループAlways On availability groupsでサポートされます。Automatic page repair is supported by database mirroring and by Always On 可用性グループAlways On availability groups. 特定の種類のエラーによってページが破損し、読み取りができなくなると、データベース ミラーリング パートナー (プリンシパルまたはミラー) または可用性レプリカ (プライマリまたはセカンダリ) が自動的にページの修復を試みます。After certain types of errors corrupt a page, making it unreadable, a database mirroring partner (principal or mirror) or an availability replica (primary or secondary) attempts to automatically recover the page. ページの読み取りができないパートナー/レプリカは、そのページの新しいコピーを自分のパートナーまたは別のレプリカから要求します。The partner/replica that cannot read the page requests a fresh copy of the page from its partner or from another replica. 要求が受け入れられ、新しいコピーを取得できた場合は、読み取り不可能なページが読み取り可能なコピーに置き換えられます。通常、これによりエラーは解決します。If this request succeeds, the unreadable page is replaced by the readable copy, and this usually resolves the error.

一般に、データベース ミラーリングと Always On 可用性グループAlways On availability groups は、I/O エラーが同じ方法で処理されます。Generally speaking, database mirroring and Always On 可用性グループAlways On availability groups handle I/O errors in equivalent ways. ただし、わずかながら異なる部分もあります。ここでは、そうした違いについて説明します。The few differences are explicitly called out here.

注意

ページの自動修復は DBCC 修復とは異なります。Automatic page repair differs from DBCC repair. ページの自動修復では、すべてのデータが保持されます。All of the data is preserved by an automatic page repair. 一方、DBCC REPAIR_ALLOW_DATA_LOSS オプションを使用してエラーを修正すると、一部のページ (データ) が削除されることがあります。In contrast, correcting errors by using the DBCC REPAIR_ALLOW_DATA_LOSS option might require that some pages, and therefore data, be deleted.

ページの自動修復が試行されるエラーの種類Error Types That Cause an Automatic Page-Repair Attempt

次の表に示すいずれかのエラーが原因でデータ ファイル操作が失敗した場合のみ、そのページにデータベース ミラーリングの自動修復が適用されます。Database mirroring automatic page repair tries to repair only pages in a data file on which an operation has failed for one of the errors listed in the following table.

エラー番号Error number [説明]Description ページの自動修復の原因となるインスタンスInstances that cause automatic page-repair attempt
823823 オペレーティング システムがデータの巡回冗長検査 (CRC) を実行し、それに失敗した場合のみ処理が行われます。Action is taken only if the operating system performed a cyclic redundancy check (CRC) that failed on the data. ERROR_CRC。ERROR_CRC. このエラーのオペレーティング システムの値は 23 です。The operating-system value for this error is 23.
824824 論理エラー。Logical errors. 破損した書き込みや不適切なページ チェックサムなどの論理データ エラー。Logical data errors, such as torn write or bad page checksum.
829829 ページが復元待ちとしてマークされています。A page has been marked as restore pending. すべて。All.

最近発生した 823 CRC エラーおよび 824 エラーを確認するには、 msdb データベースの suspect_pages テーブルを参照してください。To view recent 823 CRC errors and 824 errors, see the suspect_pages table in the msdb database.

Page Types That Cannot Be Automatically RepairedPage Types That Cannot Be Automatically Repaired

次のコントロール ページの種類は、ページの自動修復機能では修復できません。Automatic page repair cannot repair the following control page types:

  • ファイル ヘッダー ページ (ページ ID 0)。File header page (page ID 0).

  • ページ 9 (データベースのブート ページ)。Page 9 (the database boot page).

  • アロケーション ページ:グローバル アロケーション マップ (GAM) ページ、共有グローバル アロケーション マップ (SGAM) ページ、およびページ空き容量 (PFS) ページ。Allocation pages: Global Allocation Map (GAM) pages, Shared Global Allocation Map (SGAM) pages, and Page Free Space (PFS) pages.

プリンシパル/プライマリ データベースでの I/O エラーの処理Handling I/O Errors on the Principal/Primary Database

プリンシパル/プライマリ データベースでページの自動修復が試行されるのは、データベースが SYNCHRONIZED 状態にあり、そのデータベースのログ レコードがプリンシパル/プライマリ サーバーからミラー/セカンダリへ送信され続けている場合だけです。On the principal/primary database, automatic page repair is tried only when the database is in the SYNCHRONIZED state and the principal/primary is still sending log records for the database to the mirror/secondary. ページの自動修復が試行される場合の基本的な処理順序を次に示します。The basic sequence of actions in an automatic page-repair attempt are as follows:

  1. プリンシパル/プライマリ データベースのデータ ページで読み取りエラーが発生すると、プリンシパル/プライマリは、該当するエラー状態が記録された行を suspect_pages テーブルに挿入します。When a read error occurs on a data page in the principal/primary database, the principal/primary inserts a row in the suspect_pages table with the appropriate error status. この後、データベース ミラーリングの場合は、プリンシパルがミラーに対してページのコピーを要求します。For database mirroring, the principal then requests a copy of the page from the mirror. Always On 可用性グループAlways On availability groupsの場合は、プライマリが、すべてのセカンダリに要求をブロードキャストし、最初に応答したセカンダリからページを取得します。For Always On 可用性グループAlways On availability groups, the primary broadcasts the request to all the secondaries and gets the page from the first to respond. この要求では、ページ ID と、現在フラッシュされたログの最後にある LSN を指定します。The request specifies the page ID and the LSN that is currently at the end of the flushed log. 要求対象のページは、 復元待ちとしてマークされます。The page is marked as restore pending. これにより、ページの自動修復の試行時、このページにはアクセスできなくなります。This makes it inaccessible during the automatic page-repair attempt. 修復の試行時にこのページにアクセスしようとすると、エラー 829 (復元待ち) が発生して失敗します。Attempts to access this page during the repair attempt will fail with error 829 (restore pending).

  2. ページ要求を受け取ったミラー/セカンダリは、まず、その要求で指定されている LSN までログを再実行し、After receiving the page request, the mirror/secondary waits until it has redone the log up to the LSN specified in the request. その後、データベースのコピーに存在する該当ページへのアクセスを試みます。Then, the mirror/secondary tries to access the page in its copy of the database. 該当ページにアクセスできた場合は、そのページのコピーをプリンシパル/プライマリに送信します。If the page can be accessed, the mirror/secondary sends the copy of the page to the principal/primary. アクセスできない場合、ミラー/セカンダリはプリンシパル/プライマリにエラーを返します。つまり、ページの自動修復は失敗となります。Otherwise, the mirror/secondary returns an error to the principal/primary, and the automatic page-repair attempt fails.

  3. 要求したページの新しいコピーが含まれている応答をプリンシパル/プライマリが処理します。The principal/primary processes the response that contains the fresh copy of the page.

  4. ページの自動修復機能によって問題のあるページが修正されると、 suspect_pages テーブルで、そのページが復元済み (event_type = 5) としてマークされます。After the automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 5).

  5. ページ I/O エラーによって 遅延トランザクションが発生した場合は、ページを修復した後で、プリンシパル/プライマリがそれらのトランザクションを解決しようとします。If the page I/O error caused any deferred transactions, after you repair the page, the principal/primary tries to resolve those transactions.

ミラー/セカンダリ データベースでの I/O エラーの処理Handling I/O Errors on the Mirror/Secondary Database

ミラー/セカンダリ データベースで発生したデータ ページの I/O エラーは通常、データベース ミラーリングでも Always On 可用性グループAlways On availability groupsでも同じように処理されます。I/O errors on data pages that occur on the mirror/secondary database are handled in generally the same way by database mirroring and by Always On 可用性グループAlways On availability groups.

  1. データ ミラーリングでは、ミラーがログ レコードを再実行している最中にページ I/O エラーが 1 回でも検出されると、そのミラーリング セッションは SUSPENDED 状態になります。With database mirroring, if the mirror encounters one or more page I/O errors when it redoes a log record, the mirroring session enters the SUSPENDED state. Always On 可用性グループAlways On availability groupsでは、セカンダリ レプリカがログ レコードを再実行している最中にページ I/O エラーが 1 回でも検出されると、そのセカンダリ データベースは SUSPENDED 状態になります。With Always On 可用性グループAlways On availability groups, if a secondary replica encounters one or more page I/O errors when it redoes a log record, the secondary database enters the SUSPENDED state. この時点で、ミラー/セカンダリは、該当するエラー状態が記録された行を suspect_pages テーブルに挿入します。At that point, the mirror/secondary inserts a row in the suspect_pages table with the appropriate error status. 次に、ミラー/セカンダリは、プリンシパル/プライマリにそのページのコピーを要求します。The mirror/secondary then requests a copy of the page from the principal/primary.

  2. プリンシパル/プライマリは、そのデータベースのコピーに存在する該当ページにアクセスを試みます。The principal/primary tries to access the page in its copy of the database. ページにアクセスできた場合、プリンシパル/プライマリによって、そのページのコピーがミラー/セカンダリに送信されます。If the page can be accessed, the principal/primary sends the copy of the page to the mirror/secondary.

  3. 要求したすべてのページのコピーを受け取った時点で、ミラー/セカンダリはミラーリング セッションの再開を試行します。If the mirror/secondary receives copies of every page it has requested, the mirror/secondary tries to resume the mirroring session. ページの自動修復機能によって問題のあるページが修正されると、 suspect_pages テーブルで、そのページが復元済み (event_type = 4) としてマークされます。If an automatic page-repair attempt fixes a suspect page, the page is marked in the suspect_pages table as restored (event_type = 4).

    要求したページをプリンシパル/プライマリから受信できない場合、ページの自動修復の試行は失敗です。If a mirror/secondary does not receive a page that it requested from the principal/primary, the automatic page-repair attempt fails. データベース ミラーリングでは、ミラーリング セッションは中断されたままになります。With database mirroring, the mirroring session remains suspended. Always On 可用性グループAlways On availability groupsでは、セカンダリ データベースが中断されたままになります。With Always On 可用性グループAlways On availability groups, the secondary database remains suspended. ミラーリング セッションまたはセカンダリ データベースを手動で再開すると、破損したページが同期フェーズ時に再びヒットします。If the mirroring session or secondary database is resumed manually, the corrupted pages will be hit again during the synchronization phase.

Developer Best PracticeDeveloper Best Practice

ページの自動修復は、バックグラウンドで実行される非同期プロセスです。An automatic page repair is an asynchronous process that runs in the background. したがって、読み取ることのできないページを要求した場合はデータベース操作に失敗し、その原因を示すエラー コードが返されます。Therefore, a database operation that requests an unreadable page fails and returns the error code for whatever condition caused the failure. ミラー化されたデータベースまたは可用性データベースのアプリケーションを開発するときは、失敗した操作を例外として処理できるようにする必要があります。When developing an application for a mirrored database or an availability database, you should intercept exceptions for failed operations. SQL ServerSQL Server エラー コードが 823、824、または 829 のときは、その操作を後で再試行してください。If the SQL ServerSQL Server error code is 823, 824, or 829, you should retry the operation later.

方法:ページの自動修復の試行結果を表示するHow To: View Automatic Page-Repair Attempts

以下の動的管理ビューは、特定の可用性データベースまたはミラー化された特定のデータベースに対して最近試行されたページの自動修復に対応する行を返します (データベースあたり最大 100 行)。The following dynamic management views return rows for the latest automatic page-repair attempts on a given availability database or mirrored database, with a maximum of 100 rows per database.

  • Always On 可用性グループ:Always On Availability Groups:

    sys.dm_hadr_auto_page_repair (Transact-SQL)sys.dm_hadr_auto_page_repair (Transact-SQL)

    サーバー インスタンスで任意の可用性グループに対してホストされている可用性レプリカの可用性データベースに対するページの自動修復の試行ごとに 1 行のデータを返します。Returns a row for every automatic page-repair attempt on any availability database on an availability replica that is hosted for any availability group by the server instance.

  • データベース ミラーリング:Database mirroring:

    sys.dm_db_mirroring_auto_page_repair (Transact-SQL)sys.dm_db_mirroring_auto_page_repair (Transact-SQL)

    サーバー インスタンス上のミラー化されたデータベースに対して試行されたページの自動修復ごとに 1 行を返します。Returns a row for every automatic page-repair attempt on any mirrored database on the server instance.

参照See Also

suspect_pages テーブルの管理 (SQL Server) Manage the suspect_pages Table (SQL Server)
AlwaysOn 可用性グループの概要 (SQL Server) Overview of Always On Availability Groups (SQL Server)
データベース ミラーリング (SQL Server)Database Mirroring (SQL Server)