SQL Server 2000では、破損したページを特定する場合、データベースオプションTORN_PAGE_DETECTIONをTRUEに設定する必要があります。
ただし、SQL 2005以降では、新しい設定PAGE_VERIFYが古いTORN_PAGE_DETECTIONに置き換わり、TORN_PAGE_DETECTIONとCHECKSUMの2種類のページ検証から選択できるようになりました。
ここで、どちらを設定するかという質問があります-TORN_PAGE_DETECTIONまたはCHECKSUM?
TORN_PAGE_DETECTION-ページ内の512バイトごとにビットを書き込むことで、ページがディスクに正常に書き込まれなかったことを検出できます。キャッチは、これらの512バイトに格納されたデータが実際に正しいかどうかを教えてくれないことです。これは、数バイトが誤って書き込まれた可能性があるためです。
CHECKSUM-チェックサムがあると仮定して、ページが書き込まれたときとページが読み取られたときの両方で、ページのチェックサムを計算します。
SQL Serverは、ページ上のビットパターンに基づいてチェックサムを計算し、ページヘッダーに保存してから、ページを書き込むためのI / Oを発行します。SQL Serverはページを読み取ると、同じロジックを使用してチェックサムを再計算し、ページヘッダーで使用可能な値と比較します。チェックサム値が一致する場合、書き込み/読み取りサイクル中にページが破損していなかったと見なされます。
チェックサムの計算コストは、ページの読み取りおよび書き込みごとに発生するため、CPUオーバーヘッドが増加し、ワークロードのスループットに影響を与える可能性があります。留意すべきもう1つの点は、チェックサムがページ上の特定のビットパターンに対して一意ではないことです。2つのページが同じチェックサム値にマップされる可能性があります。そのため、ページの破損が検出されない可能性がほとんどありません。
参照:SQL2005のチェックサム
質問に具体的に答えるには:
チェックサムはSQL2005で導入され、以前のバージョンからDBをアップグレードまたは復元すると、以前のページ検証方法が維持されると考えています。つまり、暗黙的なアップグレードはありませんでした。
はいCHECKSUMはSQL Server 2005で導入されたDEFAULTです。2000から2005にアップグレードする場合は、CHECKSUMを使用するために、データベースオプションのページ検証を明示的に変更する必要があります。
すでにSQL 2005で作成されたデータベースを、SQL 2005を実行している別のサーバーに復元する場合、設定する必要はありません。これは、ページ確認オプションを設定したものまで保持されます。
Torn Page Detectionが登場したとき、私は研究に成功していません
From:http : //support.microsoft.com/kb/230785
7.0より前のSQL Serverのバージョン
7.0より前のバージョンのSQL Serverは、ログパリティまたは破損ビット検出機能を提供していませんでした。実際、これらのバージョンは、ログレコードが2 KBのログページを満たすまで、同じログページを複数回書き込むことができます。これにより、正常にコミットされたトランザクションを公開できます。障害の発生中にログページが書き換えられている場合、コミットされたトランザクションのあるセクターが正しく書き換えられない場合があります。
したがって、TORN_PAGE_DETECTIONはSQL Server 7.0以降に存在します。それでも、デフォルトでは有効になっていませんでした(同じリンク)。
注 SQL Server 7.0では、破損ページの検出はデフォルトで有効になっていません。システムで検出を有効にする方法については、sp_dboptionを参照してください。
したがって、データベースが7.0インスタンスに対して開発され、その後アップグレードされた場合、既存のPAGE VERIFYオプションNONEを使用してアップグレードされます(@ThomasStringerが回答で述べたように)。
編集:2013年9月24日 答えを改善するには:
SQLSkillsのSQL Server内部メモを参照すると、ページダンプを使用すると、破損ビット検出-TORN_PAGE_DETECTIONまたはCHECKSUMが有効になっているかどうかを確認できます。
use database_name -- change here for your database !!
checkpoint
go
dbcc traceon (3604) -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604) -- turn off the trace flag
go
m_tornBits:ページチェックサムまたは破損ページ保護ビットによって置き換えられたビットのいずれかを保持します。これは、データベースのページ保護の形式によって異なります。
注:古いバージョンのSQLサーバーは実行していません。以下は、SQL Server 2000以降で確認されています。7.0または6.5を実行している場合は、それも確認できます:-)