SQLデータベースをバックアップから復元すると、テーブルとインデックスが最初から再構築されますか?それとも、バックアップ時と同じ内部の物理的な順序で保持されますか?
SQL 2000とQuest Lightspeed圧縮バックアップを使用します(違いがある場合)。
答えはノーです。どんなバックアップソフトウェアが使われているからです。
バックアップは物理的な操作であり、論理的な操作ではありません。割り当てられたページを含むすべてのエクステントを読み取り(つまり、8ページのエクステントから1ページしか割り当てられていない場合でも、64Kエクステント全体をバックアップします)、物理的な順序で実行します。
復元は物理的な操作であり、論理的な操作ではありません。データファイルの正当な場所にエクステントを配置します。
インデックス(またはそれに似たもの)の再構築は論理的な操作であり、ログに記録する必要があります。バックアップと復元では、バッファープールを経由せずにデータファイルを直接操作します。これが、これが実行できない理由の1つです。これが実行できないもう1つの理由は、バックアップと復元が、バックアップされるデータの内容を理解していないためです。
ただし、これを実行できない主な理由は、復元操作中にページを移動すると、Bツリーポインターが壊れるからです。ページAがページBを指しているが、ページAが復元プロセスによって移動された場合、ページBはページAを指すように更新されますか?すぐに更新されると、残りの復元プロセスによって上書きされる可能性があります。遅延更新されている場合、復元プロセスでページAまたはページBを削除したトランザクションログが復元された場合はどうなりますか?それは単に行うことはできません。
結論-バックアップと復元は、データを変更することのない物理的な操作です。
お役に立てれば!
PSそれはこの質問に直接対処していませんが、さまざまなバックアップが内部でどのように機能するかを説明する、7月のTechNet Magazineに書いた記事をチェックしてください: SQL Serverバックアップについて 。 9月の雑誌は、復元の理解に関するシリーズの次の記事を掲載します。
A native SQLバックアップは、バックアップファイルのページごとのダンプなので、答えは「いいえ」です。 Quest lightspeedバックアップは、ある種の圧縮圧縮アルゴリズムを使用している可能性がありますが、それでもデータファイルまたはインデックスを「再構築」することはできません。そのため、大きなデータベースでは非常に長い時間がかかります。
バックアップは定期的かつ頻繁に行われます(私はそう思います)。したがって、設計者はバックアップが可能な限り迅速であることを確認しました。最も速いI/Oは何ですか?一連の。物理的な順序でブロックをディスクから読み取り、最高のパフォーマンスが得られます。
なぜ地球上でデータベースが厄介なランダムI/O操作毎晩を実行する必要があるのですか?違いはおよそ2桁です。これには可能な利益はありません。
うーん。 BradC、以前にFirebird/Interbaseを使用したことがありますか?メインのバックアップ/復元ユーティリティ/ APIは、SSMS/EMの「データベースのコピー...」に似ていますか?もしそうなら、MS SQL Serverはそれが好きではないことを知ってください。
SQLServerバックアップは、 "現状のまま"で復元されるデータベースダンプです。したがって、 "他の場所での切り離し-コピー-再接続"操作の快適なオンラインショートカットに似ています。復元されたデータベースは、元のデータベースファイルのほぼ正確なコピーです(復元されたデータベースのデータベースファイルの配置を変更できるためです)。