أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

استكشاف الأخطاء وإصلاحها خطأ DBCC 2570 في SQL Server 2005 أو الإصدارات الأحدث

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

923247
مقدمة حول
توضح هذه المقالة خطأ SQL Server 2570، ما هي أسباب الخطأ، وكيفية حل المشكلة.
معلومات أخرى

يتحقق DATA_PURITY

في SQL Server 2005، تم إضافة خيار جديد، DATA_PURITY، إلى أوامر DBCC CHECKDB و DBCC CHECKTABLE. عند تنفيذ DBCC CHECKDB أو الأمر DBCC CHECKTABLE بتمكين هذا الخيار، سيتم تنفيذ الأمر عمليات التحقق من صحة "نقاء البيانات" على كل قيمة العمود في كافة الصفوف من الجدول أو الجداول في قاعدة البيانات. يتم تنفيذ عمليات التحقق الجديدة هذه للتأكد من أن صحة القيم المخزنة في الأعمدة (أي القيم غير موجودة خارج النطاق للمجال المقترن بنوع البيانات هذا العمود). علامة الطبيعة للتحقق من صحة تنفيذ يعتمد على نوع بيانات العمود. علامة قائمة غير كاملة تعطي بعض الأمثلة:
نوع بيانات العمودنوع التحقق من البيانات
حرف Unicodeيجب أن يكون طول البيانات مضاعف للرقم 2.
التاريخ والوقتيجب أن يكون الحقل الأيام بين يناير 1753 1 و 31 ديسمبر 9999. يجب أن يكون الحقل time أقدم من 11:59:59:999 م.
الحقيقية وموازنتهاالتحقق من وجود صالح أن قيم الفاصلة العائمة سنان، كنان، نينف، الكثافة، PD، بينف.
ليست كافة أنواع البيانات يتم التحقق من صحة العمود بيانات. فقط تلك التي من الممكن أن قيمة مخزنة خارج يتم التحقق من النطاق. على سبيل المثال، يحتوي نطاق صالح من 0 إلى 255 نوع البيانات عدد صحيح صغير جداً ويتم تخزينها في مفردة البايت (والتي يمكنك تخزين القيم من 0 إلى 255)، حتى التحقق من قيمة ليس من الضروري.

لم يتم تمكين عمليات التحقق من صحة نقاء البيانات تلقائياً لكافة قواعد البيانات. يتم تمكين التدقيقات استناداً إلى عدة عوامل:
  • لقواعد البيانات التي تم إنشاؤها في SQL Server 2005 أو الإصدارات الأحدث، هذه الاختبارات يتم تمكينها بشكل افتراضي ولا يمكن تعطيله، حيث غير مرتبطة باستخدام خيار "DATA_PURITY" عند تنفيذ أمر DBCC CHECKDB أو DBCC CHECKTABLE.
  • لقواعد البيانات التي تم إنشاؤها في الإصدارات السابقة من SQL خادم، مثل SQL Server 2000 أو SQL Server 7.0 وإصدارات الترقية إلى SQL لم يتم تمكين ملقم 2005، عمليات التدقيق هذه بشكل افتراضي. من أجل عمليات التحقق هذه لتنفيذ، يجب تحديد خيار DATA_PURITY في DBCC CHECKDB أو أمر DBCC CHECKTABLE. يمكن أن يؤدي هذا إلى شيئين:
    • ينتهي الأمر DBCC وبأن قاعدة البيانات نظيفة، بما في ذلك كافة التدقيقات نقاء البيانات. يتم تسجيل هذه الحقيقة في رأس قاعدة البيانات. الأمر DBCC CHECKDB أو DBCC CHECKTABLE اللاحقة كافة إجراءات تنفيذية سوف تلاحظ هذه المعلومات وسيتم تنفيذ البيانات تلقائياً يتحقق نقاء، كما يمكن أن يحدث لقواعد البيانات التي تم إنشاؤها على SQL Server 2005. في بمعنى آخر، بمجرد قاعدة بيانات من المعروف أن تكون "نظيفة" مراقبة نقاء البيانات تنفيذ دائماً.
    • ينتهي الأمر DBCC ولكن تقارير مشاكل حول عدم تناسق البيانات. إذا كانت هذه هي الحالة، يجب تنظيف قاعدة البيانات إزالة التناقضات ومحاولة لتنفيذ الأمر DBCC مرة أخرى. يجب تحديد خيار DATA_PURITY للأمر DBCC حتى تم الإبلاغ عن قاعدة بيانات نظيفة.
  • إذا تم تحديد الخيار PHYSICAL_ONLY عند DBCC يتم تنفيذ الأمر CHECKDB أو DBCC CHECKTABLE، لا يتم تدقيق نقاء البيانات تنفيذ.

الأعراض

قد يتم تخزين بيانات غير صالحة أو خارج النطاق في SQL خادم قاعدة البيانات في الإصدارات السابقة للأسباب التالية:
  • بيانات غير صالحة كانت موجودة في المصدر أثناء استخدام مجمع إدراج طرق، مثل الأداة المساعدة bcp.
  • تم تمرير بيانات غير صحيحة من خلال إجراء استدعاءات الحدث RPC ملقم SQL.
  • الأسباب الأخرى المحتملة لترك عطب في البيانات الفعلية قيمة العمود في حالة غير صالحة.
إذا كان لديك بيانات غير صحيحة في عمود جدول، فقد تواجه مشكلة اعتماداً على نوع العملية التي تتم على البيانات غير صالحة. ومع ذلك، من الممكن أيضا أن تظهر أي مشكلة، ولن يتم اكتشاف البيانات غير الصحيحة حتى تقوم بتنفيذ أمر DBCC CHECKDB أو DBCC CHECKTABLE في SQL Server 2005 والإصدارات الأحدث.

بعض الأعراض التي قد تلاحظ نظراً لوجود بيانات غير صحيحة تشمل (على سبيل المثال لا الحصر إلى):
  • مشكلات خرق الوصول أو أنواع أخرى من الاستثناءات أثناء تنفيذ استعلامات مقابل العمود المتأثر.
  • يتم إرجاعها بواسطة الاستعلامات التي تم تنفيذها على نتائج غير صحيحة العمود المتأثر.
  • أخطاء أو مشاكل عند الإحصائيات التي تقام ضد الأعمدة المتأثرة.
  • رسائل الأخطاء كما يلي:
    Msg 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) الفتحة 33 في كائن معرف 1977058079، فهرس معرف 0، قسم 129568478265344 معرف، وحدة تخصيص معرف 129568478265344 (النوع "في صف بيانات"). العمود "account_name_japan" القيمة خارج النطاق لنوع البيانات "nvarchar". تحديث عمود لقيمة مسموح بها.
Msg 2570 أو مستوى 16, حالة 2، سطر 1
الصفحة (1:1156)، وفتحه 120 في كائن 1977058079 معرف، فهرس معرف 0، تقسيم 129568478265344 معرف، معرف وحدة تخصيص 129568478265344 (اكتب "في صف بيانات"). قيمة العمود "account_name_japan" بالخارج النطاق لنوع البيانات "nvarchar". تحديث عمود لقيمة مسموح بها.
هناك يتم 153137 الصفوف الموجودة في صفحات 1080 للكائن "account_history".
تم العثور على CHECKDB تخصيص 0 أخطاء وأخطاء تناسق 338 في الجدول "account_history" (كائن معرف 1977058079).
CHECKDB العثور على أخطاء التخصيص 0 و 338 أخطاء تناسق في قاعدة البيانات 'بادونيكوديداتا'.
تم التنفيذ DBCC. إذا DBCC طباعة رسائل الإعلام بالخطأ، اتصل بمسؤول النظام.
نتائج DBCC لجدول '1'.
Msg 2570، مستوى 16, حالة 3، سطر 1
الصفحة (1:154)، والفتحة 0 في كائن معرف 2073058421، فهرس معرف تقسيم 0، 72057594038321152 معرف، وحدة تخصيص معرف 72057594042318848 (نوع "في صف بيانات"). العمود "col2" قيمة خارج نطاق نوع البيانات "حقيقي". تحديث عمود لقيمة مسموح بها.
هناك 4 صفوف في صفحات 2 للكائن "جدول 1".
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في الجدول 'table1' (كائن معرف 2073058421).
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في قاعدة البيانات 'ريلداتا'. تم التنفيذ DBCC. إذا كان خطأ في طباعة DBCC رسائل، اتصل بمسؤول النظام.
نتائج DBCC لجدول '2'.
Msg 2570، مستوى 16, حالة 3، سطر 1
الصفحة (1:155)، والفتحة 0 في كائن معرف 2105058535، فهرس معرف تقسيم 0، 72057594038452224 معرف، وحدة تخصيص معرف 72057594042449920 (نوع "في صف بيانات"). العمود "col2" قيمة خارج نطاق نوع البيانات "عشري". تحديث عمود لقيمة مسموح بها.
هناك 4 صفوف في صفحات 1 للكائن "جدول 2".
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في الجدول 'يعطي' (كائن معرف 2105058535).
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في قاعدة البيانات 'ريلداتا'. تم التنفيذ DBCC. إذا كان خطأ في طباعة DBCC رسائل، اتصل بمسؤول النظام.
DBCC نتائج 'table3'.
Msg 2570، مستوى 16, حالة 3، سطر 1
الصفحة (1:157)، والفتحة 0 في كائن معرف 2121058592، فهرس معرف تقسيم 0، 72057594038517760 معرف، وحدة تخصيص معرف 72057594042515456 (نوع "في صف بيانات"). العمود "col2" قيمة خارج نطاق نوع البيانات "تاريخ/وقت". تحديث عمود لقيمة مسموح بها.
هناك 3 صفوف في صفحات 1 للكائن "table3".
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في الجدول 'table3' (كائن معرف 2121058592).
CHECKDB العثور على أخطاء التخصيص 0 وأخطاء تناسق 1 في قاعدة البيانات 'ريلداتا'. تم التنفيذ DBCC. إذا كان خطأ في طباعة DBCC رسائل، اتصل بمسؤول النظام.
من أجل يتم إنشاء كل صف يحتوي على قيمة عمود غير صحيح، خطأ 2570.

إصلاح مشكلة نقاء البيانات

تعذر إصلاح الأخطاء 2570 استخدام أي إصلاح DBCC خيارات. وهذا لأنه من المستحيل DBCC لتحديد ما هي القيمة يجب أن يستخدم ليحل محل قيمة العمود غير صالح. ولذلك، يجب أن تكون قيمة عمود تحديث يدوياً.

لإجراء تحديث يدوي، يجب عليك العثور على الصف له المشكلة. هناك طريقتان لتنفيذ ذلك.
  • تنفيذ استعلام مقابل جدول يحتوي الحصول على قيم غير صحيحة للبحث عن الصفوف التي تحتوي على القيم غير صحيحة.
  • استخدام المعلومات من خطأ 2570 للتعرف الصفوف التي تحتوي على قيمة غير صحيحة.
نحن مناقشة كل من هذه الأساليب بالتفصيل أدناه، استخدام أمثلة للبحث عن الصفوف التي تحتوي على بيانات غير صالحة.

عندما تجد يحتاج قرار الصف الصحيح في القيمة الجديدة التي سيتم استخدامها استبدال البيانات الموجودة غير صالحة. هذا القرار يتعين بعناية استناداً إلى نطاق قيم العمل للتطبيق، وكذلك ما من المفيد منطقية لهذا الصف معينة من البيانات. لديك والخيارات:
  • إذا كنت تعرف ما هي القيمة التي يجب أن تكون، تعيينها إلى أن قيمة محددة.
  • تعيينها إلى قيمة افتراضية مقبولة.
  • تعيين قيمة العمود إلى قيمة خالية.
  • تعيين قيمة العمود إلى الحد الأدنى أو الحد الأقصى قيمة أن نوع بيانات العمود.
  • إذا كنت تشعر غير أي استخدام بدون صف معين قيمة صحيحة للعمود، يمكنك حذف هذا الصف تماما.

البحث عن الصفوف التي تحتوي على قيم غير صالحة باستخدام استعلامات T SQL

نوع الاستعلام الذي تحتاج إلى تنفيذ للبحث عن الصفوف التي تحتوي على قيم غير صحيحة يعتمد على نوع بيانات العمود الذي الإبلاغ عن مشكلة. إذا نظرت في رسالة الإعلام بالخطأ 2570، ستلاحظ جزءين مهمين من المعلومات التي سوف يساعدك هذا. في المثال التالي، العمود القيمة "account_name_japan" تقع خارج نطاق نوع البيانات "nvarchar." يمكننا التعرف بسهولة على العمود الذي يحتوي على المشكلة وكذلك نوع البيانات عمود المعنية. وهكذا، مرة واحدة معرفة نوع البيانات والعمود، يمكنك يمكنك وضع الاستعلام للبحث عن الصفوف التي تحتوي على قيم غير صحيحة لهذا عمود، تحديد الأعمدة لتحديد الصف (المسندات في جملة where) لأي مواصلة تحديث أو حذف.

نوع بيانات Unicode:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan FROM account_historyWHERE DATALENGTH(account_name_japan) % 2 != 0

نوع بيانات عشري:
-- 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
العشرية والرقمية نوع البيانات:
SELECT col1 FROM table2WHERE col2 > 9999999999.99999 OR col1 < -9999999999.99999
ضع في اعتبارك أن سوف تحتاج إلى ضبط قيم استناداً الدقة والمقياس التي عرفتها عمود عشري أو رقمي. في المثال أعلاه، تم تعريف العمود ك 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) الفتحة 0 في كائن معرف 2121058592، فهرس معرف 0، قسم 72057594038517760 معرف، وحدة تخصيص معرف 72057594042515456 (النوع "في صف بيانات"). قيمة العمود "col2" خارج نطاق نوع البيانات "تاريخ/وقت". تحديث عمود لقانوني قيمة.
في هذه الرسالة، سوف تلاحظ المعلومات: الصفحة (1:157) فتحه 0. هذه هي المعلومات التي تحتاج إلى تحديد الصف. فيليد هو 1، باجينفيلي 157، و SlotId هو 0. وبمجرد الانتهاء من هذه المعلومات، يمكنك بحاجة لتنفيذ الأمر، كما يلي:
DBCC TRACEON ( 3604 )DBCC PAGE ( realdata , 1 , 157 , 3 )
ستتم طباعة هذا الأمر محتويات صفحة بأكملها. المعلمات تكون الأوامر DBCC الصفحة:
  • اسم قاعدة البيانات
  • فيليد
  • باجينفيلي
  • خيار الطباعة
بمجرد تنفيذ هذا الأمر، ستلاحظ الإخراج الذي يحتوي على معلومات مماثلة للتنسيق التالي:
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 من الصفحة. من رسالة الخطأ، تعرف هو ذلك عمود 2 يعاني من المشكلة. حتى يمكنك الحصول على قيمة العمود 1 الفتحة 0 واستخدامه كدالة تقييم في جملة where من العبارة التحديث الخاصة بك أو بحذف جملة.

تحذير نوصي باستخدام الطريقة الأولى (هذا يعني، استخدام T SQL استعلامات للعثور على المعلومات المطلوبة). استخدام الأمر DBCC PAGE فقط اﻷخير. العناية القصوى أثناء استخدام هذا الأمر في إنتاج بيئة. من المستحسن استعادة قاعدة بيانات الإنتاج على اختبار ثم الحصول على كافة المعلومات المطلوبة باستخدام صفحة DBCC الملقم، ثم قم بإجراء التحديثات على خادم الإنتاج. كالعادة دائماً، تأكد من الاحتفاظ بنسخة احتياطية جاهزة في حالة وقوع أي خطأ واحتجت إلى العودة إلى نسخة سابقة من قاعدة البيانات.
مراجع
للحصول على مزيد من المعلومات حول عبارة DBCC CHECKDB، راجع موضوع "CHECKDB DBCC (TRANSACT-SQL)" في Microsoft Developer التالية موقع شبكة الاتصال (MSDN) على ويب: لمزيد من المعلومات حول المعروفة وإصلاحها في SQL Server 2000، انقر فوق رقم المقالة التالي لعرضها المقالة في "قاعدة المعارف ل Microsoft":
900335تصحيح: عملية الاسترداد التلقائي لقاعدة البيانات SQL Server 2000 قد لا تنجح إذا كان فهرس يحتوي على نوع بيانات عشري أو نوع بيانات حقيقية، ونوع البيانات هذا يحتوي على قيمة نان
للحصول على مزيد من المعلومات حول أحداث RPC، راجع الموضوع الفرعي "استدعاء" إجراء مخزن "(OLE DB)" على موقع "msdn على ويب" التالية:للحصول على مزيد من المعلومات حول أنواع بيانات مختلفة، راجع الموضوع الفرعي "استدعاء" إجراء مخزن "(OLE DB)" على موقع "msdn على ويب" التالية:لمزيد من المعلومات حول اصطلاحات قيمة نقطة عائمة، قم بزيارة موقع Intel على ويب التالي: Microsoft توفير معلومات جهة الاتصال من جهة خارجية لمساعدتك في العثور على الدعم الفني. قد تتغير معلومات الاتصال هذه بدون إشعار. Microsoft غير موجود تضمن دقة معلومات الاتصال الخاصة بجهة خارجية.

Warning: This article has been translated automatically

خصائص

رقم الموضوع: 923247 - آخر مراجعة: 03/22/2012 20:45:00 - المراجعة: 1.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 KbMtar
تعليقات