現在オフラインです。再接続するためにインターネットの接続を待っています

SQL Server 2005 以降のバージョンでの DBCC エラー 2570 のトラブルシューティング

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

923247
はじめに
SQL Server エラー 2570 が何が原因で、この資料に記載します。エラー、および問題を解決する方法。
詳細

DATA_PURITY チェック

SQL Server 2005 では、DATA_PURITY、新しいオプションを追加されています。DBCC CHECKDB および DBCC CHECKTABLE コマンド。DBCC CHECKDB を実行すると、または DBCC CHECKTABLE コマンドでは、このオプションを有効には、コマンドが実行されます。「データの純度」検証のすべてのテーブルのすべての行の列の値またはデータベース内のテーブル。確認するこれらの新しいチェックが実行されます、列に格納されている値は、有効 (つまり、値ではないです。範囲外の列のデータ型に関連付けられたドメイン)。を実行される検証の種類、列のデータ型に依存します。を一部のリスト次のいくつかの例があります。
列のデータ型実行されるデータ検証の種類
Unicode 文字データの長さにする必要があります、2 の倍数にします。
日付時刻1753 年 1 月の間、日フィールドをする必要があります。Dec 31 9999 します。[時間] フィールドは、'11:59:59:999 PM' よりも前でなければなりません。
実際の接合無効の有無の確認演算、QNAN、NINF を ND, PD, PINF などの浮動小数点値。
すべてのデータ型の列の有効性をチェックします。データ。だけのストアド値を持つことが範囲チェックします。たとえば、 tinyintデータ型は 0 255 までからの範囲に格納されている、値を確認するため (これは 0 から 255 までの値を格納できるだけ) 1 バイト、必要はありません。

データの純度検証チェックが有効ではありません。すべてのデータベースを自動的にします。によっていくつかのチェックが有効になります要素:
  • SQL Server 2005 およびそれ以降のバージョンで作成されたデータベースでこれらのチェックは既定で有効になっている、DBCC CHECKDB または DBCC CHECKTABLE コマンドを実行する場合、DATA_PURITY オプションに関係なく、無効ことはできません。
  • SQL の以前のバージョンで作成されたデータベースの場合SQL Server 2000年、SQL Server 7.0、および SQL にアップグレードのバージョンなどのサーバーServer 2005 では、これらのチェックは既定で有効にいません。これらのチェックを実行するには、DBCC CHECKDB で、DATA_PURITY オプションを指定する必要がありますかDBCC CHECKTABLE コマンドです。次の 2 つの可能性があります。
    • DBCC コマンドが終了し、レポート データベースデータの純度をすべて検査を含む、クリーンなのです。この事実は記録されますがデータベースのヘッダー。すべての後の DBCC CHECKDB または DBCC CHECKTABLE コマンド実行この情報が表示され。、データが自動的に実行されます。SQL Server 2005 で作成されたデータベースには純度を確認します。で後は、データベースが「クリーン」では他の単語、データ純度チェックをします。常に次のように実行します。
    • DBCC コマンドが完了しますが、問題に関するレポートデータの不整合。このような場合は、データベースをクリーンアップする必要不整合を削除して、再度 DBCC コマンドを実行します。までの DBCC コマンドの DATA_PURITY オプションを指定する必要が、データベースがクリーンに報告されます。
  • PHYSICAL_ONLY オプションを指定すると場合、DBCCCHECKDB または DBCC CHECKTABLE コマンドの実行、データの純度チェックしました。実行します。

現象

無効または範囲外のデータを SQL に格納されている可能性があります。サーバーのデータベースの以前のバージョンの次の理由により:
  • 無効なデータが一括を使用中に、ソース内に存在しました。bcp ユーティリティなどのメソッドを挿入します。
  • RPC イベントの呼び出しに無効なデータが渡されましたSQL Server。
  • 他の可能性のまま物理データを破損します。列の値が無効な状態にします。
テーブルの列に無効なデータがある場合は、問題は、無効なデータに対して実行される操作の種類があります。しかし、問題は表示されません、し、無効なデータは SQL Server 2005 およびそれ以降のバージョンでは、DBCC CHECKDB または DBCC CHECKTABLE コマンドを実行するまで発見されない可能性もあります。

いくつかの症状に無効なデータが存在することがありますなどがあります先):
  • アクセス違反または他の種類の例外の中に影響を受ける列に対してクエリを実行します。
  • に対して実行されたクエリによって返される誤った結果、影響を受ける列。
  • エラーまたは統計に対してビルドされている場合の問題影響を受ける列。
  • エラー メッセージは次のように。
    メッセージ9100、レベル 23、状態 2、行 1 つのインデックスの破損を検出しました。DBCC を実行します。CHECKDB。

DATA_PURITY の問題のレポート

DBCC CHECKDB または DBCC CHECKTABLE コマンドを使用を実行すると、DATA_PURITY オプションは有効に (またはデータの純度チェックの実行[自動])、および無効なデータが存在するテーブルで DBCC のチェックでコマンド、DBCC の出力に示す他のメッセージが含まれています、問題のデータがあります。データの純度を示す、エラー メッセージのサンプル問題は次のとおりです。
DBCC の結果を得る「account_history」。
Msg 2570、レベル 16、状態 2、行 1
ページ (1:1073)、オブジェクト ID 1977058079、インデックス ID 0、パーティション ID 129568478265344 で 33 をスロットに割り当ての単位 ID 129568478265344 (型「の行データ」)。列の"account_name_japan"値は、"nvarchar"のデータ型の範囲外です。列に有効な値を更新します。
Msg 2570、レベル 16、状態 2、行 1
(1:1156)、120 のスロットでは、オブジェクトのページID 1977058079、インデックス ID 0、パーティション ID 129568478265344、割り当て単位 ID129568478265344 が ([データ行] を入力) します。「Account_name_japan」列値がある範囲の [nvarchar] のデータ型。列に有効な値を更新します。
が1080 のページ オブジェクトの「account_history」153137 の行です。
CHECKDB が見つかりません割り当てのエラーは 0 と 338 の一貫性エラーの表の「account_history」(オブジェクト ID 1977058079)。
0 のアロケーション エラーと 338 に CHECKDB が見つかりません一貫性エラーのデータベース 'BadUnicodeData'。
DBCC の実行が完了しました。DBCC がエラー メッセージを出力する場合は、システム管理者に問い合わせてください。
'Table1' に対する DBCC の結果。
Msg 2570、レベル16、状態 3、行 1
(1:154) のページ、オブジェクト ID 2073058421 で 0 をスロット、インデックス ID0、パーティション ID 72057594038321152、割り当て単位 ID 72057594042318848 (タイプ「の行データ」)。列"col2"の値は、「実際」のデータ型の範囲外です。列に有効な値を更新します。
4 行が 2 ページのオブジェクト「テーブル 1」。
CHECKDB が 0 のアロケーション エラーおよび 1 の一貫性エラーが見つかりません'table1' のテーブル (オブジェクト ID 2073058421 されます)。
CHECKDB がアロケーション エラーの 0 が見つかりません1 の一貫性エラーがデータベース 'realdata'。DBCC の実行が完了しました。場合DBCC がエラーを出力メッセージに、システム管理者にお問い合わせください。
DBCC 結果 'table2' を。
Msg 2570、レベル16、状態 3、行 1
(1:155) のページ、オブジェクト ID 2105058535 で 0 をスロット、インデックス ID0、パーティション ID 72057594038452224、割り当て単位 ID 72057594042449920 (タイプ「の行データ」)。列"col2"の値は「10 進」のデータ型の範囲外です。列に有効な値を更新します。
4 行が 1 ページのオブジェクト[table2]。
CHECKDB が 0 のアロケーション エラーおよび 1 の一貫性エラーが見つかりませんテーブル 'table2' (ID 2105058535 オブジェクト)。
CHECKDB がアロケーション エラーの 0 が見つかりません1 の一貫性エラーがデータベース 'realdata'。DBCC の実行が完了しました。場合DBCC がエラーを出力メッセージに、システム管理者にお問い合わせください。
DBCC 結果 'table3' を。
Msg 2570、レベル16、状態 3、行 1
(1:157) のページ、オブジェクト ID 2121058592 で 0 をスロット、インデックス ID0、パーティション ID 72057594038517760、割り当て単位 ID 72057594042515456 (タイプ「の行データ」)。列"col2"の値は、「datetime」のデータ型の範囲外です。列に有効な値を更新します。
3 行が 1 ページのオブジェクト「table3」。
CHECKDB が 0 のアロケーション エラーおよび 1 の一貫性エラーが見つかりませんテーブル 'table3' (ID 2121058592 オブジェクト)。
CHECKDB がアロケーション エラーの 0 が見つかりません1 の一貫性エラーがデータベース 'realdata'。DBCC の実行が完了しました。場合DBCC がエラーを出力メッセージに、システム管理者にお問い合わせください。
をエラー 2570年が、無効な列値が含まれているすべての行が生成されます。

データの純度問題を解決します。

2570 エラーは、DBCC 修復のいずれかを使用して修復できません。オプションです。これはまま、DBCC はどのような値を決定することはできません。無効な列の値を置き換えるために使用する必要があります。したがって、列の値にする必要があります。手動で更新します。

手動更新を実行するには、行を検索する必要があります。問題が発生します。これを実現する方法は 2 とおりあります。
  • あるテーブルに対してクエリを実行、無効な値を含む行を検索するための値が無効です。
  • 2570 エラーからの情報を使用して識別するために、無効な値を持つ行。
使用してこれらのメソッドの詳細について、以下の両方についてを説明します無効なデータを持つ行を検索する例を示します。

検索すると、正しい行を決定するために使用する新しい値をする必要があります。既存の無効なデータを交換してください。この決定は、慎重に行う必要があります。アプリケーションの動作の値の範囲に基づいて何もデータの特定の行の論理の意味があります。使用できる選択肢は次のとおりです。
  • どのような値がわかっている場合は、それを設定する必要があります。特定の値です。
  • それは使用可能な既定値に設定します。
  • 列の値を NULL に設定します。
  • 列の値の最大値または最小値に設定します。そのデータ型の列です。
  • 特定の行を使用しない場合は、できないことを感じる場合列の有効な値はその行を削除できます。

T SQL クエリを使用して、無効な値を持つ行の検索

持つ行を検索を実行する必要がありますクエリの種類問題を報告する列のデータ型に無効な値に依存します。2570 エラー メッセージでを見ると、2 つの重要ながわかりますこれをするための情報。次の例では、列「account_name_japan」の値 [nvarchar。"のデータ型の範囲外です私たちことができます。問題とデータ型を持つ列を簡単に識別、列が含まれる。したがって、1 回、データ型がわかっている、列に関連する、無効な値を含む行を検索するクエリを記述できます。列、行 (内の述語として識別するために必要な列を選択します。WHERE 句)、さらに更新または削除をします。

Unicode のデータを入力します。
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan FROM account_historyWHERE DATALENGTH(account_name_japan) % 2 != 0

Float データ型:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from the CHECKDB outputSELECT col1, col2 FROM table1WHERE col2<>0.0 AND (col2 < 2.23E-308 OR col2 > 1.79E+308) AND (col2 < -1.79E+308 OR col2 > -2.23E-308)

実際のデータを入力します。
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from -- the CHECKDB outputSELECT col1, col2 FROM testReal WHERE col2<>0.0 AND (col2 < CONVERT(real,1.18E-38) OR col2 > CONVERT(real,3.40E+38)) AND (col2 < CONVERT(real,-3.40E+38) OR col2 > CONVERT(real,-1.18E-38)) ORDER BY col1; -- checks for real out of range
10 進数および数値データ型。
SELECT col1 FROM table2WHERE col2 > 9999999999.99999 OR col1 < -9999999999.99999
基の値を調整する必要がありますに注意してください、精度およびスケールの 10 進数または数値の列を定義しました。上記の例では、列は col2 decimal(15,5) として定義されています。

日付の時刻のデータ型。
識別するためには、2 つの異なるクエリを実行する必要があります。日付時刻列の無効な値を含む行。
SELECT col1 FROM table3WHERE col2 < '1/1/1753 12:00:00 AM' OR col2 > '12/31/9999 11:59:59 PM'SELECT col1 FROM table3 WHERE((DATEPART(ms,col2)+ (1000*DATEPART(s,col2)) + (1000*60*DATEPART(mi,col2)) + (1000*60*60*DATEPART(hh,col2)))/(1000*0.00333)) > 25919999

行の物理的な場所を使用して、無効な値を検索します。

行を検索できない場合は、このメソッドを使用できます。上で説明した T SQL メソッドを使用しての関心。2570 エラー メッセージで、無効な値を含む行の物理位置が表示されます。をたとえば、次のメッセージを見て
ページ (1:157)、オブジェクト ID 2121058592、インデックス ID 0、パーティション ID 72057594038517760 で 0 をスロット、割り当ての単位 ID 72057594042515456 (型「の行データ」)。値の列を"col2"です。「datetime」のデータ型の範囲外です。[更新] 列には法律上値です。
このメッセージで、情報が表示されます: ページ (1:157)、スロット 0 です。これは、行を識別するために必要な情報です。ファイル Id 1 は、PageInFile、157、あり、スロットの Id は 0 になります。この情報を取得すると、コマンドを実行する必要があります。
DBCC TRACEON ( 3604 )DBCC PAGE ( realdata , 1 , 157 , 3 )
このコマンドは、ページの内容全体を印刷します。パラメーターをDBCC PAGE のコマンドは次のとおりです。
  • データベース名
  • ファイル Id
  • PageInFile
  • 印刷オプション
このコマンドを実行すると、その出力がわかります次のような情報が含まれます。
Slot 0 Offset 0x60 Length 19 Record Type = PRIMARY_RECORD Record		  Attributes = NULL_BITMAP Memory Dump @0x44D1C060 00000000: 10001000 01000000		  ffffffff ffffffff †................ 00000010:		  0200fc†††††††††††††††††††††††††††††††... Slot 0 Column 0 Offset 0x4 Length 4 col1 = 1Slot 0 Column 1 Offset 0x8 Length 8 col2 = Dec 31 1899 19:04PM Slot 1 Offset 0x73 Length 19 Record Type = PRIMARY_RECORD Record		  Attributes = NULL_BITMAP Memory Dump @0x44D1C073 00000000: 10001000 02000000		  0ba96301 f8970000 †..........c..... 00000010:		  0200fc†††††††††††††††††††††††††††††††... Slot 1 Column 0 Offset 0x4 Length 4		  col1 = 2 Slot 1 Column 1 Offset 0x8 Length 8 col2 = Jul 8 2006 9:34PM Slot 2		  Offset 0x86 Length 19 Record Type = PRIMARY_RECORD Record Attributes =		  NULL_BITMAP Memory Dump @0x44D1C086 00000000: 10001000 03000000 0ba96301		  f8970000 †..........c..... 00000010: 0200fc†††††††††††††††††††††††††††††††...		  Slot 2 Column 0 Offset 0x4 Length 4 col1 = 3 Slot 2 Column 1 Offset 0x8 Length		  8 col2 = Jul 8 2006 9:34PM 
この出力を行うことができます。明確にするには、目的の行の列値を参照してください。ここでは、スロット 0 のページに格納されている行が必要です。エラー メッセージからは、知っています。その col2 が問題になります。これは列 1 の値をかかることがあります。0 のスロットし、update ステートメントの WHERE 句の述語として使用またはステートメントを削除します。

警告最初のメソッドを使用することをお勧め (T-SQL の使用クエリ) を使用して、必要な情報を検索します。DBCC PAGE のコマンドとしてのみ使用します。最後の手段。生産にこのコマンドを使用するときに最大限の注意を払う環境。テスト上の運用データベースを復元するが賢明です。サーバーに、DBCC PAGE の使用に必要なすべての情報を取得し、操作を行います、運用サーバー上の更新。いつものように、バックアップを準備することを確認します。問題が発生しての以前のコピーに戻す必要がある場合、データベース。
関連情報
DBCC CHECKDB ステートメントの詳細についてを参照してください。「DBCC CHECKDB (Transact SQL)」のトピックでは、次のマイクロソフト開発者ネットワーク (MSDN) Web サイト。 詳細については正常SQL Server 2000 では、問題を表示するのには、次の資料番号をクリックして、資料では、マイクロソフト サポート技術。
900335修正: SQL Server 2000年データベースの自動復旧操作、FLOAT データ型または REAL データ型はインデックスを含む、このデータ型は、NaN の値が含まれている場合失敗することがないです。
RPC イベントの詳細については、「ストアド プロシージャ (OLE DB) を呼び出す"トピック次の MSDN Web サイト:異なるデータ型の詳細についてを参照してください、「ストアド プロシージャ (OLE DB) を呼び出す"トピック次の MSDN Web サイト:浮動ポイント値の規則の詳細についてを参照してください。以下のインテル Web サイト: マイクロソフトテクニカル サポートを見つけることに連絡先情報をサード パーティを提供します。この連絡先情報は予告なく変更される可能性があります。マイクロソフトはしませんこのサード パーティ連絡先情報の正確性を保証します。

警告: この資料は、自動翻訳されています

プロパティ

文書番号:923247 - 最終更新日: 01/22/2013 07:32:00 - リビジョン: 9.0

  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Standard Edition for Small Business
  • kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 KbMtja
フィードバック