ページ復元 (SQL Server)Restore Pages (SQL Server)

このトピックでは、 SQL ServerSQL ServerSQL Server Management StudioSQL Server Management Studio または Transact-SQLTransact-SQLを使用してページを復元する方法について説明します。This topic describes how to restore pages in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. ページ復元の目的は、データベース全体を復元することなく 1 つ以上の損傷したページを復元することです。The goal of a page restore is to restore one or more damaged pages without restoring the whole database. 通常、復元候補のページは、そのページにアクセスする際に発生したエラーによって、"問題あり" に設定されています。Typically, pages that are candidates for restore have been marked as "suspect" because of an error that is encountered when accessing the page. 問題ありに設定されているページは、 msdb データベースの suspect_pages テーブルで特定できます。Suspect pages are identified in the suspect_pages table in the msdb database.

このトピックの内容In This Topic

作業を開始する準備Before You Begin

どのような場合にページ復元が役立つかWhen is a Page Restore Useful?

ページ復元の目的は、損傷した個々のページを修復することです。A page restore is intended for repairing isolated damaged pages. 少数のページに関する復元と復旧は、ファイルの復元を行うより高速に実行でき、復元処理中にオフラインになるデータ量が少なくなる場合があります。Restoring and recovering a few individual pages might be faster than a file restore, reducing the amount of data that is offline during a restore operation. ただし、1 つのファイル内の多数のページを復元しなければならない場合は、ファイル全体を復元する方が効率的です。However, if you have to restore more than a few pages in a file, it is generally more efficient to restore the whole file. たとえば、デバイス上の多くのページが損傷している場合は、デバイスの故障が差し迫っていることを示している可能性があるので、できれば別の場所にファイルを復元し、デバイスを修復することを検討します。For example, if lots of pages on a device indicate a pending device failure, consider restoring the file, possibly to another location, and repairing the device.

また、すべてのページ エラーが復元を必要とするわけではありません。Furthermore, not all page errors require a restore. セカンダリ インデックスなど、キャッシュされたデータで発生する問題は、データを再計算することで解決される可能性があります。A problem can occur in cached data, such as a secondary index, that can be resolved by recalculating the data. たとえば、データベース管理者がセカンダリ インデックスを削除して再構築した場合、破損したデータは修正されていますが、 suspect_pages テーブルにはそのことが記録されません。For example, if the database administrator drops a secondary index and rebuilds it, the corrupted data, although fixed, is not indicated as such in the suspect_pages table.

制限事項と制約事項Limitations and Restrictions

  • ページの復元は、完全復旧モデルまたは一括ログ復旧モデルを使用する SQL ServerSQL Server データベースに適用されます。Page restore applies to SQL ServerSQL Server databases that are using the full or bulk-logged recovery models. ページ復元は、読み取り/書き込みファイル グループでのみサポートされます。Page restore is supported only for read/write filegroups.

  • 復元できるのはデータベース ページのみです。Only database pages can be restored. ページ復元を使用して、次のものを復元することはできません。Page restore cannot be used to restore the following:

    • [トランザクション ログ]Transaction log

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

    • すべてのデータ ファイルのページ 0 (ファイルのブート ページ)Page 0 of all data files (the file boot page)

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

    • フルテキスト カタログFull-text catalog

  • データベースで一括ログ復旧モデルを使用している場合、ページ復元には次の追加条件があります。For a database that uses the bulk-logged recovery model, page restore has the following additional conditions:

    • オフライン データはログに記録されないため、ファイル グループまたはページのデータがオフラインであるときにバックアップを行うと、一括ログ データで問題が発生します。Backing up while filegroup or page data is offline is problematic for bulk-logged data, because the offline data is not recorded in the log. オフライン ページが原因で、ログのバックアップが失敗する可能性があります。Any offline page can prevent backing up the log. この場合、最新のバックアップへの復元を実行する場合よりもデータ損失の可能性が低い、DBCC REPAIR の使用を検討します。In this cases, consider using DBCC REPAIR, because this might cause less data loss than restoring to the most recent backup.

    • 一括ログ データベースのログ バックアップで不正なページが検出された場合は、WITH CONTINUE_AFTER_ERROR が指定されていないと失敗します。If a log backup of a bulk-logged database encounters a bad page, it fails unless WITH CONTINUE_AFTER_ERROR is specified.

    • ページ復元は、一般的に一括ログ復旧では使用できません。Page restore generally does not work with bulk-logged recovery.

      ページ復元の実行で推奨されるのは、データベースを完全復旧モデルに設定し、ログ バックアップを試行する方法です。A best practice for performing page restore is to set the database to the full recovery model, and try a log backup. ログ バックアップが成功した場合は、ページ復元を開始できます。If the log backup works, you can continue with the page restore. ログ バックアップが失敗した場合は、前回のログ バックアップ以降の作業をあきらめるか、REPAIR_ALLOW_DATA_LOSS オプションを指定して DBCC を実行してみる必要があります。If the log backup fails, you either have to lose work since the previous log backup or you have to try running DBCC must be run with the REPAIR_ALLOW_DATA_LOSS option.

推奨事項Recommendations

  • ページ復元のシナリオ:Page restore scenarios:

    オフライン ページ復元Offline page restore
    SQL ServerSQL Server のすべてのエディションでは、データベースがオフラインのときにページ復元を実行できます。All editions of SQL ServerSQL Server support restoring pages when the database is offline. オフライン ページ復元では、損傷したページの復元中はデータベースがオフラインです。In an offline page restore, the database is offline while damaged pages are restored. データベースは、復元シーケンスの最後にオンラインになります。At the end of the restore sequence, the database comes online.

    オンライン ページ復元Online page restore
    SQL ServerSQL Server Enterprise Edition では、データベースがオフラインであるときにはオフライン復元が使用される一方、オンラインでのページ復元もサポートされます。Enterprise edition supports online page restores, though they use offline restore if the database is currently offline. ほとんどの場合、ページを復元しているファイル グループを含むデータベースをオンラインにしたまま、損傷したページを復元できます。In most cases, a damaged page can be restored while the database remains online, including the filegroup to which a page is being restored. プライマリ ファイル グループがオンラインの場合、そのセカンダリ ファイル グループがオフラインでも、通常は、オンラインによるページ復元が実行されます。When the primary filegroup is online, even if one or more of its secondary filegroups are offline, page restores are usually performed online. ただし、場合によっては、損傷したページをオフラインで復元することも必要です。Occasionally, however, a damaged page can require an offline restore. たとえば、特定の重要なページが損傷したことが原因で、データベースを起動できない可能性がある場合などです。For example, damage to certain critical pages might prevent the database from starting.

    警告

    破損したページにデータベースの重要なメタデータが格納されている場合、オンラインでのページ復元を試行する際、メタデータに対する必要な更新処理に失敗する可能性があります。If damaged pages are storing critical database metadata, required updates to metadata might fail during an online page restore attempt. この場合は、オフラインでのページ復元を実行できます。ただし、その場合はまず、RESTORE WITH NORECOVERY でトランザクション ログをバックアップして、 ログ末尾のバックアップ を作成しておく必要があります。In this case, you can perform an offline page restore, but first you must create a tail log backup (by backing up the transaction log using RESTORE WITH NORECOVERY).

  • ページ復元では、ページ レベルのエラー報告 (ページ チェックサムを含む) および追跡の機能を活用することができます。Page restore takes advantage of the improved page-level error reporting (including page checksums) and tracking. チェックサムや破損した書き込みによって壊れていることが検出されたページ ( 損傷したページ) は、ページ復元操作によって復元できます。Pages that are detected as corrupted by check-summing or a torn write, damaged pages, can be restored by a page restore operation. 復元されるのは、明示的に指定したページのみです。Only explicitly specified pages are restored. 指定した各ページが、指定のデータ バックアップから取得されたページのコピーで置き換えられます。Each specified page is replaced by the copy of that page from the specified data backup.

    それ以降、ログ バックアップを復元した場合、復元対象のページが少なくとも 1 つ存在するデータベース ファイルにのみ適用されます。When you restore the subsequent log backups, they are applied only to database files that contain at least one page that is being recovered. また、最新の完全復元または差分復元にチェーンが途切れていないログ バックアップを適用し、ページを含むファイル グループに現在のログ ファイルの状態を反映する必要があります。An unbroken chain of log backups must be applied to the last full or differential restore to bring the filegroup that contains the page forward to the current log file. ファイル復元と同様に、ロールフォワード セットは 1 つのログ再実行パスで進められます。As in a file restore, the roll forward set is advanced with a single log redo pass. 正常にページ復元を完了するには、データベースとの一貫性が保たれた状態になるようにページを復旧する必要があります。For a page restore to succeed, the restored pages must be recovered to a state consistent with the database.

セキュリティSecurity

PermissionsPermissions

復元するデータベースが存在しない場合、ユーザーは RESTORE を実行できる CREATE DATABASE 権限を使用する必要があります。If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE. データベースが存在する場合、既定では、RESTORE 権限は sysadmin 固定サーバー ロールおよび dbcreator 固定サーバー ロールのメンバーと、データベースの所有者 (dbo) に与えられています (FROM DATABASE_SNAPSHOT オプションを使用する場合、データベースは常に存在します)。If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

RESTORE 権限は、サーバーでメンバーシップ情報を常に確認できるロールに与えられます。RESTORE permissions are given to roles in which membership information is always readily available to the server. 固定データベース ロールのメンバーシップは、データベースがアクセス可能で破損していない場合にのみ確認することができますが、RESTORE の実行時にはデータベースがアクセス可能で損傷していないことが必ずしも保証されないため、 db_owner 固定データベース ロールのメンバーには RESTORE 権限は与えられません。Because fixed database role membership can be checked only when the database is accessible and undamaged, which is not always the case when RESTORE is executed, members of the db_owner fixed database role do not have RESTORE permissions.

SQL Server Management Studio の使用Using SQL Server Management Studio

SQL Server 2014SQL Server 2014では、新たに SQL Server Management StudioSQL Server Management Studio でのページ復元がサポートされます。Starting in SQL Server 2014SQL Server 2014, SQL Server Management StudioSQL Server Management Studio supports page restores.

ページを復元するにはTo restore pages

  1. 適切な SQL Server データベース エンジンSQL Server Database Engineのインスタンスに接続し、オブジェクト エクスプローラーでサーバー名をクリックしてサーバー ツリーを展開します。Connect to the appropriate instance of the SQL Server データベース エンジンSQL Server Database Engine, in Object Explorer, click the server name to expand the server tree.

  2. [データベース] を展開します。Expand Databases. 復元するデータベースに応じて、ユーザー データベースを選択するか、 [システム データベース] を展開してシステム データベースを選択します。Depending on the database, either select a user database or expand System Databases, and then select a system database.

  3. データベースを右クリックし、 [タスク][復元] の順にポイントし、 [ページ] をクリックします。 [ページの復元] ダイアログ ボックスが開きます。Right-click the database, point to Tasks, point to Restore, and then click Page, which opens the Restore Page dialog box.

    [復元]Restore
    このセクションでは、 [データベースの復元]([全般] ページ)[復元先]と同じ機能を実行します。This section performs the same function as that of Restore to on the Restore Database (General Page).

    [データベース]Database
    復元するデータベースを指定します。Specifies the database to restore. 新しいデータベースを入力するか、ドロップダウン リストから既存のデータベースを選択します。You can enter a new database or select an existing database from the drop-down list. このリストには、システム データベース master および tempdbを除いた、サーバー上のすべてのデータベースが表示されます。The list includes all databases on the server, except the system databases master and tempdb.

    警告

    パスワードで保護されたバックアップを復元するには、 RESTORE ステートメントを使用する必要があります。To restore a password-protected backup, you must use the RESTORE statement.

    [ログ末尾のバックアップ]Tail-Log backup
    [バックアップ デバイス] に、データベースのログ末尾バックアップを保存するファイル名を入力または選択します。Enter or select a file name in Backup device where there tail-log backup will be stored for the database.

    バックアップ セットBackup Sets
    このセクションには、復元に関連するバックアップ セットが表示されます。This section displays the backup sets involved in the restoration.

    [ヘッダー]Header Values
    名前Name バックアップ セットの名前です。The name of the backup set.
    コンポーネントComponent バックアップ コンポーネント: [データベース][ファイル] 、または [<空白>] (トランザクション ログ用)。The backed-up component: Database, File, or <blank> (for transaction logs).
    Type 実行するバックアップの種類: [完全][差分][トランザクション ログ]The type of backup performed: Full, Differential, or Transaction Log.
    [サーバー]Server バックアップ操作を実行した データベース エンジンDatabase Engine インスタンスの名前。The name of the データベース エンジンDatabase Engine instance that performed the backup operation.
    [データベース]Database バックアップ操作に呼び出されるデータベース名です。The name of the database involved in the backup operation.
    [Position]Position ボリューム内でのバックアップ セットの位置。The position of the backup set in the volume.
    最初の LSNFirst LSN バックアップ セット内の最初のトランザクションのログ シーケンス番号 (LSN)。The log sequence number (LSN) of the first transaction in the backup set. ファイル バックアップの場合は空白。Blank for file backups.
    最後の LSNLast LSN バックアップ セット内の最後のトランザクションのログ シーケンス番号 (LSN)。The log sequence number (LSN) of the last transaction in the backup set. ファイル バックアップの場合は空白。Blank for file backups.
    チェックポイントの LSNCheckpoint LSN バックアップが作成された時点で最新のチェックポイントのログ シーケンス番号 (LSN)。The log sequence number (LSN) of the most recent checkpoint at the time the backup was created.
    全 LSNFull LSN 最新のデータベースの完全バックアップのログ シーケンス番号 (LSN)。The log sequence number (LSN) of the most recent full database backup.
    [開始日]Start Date バックアップ操作が開始した日時で、クライアントの地域設定で表示されます。The date and time when the backup operation began, presented in the regional setting of the client.
    完了日Finish Date バックアップ操作が完了したときの日付と時刻。クライアントの地域設定で表示されます。The date and time when the backup operation finished, presented in the regional setting of the client.
    SizeSize バックアップ セットのサイズ (バイト単位) です。The size of the backup set in bytes.
    [ユーザー名]User Name バックアップ操作を実行したユーザーの名前。The name of the user who performed the backup operation.
    [有効期限]Expiration バックアップ セットの期限が切れる日付と時刻。The date and time the backup set expires.

    [確認] をクリックして、ページ復元操作の実行に必要なバックアップ ファイルの整合性を確認します。Click Verify to check the integrity of the backup files needed to perform the page restore operation.

  4. 破損したページを識別するには、 [データベース] ボックスで適切なデータベースを選択した状態で、 [データベース ページの確認] をクリックします。To identify corrupted pages, with the correct database selected in the Database box, click Check Database Pages. この操作の実行には時間がかかります。This is a long running operation.

    警告

    破損していない特定のページを復元するには、 [追加] をクリックし、復元するページの [ファイル ID][ページ ID] を入力します。To restore specific pages that are not corrupted, click Add and enter the File ID and Page ID of the pages to be restored.

  5. ページ グリッドを使用して、復元対象のページを特定します。The pages grid is used to identify the pages to be restored. 最初、このグリッドには、 suspect_pages システム テーブルから取得されたデータが表示されます。Initially, this grid is populated from the suspect_pages system table. このグリッドにページを追加したりグリッドからページを削除したりするには、 [追加] または [削除] をクリックします。To add or remove pages from the grid, click Add or Remove. 詳細については、「 suspect_pages テーブルの管理 (SQL Server)を使用してページを復元する方法について説明します。For more information, see Manage the suspect_pages Table (SQL Server).

  6. [バックアップ セット] グリッドに、既定の復元プランのバックアップ セットが一覧表示されます。The Backup sets grid lists the backup sets in the default restore plan. 必要に応じて [確認] をクリックし、バックアップが読み取り可能かどうか、また、バックアップ セットに不備がないかどうかを、実際には復元せずに確認します。Optionally, click Verify to verify that the backups are readable and that the backup sets are complete, without restoring them. 詳細については、「RESTORE VERIFYONLY (Transact-SQL)」をご覧ください。For more information, see RESTORE VERIFYONLY (Transact-SQL).

    [ページ]Pages

  7. ページ グリッドに一覧表示されたページを復元するには、 [OK] をクリックします。To restore the pages listed in the pages grid, click OK.

Transact-SQL の使用Using Transact-SQL

RESTORE DATABASE ステートメントでページを指定するには、ページを含むファイルのファイル ID とページのページ ID が必要です。To specify a page in a RESTORE DATABASE statement, you need the file ID of the file containing the page and the page ID of the page. 必須の構文は次のとおりです。The required syntax is as follows:

RESTORE DATABASE <database_name>

PAGE = '<file: page> [ ,... n ] ' [ ,... n ]

FROM <backup_device> [ ,... n ]

WITH NORECOVERY

PAGE オプションのパラメーターの詳細については、「RESTORE の引数 (Transact-SQL)」を参照してください。For more information about the parameters of the PAGE option, see RESTORE Arguments (Transact-SQL). RESTORE DATABASE の構文の詳細については、「RESTORE (Transact-SQL)」を参照してください。For more information about the RESTORE DATABASE syntax, see RESTORE (Transact-SQL).

ページを復元するにはTo restore pages

  1. 復元する損傷したページのページ ID を取得します。Obtain the page IDs of the damaged pages to be restored. チェックサムまたは破損した書き込みのエラーによってページ ID が返され、ページを指定するために必要な情報が提供されます。A checksum or torn write error returns page ID, providing the information required for specifying the pages. 損傷したページのページ ID を検索するには、次のいずれかのソースを使用します。To look up page ID of a damaged page, use any of the following sources.

    ページ ID のソースSource of page ID トピックTopic
    msdb..suspect_pagesmsdb..suspect_pages suspect_pages テーブルの管理 (SQL Server)Manage the suspect_pages Table (SQL Server)
    エラー ログError log SQL Server エラー ログの表示 (SQL Server Management Studio)View the SQL Server Error Log (SQL Server Management Studio)
    イベント トレースEvent traces イベントの監視と応答Monitor and Respond to Events
    DBCCDBCC DBCC (Transact-SQL)DBCC (Transact-SQL)
    WMI プロバイダーWMI provider WMI Provider for Server Events の概念WMI Provider for Server Events Concepts
  2. 損傷したページが含まれている、データベースの完全バックアップ、ファイル バックアップ、またはファイル グループ バックアップを使用して、ページ復元を開始します。Start a page restore with a full database, file, or filegroup backup that contains the page. RESTORE DATABASE ステートメントで PAGE 句を使用して、復元する全ページのページ ID の一覧を指定します。In the RESTORE DATABASE statement, use the PAGE clause to list the page IDs of all of the pages to be restored.

  3. 最新の差分バックアップを適用します。Apply the most recent differentials .

  4. 後続のログ バックアップを適用します。Apply the subsequent log backups.

  5. 復元されたページの最終 LSN を含むデータベースの新しいログ バックアップ (最後に復元されたページがオフラインになった時点までのログ バックアップ) を作成します。Create a new log backup of the database that includes the final LSN of the restored pages, that is, the point at which the last restored page is taken offline. この最終 LSN が、再実行ターゲット LSN になります。最終 LSN は、復元シーケンス内の最初の復元の一環として設定されます。The final LSN, which is set as part of the first restore in the sequence, is the redo target LSN. 損傷したページを含むファイルのオンラインのロールフォワードは、再実行ターゲット LSN で停止することができます。Online roll forward of the file containing the page is able to stop at the redo target LSN. ファイルの現在の再実行ターゲット LSN は、sys.master_filesredo_target_lsn 列で確認できます。To learn the current redo target LSN of a file, see the redo_target_lsn column of sys.master_files. 詳細については、「sys.master_files (Transact-SQL)」を参照してください。For more information, see sys.master_files (Transact-SQL).

  6. 新しいログ バックアップを復元します。Restore the new log backup. この新しいログ バックアップを適用すると、ページ復元が完了し、ページが使用可能な状態になります。After this new log backup is applied, the page restore is completed and the pages are now usable.

    注意

    この復元シーケンスは、ファイル復元シーケンスと似ています。This sequence is analogous to a file restore sequence. 実際、ページ復元とファイル復元は、どちらも同じ復元シーケンスで実行することができます。In fact, page restore and file restores can both be performed as part of the same sequence.

例 (Transact-SQL)Example (Transact-SQL)

次の例では、 B を指定して、ファイル NORECOVERYの 4 つの損傷したページを復元します。The following example restores four damaged pages of file B with NORECOVERY. 次に、 NORECOVERYを使用して 2 つのログ バックアップを適用してから、 RECOVERYを使用してログ末尾のバックアップを復元します。Next, two log backups are applied with NORECOVERY, followed with the tail-log backup, which is restored with RECOVERY. 次の例では、オンライン復元を実行します。This example performs an online restore. この例では、ファイル B のファイル ID が 1で、損傷したページのページ ID は 57202916、および 1016です。In the example, the file ID of file B is 1, and the page IDs of the damaged pages are 57, 202, 916, and 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'  
   FROM <file_backup_of_file_B>   
   WITH NORECOVERY;  
RESTORE LOG <database> FROM <log_backup>   
   WITH NORECOVERY;  
RESTORE LOG <database> FROM <log_backup>   
   WITH NORECOVERY;   
BACKUP LOG <database> TO <new_log_backup>;   
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;  
GO  

参照See Also

RESTORE (Transact-SQL) RESTORE (Transact-SQL)
トランザクション ログ バックアップの適用 (SQL Server) Apply Transaction Log Backups (SQL Server)
suspect_pages テーブルの管理 (SQL Server) Manage the suspect_pages Table (SQL Server)
SQL Server データベースのバックアップと復元Back Up and Restore of SQL Server Databases