データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

MicrosoftSQLServerの高度な破損と回復

このブログでは、Microsoft®SQLServer®のデータベースレベルで発生する可能性のある破損、それらを検出する方法、および高度な復元と修復の手法を使用してそれらを修正する方法について説明しています。

はじめに

現在、SQL Serverは、その高度な内部構造と優れた信頼性により、最も一般的で広く使用されているリレーショナルデータベース管理システムの1つです。多くの組織は、重要なビジネスデータを維持および保存するためにSQLServerデータベースを選択しています。

企業は、データベース管理者(DBA)がデータベースのパフォーマンス、保守、およびセキュリティを継続的に改善することを期待しています。データベースが破損していてデータにアクセスできない場合、ハードウェアの破損、ディスクの問題、ウイルス攻撃、オペレーティングシステム(OS)の障害などのさまざまな原因が考えられます。破損したデータベースの修復は、最善の手法を理解するまでは簡単な作業ではありません。

この投稿では、データベースの破損のいくつかの原因について説明し、ページの破損を特定するのに役立ち、データベース整合性チェッカー(DBCC)CHECKDBコマンドを調べ、高度な復元と修復の手法を示します。

データベースの破損

SQL Serverは、ユーザーデータをページの形式で保存します。それらのページは.MDFにあります (プライマリ)データファイル。 .MDFの破損 ファイルはデータベース全体の破損につながる可能性があります。次の図に示すように、データファイルページは、SQL Serverのメモリから(つまり、ディスクに)書き込まれる場合は良好ですが、メモリに読み戻す場合は不良です。

MicrosoftSQLServerの高度な破損と回復 データベースの破損の原因:

データベースの破損の種類には、次の項目が含まれます。

  • I / Oサブシステム(これは、データベースが破損する最も一般的な理由の1つです。)
  • Windowsオペレーティングシステム
  • 暗号化やウイルス対策などのファイルシステムドライバー
  • SANまたはRAIDコントローラー
  • ディスク
  • メモリ
  • ファイルヘッダー
  • SQLServerのバグ
  • ヒューマンエラー
エラーメッセージ:

破損したデータベースにアクセスすると、次のエラーメッセージが表示される場合があります。

  • SQLServerのメッセージ823
  • SQLServerのメッセージ824
  • SQLServerのメッセージ825(読み取り再試行)
  • エラー9004SQLServer
  • メタデータ破損エラー
  • ページレベルの破損エラー
ページの破損の追跡

SQL Serverには、ディスクへのページの読み取りや書き込みなどのI/0操作中に破損が発生した場合に自動的に識別して警告するメカニズムが組み込まれています。

次のさまざまなタイプのページレベルの検証オプションがSQLServerで使用可能であり、ディスク上のページを保護するのに役立ちます。

  • TORN_PAGE_DETECTION
  • チェックサム

TORN_PAGE_DETECTIONの場合 が指定されている場合、ページがディスクに書き込まれるたびに、8KBデータファイルページの16x 512バイトディスクセクターのビットが反転されます。ページがメモリに読み込まれた後、これらの値が比較されます。状態が間違っていると、ページが正しく書き込まれなかった可能性があります。この場合、システムはエラーメッセージ824(ページの破損エラーを示す)を生成します。

チェックサムの場合 が指定されている場合、システムはページのコンテンツに対してチェックサム値を計算し、ページをディスクに書き込むときにその値をページヘッダーに格納します。後でページがディスクからロードされた後、チェックサムが再計算され、ページヘッダーに格納されている値と比較されます。値が一致しない場合、システムはエラーメッセージ824(チェックサムの失敗を示す)を生成します。

両方のエラー、823ハードI/ O および824ソフトI/O 、重大度24のエラーであり、msdb.dboに記録されます。 suspect_pagestable。

テーブルmsdb.dbo。 suspect_pagestable 単一ページの復元操作に使用され、SQLServerエラーログとWindows®イベントログに記録できます。

DBCC CHECKDB

DBCC CHECKDBは、データベース内のすべてのオブジェクトの物理的および論理的な整合性をチェックします。

これはリソースを大量に消費する操作であり、並列処理を使用しますが、フラグ2528をトレースすることにより、単一のスレッドで実行できます。

プリミティブクリティカルシステムテーブルチェック

プリミティブチェックは、ストレージエンジンのメタデータを保持する重要なシステムテーブルと、データが MDFに格納されている割り当てパスでチェックを実行するように設計されています。 ファイル。

プリミティブチェックは次のリストに示されています:

  • DBCC CHECKALLOC :データベース内の割り当て構造の整合性をチェックします。割り当て構造が有効であり、単一のデータファイルページが2つのテーブルに割り当てられていないことを確認します。

  • DBCCチェックテーブル :テーブルとインデックスの整合性をチェックします。テーブルの構造とそれに関連するインデックスを検証します。インデックスデータにテーブル内の一致する行があるかどうかを判断し、indexorderキーを調べます。テーブルで使用されているFILESTREAMがある場合は、リンクの存在を検証します。

  • DBCC CHECKCATALOG :システムカタログ間の整合性をチェックします。

  • DBCC CHECKFILEGROUP :DBCC CHECKDBと同様に、このチェックはファイルグループの整合性チェックとデータベースの割り当てチェックを実行します。

サンプルコード
DBCC CHECKDB
  [ ( database_name | database_id | 0
    [ , NOINDEX
    | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
  ) ]
  [ WITH
    {
        [ ALL_ERRORMSGS ]
        [ , EXTENDED_LOGICAL_CHECKS ]
        [ , NO_INFOMSGS ]
        [ , TABLOCK ]
        [ , ESTIMATEONLY ]
        [ , { PHYSICAL_ONLY | DATA_PURITY } ]
        [ , MAXDOP  = number_of_processors ]
    }
  ]
]
内部データベーススナップショット

CHECKDBで内部データベーススナップショットを使用してチェックを実行し、トランザクションの一貫性を維持することで、ブロッキングと同時実行の問題を防止します。データベーススナップショットを作成できない場合は、データベースの排他ロックと共有テーブルロックがあることを確認してください。これは、テーブルレベルのチェックを実行するために必要です。 。スナップショットが作成されていない場合、CHECKDBはマスターで失敗します。

次のリストには、DBCCCHECKDBによって実行される内部チェックが含まれています。

  • 重要なシステムテーブルのチェック。
  • 重要なシステムテーブルの論理チェック。
  • その他のテーブルの論理チェック。
  • 割り当てチェック。
  • メタデータチェック。
  • サービスブローカーの検証チェック。
  • インデックス付きビュー、空間インデックスチェック。

CHECKDBエラー

次の表に、いくつかのDBCCCHECKDBエラーを示します。

MicrosoftSQLServerの高度な破損と回復 ベストプラクティス

データベースの場合VLDB CHECKDBの実行時の問題がある場合は、 PHYSICAL_ONLYを使用する必要があります VLDBの実行時間を短縮するためのオプション 本番データベース。ただし、通常は、オプションを指定せずにDBCCCHECKDBを実行する必要があります。 CHECKDBの実行スケジュールは、個々の本番環境によって異なります。

高度な復元オプション

ほとんどの人は破損の問題に単純なデータベース復元技術を使用していますが、次の高度な復元技術を利用できます。

ページの復元

この手法を使用して、1つ以上のページを復元できます。ページレベルの復元は、データベースエンタープライズエディションのオンライン操作であり、他のエディションのオフライン操作を使用できます。これは、復元プロセス中にデータベースがオフラインになる可能性があることを意味します。

T-SQLスクリプト
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY

ページIDを取得するには、エラーログ、イベントトレース、DBCC、 msdb..suspectpagesなどのさまざまなソースを使用します 破損したページとそのIDを一覧表示するテーブルレコード。

注: ブートページ、ファイルヘッダーページ、重要なシステムテーブルの一部のページ、および割り当てビットマップをページ復元として復元することはできません。

部分的な復元と部分的な復元

ページの復元と同様に、エンタープライズエディションの場合はオンラインで、複数のファイルまたはファイルグループを含む他のエディションの場合はオフラインで、断片的および部分的な復元を実行できます。

すべての断片的な復元は、部分的な復元シーケンスRESTORE DATABASEで始まります。 PARTIALを使用して完全バックアップを復元するステートメント オプション。この復元が完了すると、データベースは部分的にオンラインになります。これは、リカバリが延期されたため、残りのファイルがリカバリ保留モードになっていることを意味します。

断片的な復元は、データベースの復旧モデルとその復旧順序によって異なります。

シーケンスを復元

ファイルグループXとZ、およびプライマリファイルグループの部分的な復元を実行するには、次のコードを実行します。

RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z'
  FROM partial_backup
  WITH PARTIAL, RECOVERY;

前のポイントXでは、次のことが当てはまります。

  • ファイルグループZとプライマリファイルグループはオンラインです。
  • ファイルグループYのファイルはリカバリ保留中です。
  • ファイルグループはオフラインです。

RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY;を実行します。

これで、すべてのファイルグループがオンラインになりました。

その他の高度な修復技術

修復は常にデータ回復を保証しますか?答えは「いいえ」です。

データを破損する可能性のある組み合わせがいくつかある可能性があり、すべての組み合わせをテストすることは不可能です。たとえば、システムテーブルが破損しており、ブートなどのページでは修復が機能しません およびPFS

いくつかの修復オプションは次のとおりです。

REPAIR_REBUILD

このオプションは修復を実行しますが、損傷したNCindexを再構築するときにデータが失われる可能性があります。

REPAIR_ALLOW_DATA_LOSS

このオプションは修復を実行しますが、データが失われる可能性があります。

システムテーブルインデックスの再構築

クラスタ化システムテーブルのインデックスを修復することはできませんが、DBCC CHECKTABLEオプションをチェックすることで、状況によっては非クラスタ化インデックスを修復できます。

注: 悲惨な状況を回避するために、元のデータベースではなく、データベースのコピーに対して常にあらゆる種類の高度な修復手法を実行してください。

非クラスター化インデックスから日付を再構築します:

クラスタ化されたインデックスまたはヒープが破損している場合、非クラスタ化(NC)インデックスからデータを回復するための唯一のオプションは修復です。ただし、メタデータが破損していると修復が機能しない場合があります。

selectステートメントを使用して、損傷していないNCインデックスを強制的に選択できますが、NCインデックスの列レベルのカバレッジに依存する場合があります。

DBCCページ

DBCC PAGE … WITH TABLERESULTSを使用する キー範囲を識別できます。非クラスター化インデックスから構築し、破損したページを調べて、ページからデータを取得しようとすることができます。

結論

この投稿を読んだ後は、データベースの破損と、単純な手法と高度な手法の両方を使用してデータベースを回復する方法について理解を深める必要があります。さらに、これらの手法は、破損後にデータベースをオンラインにするのに役立ちます。破損の停止を回避するために、常に堅牢なバックアップ計画を立てる必要があります。

[フィードバック]タブを使用して、コメントを書き込んだり、質問したりします。

専門家による管理、管理、構成で環境を最適化する

Rackspaceのアプリケーションサービス(RAS) 専門家は、幅広いアプリケーションポートフォリオにわたって次の専門的かつ管理されたサービスを提供します。

  • eコマースおよびデジタルエクスペリエンスプラットフォーム
  • エンタープライズリソースプランニング(ERP)
  • ビジネスインテリジェンス
  • Salesforceの顧客関係管理(CRM)
  • データベース
  • メールホスティングと生産性

お届けします:

  • 偏りのない専門知識 :私たちは、即時の価値を提供する機能に焦点を当てて、お客様の近代化の旅を簡素化し、導きます。
  • 狂信的な経験 ™:最初にプロセスを組み合わせます。テクノロジーセカンド。包括的なソリューションを提供するための専用のテクニカルサポートを備えたアプローチ。
  • 比類のないポートフォリオ :豊富なクラウドエクスペリエンスを適用して、適切なテクノロジーを適切なクラウドに選択して導入できるようにします。
  • アジャイルデリバリー :私たちはあなたがあなたの旅の途中であなたに会い、あなたの成功と一致します。

今すぐチャットして始めましょう。


  1. 既存のAlwaysOnデータベースでのMicrosoftSQLServerログ配布

    この投稿では、既存のMicrosoft®SQLServer®AlwaysOnで構成されたデータベースを使用して、ディザスタリカバリ(DR)ソリューションであるログ配布を設定する方法について説明します。 はじめに AlwaysOn可用性グループ(AG)機能は、データベースミラーリングのエンタープライズレベルの代替手段を提供する、高可用性および災害復旧ソリューションです。 SQL Server 2012(11.x)で導入されたAlwaysOn AGは、企業のユーザーデータベースのセットの可用性を最大化します。AGは、可用性データベースと呼ばれる、一緒にフェイルオーバーするユーザーデータベースの個

  2. MicrosoftSQLServerクエリストア

    Microsoft®SQLServer®クエリストアは、その名前が示すように、実行されたクエリのデータベース履歴、クエリの実行時実行統計、および実行プランをキャプチャするストアのようなものです。データはディスクに保存されるため、トラブルシューティングの目的でいつでもクエリストアデータを取得できます。SQLServerを再起動してもデータに影響はありません。 SQL Server 2016で導入され、以降のすべてのエディションで利用できるクエリストアを使用して、クエリプランの変更によって引き起こされるパフォーマンスの問題をトラブルシューティングします。 はじめに ベースラインデータ分析はパフォ