سؤال

قاعدة البيانات الخاصة بنا هي سكل سيرفر 2008 ر2.لدينا بعض الجداول التي تحتوي على بعض الأعمدة فارتشار(500) التي أريد التبديل إلى داتيتيم 2 أو بيجينت.يمكنني أن أضمن أن جميع البيانات الموجودة في الأعمدة المراد تبديلها صالحة للنوع المناسب.تؤثر تغييرات العمود على الفهارس ، ولكن ليس على المفاتيح.

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

  1. إنشاء جدول مؤقت عبر تحديد في ، وإسقاط الجدول القديم وإعادة إنشاء الجدول مع أنواع البيانات المناسبة.إعادة الفهارس.
  2. تغيير أنواع الجدول / البيانات الحالية عبر ALTER TABLE x ALTER COLUMN Y datetime2 ثم إعادة بناء أو إعادة إنشاء الفهارس.

لأنني واثق من أن البيانات سيتم تحويلها بشكل نظيف ، فأنا أميل نحو #2.زميلي وصديق ديسيبل تفضل #1 ولكن زميلي لا يمكن أن نتذكر لماذا تدربوا عليه بهذه الطريقة.صديق ديسيبل في إجازة لذلك لم أسأله لماذا.

هل يمكن لأي شخص تقديم نظرة ثاقبة حول الخيار الذي يعتقد أنه أفضل ولماذا?في نهاية المطاف هو قراري وأنا أتساءل لماذا #1 يفضل على #2?

هل كانت مفيدة؟

المحلول

لقد فعلت ذلك مؤخرا في مؤسستي حيث أردنا التعامل مع جدول يحتوي على مليار + صف.

كل الفضل في الفكرة يعود إلى آرون برتراند وهو من منشور مدونته لقطات خدعة :مخطط التبديل واحد في رو

اختبار أدناه عملية على طاولة صغيرة والحصول على نفسك مريحة قبل القيام بذلك في همز.

  1. إنشاء 2 المخططات fake و shadow مع إذن dbo.
  2. إنشاء جدول مع الأعمدة وأنواع البيانات التي تريدها في shadow مخطط على سبيل المثال. create table shadow.Correct_Table ...
  3. إدراج البيانات وإنشاء كافة الفهارس التي يحتوي عليها الجدول الأصلي في shadow جدول المخطط.
  4. بهذه الطريقة يكون لديك نسخ متطابقة من الجدول مع البيانات والفهارس ولكنها في مخططات مختلفة (منفصلة منطقيا).
  5. بمجرد الانتهاء من تحديث الإحصائيات على الطاولة باستخدام shadow مخطط.
  6. قم بتبديل المخططات (هذه عملية بيانات وصفية وسريعة للغاية)

    --- ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
    
    BEGIN TRANSACTION;
    
      ALTER SCHEMA fake TRANSFER     dbo.original_table;
      ALTER SCHEMA dbo  TRANSFER  shadow.Correct_Table;
    
    COMMIT TRANSACTION;
    
    ALTER SCHEMA shadow TRANSFER fake.Lookup;
    
  7. قم بإجراء فحص نهائي لمعرفة ما إذا كان كل شيء يسير كما هو مخطط له.يجب عليك القيام به select count(1) from dbo.Correct_table

  8. بمجرد تأكيد الخطوة 7 وأنت سعيد ، أسقط shadow.table, shadow المخطط و fake المخطط كما تنظيف.

نصائح أخرى

هنا هي الطريقة التي أراها.

pros for # 1

  • لأنك تستخدم جدول منفصل، يبقى جدول الإنتاج الخاص بك قيد الاستخدام حتى يتم ذلك. لا يوجد أقفال عليها (تتجاوز تلك اللازمة لقراءة البيانات).
  • هذا يذهب أيضا مع ما قاله aaaronberrand: يمكنك القيام بذلك مجزأة، اختبار الخ
  • يمكنك تغيير ترتيب العمود عند الحاجة

pros for # 2

  • إنها عملية كل شيء أو لا شيء. لا توجد فرصة لنفقد البيانات التي أدخلت / تم تعديلها في الجدول الأصلي أثناء كونك تبحث.
  • يتم الاحتفاظ
  • أي أذونات تم تعيينها خصيصا للكائن. إذا كنت تستخدم # 1، فعليك التأكد من لك النصي وتطبيقها.

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

كن حذرا مع خيار الإسقاط وإعادة الإنشاء:هذا يمكن أن يترك سيس.يعتمد في حالة غريبة ويسبب مشاكل للخطط المخزنة مؤقتا حيث يتغير ترتيب الأعمدة أو نوعها.

ستحتاج أيضا إلى اتخاذ خطوات للحفاظ على أي أذونات على مستوى الكائن ، حيث سيتم فقدها في DROP وليس صوغه تلقائيا مع لاحقة CREATE.

ALTER TABLE هو الخيار الأنظف المنظمة البحرية الدولية ، ولكن تأكد من اختبار دقيق قبل القيام بذلك في الإنتاج على حد سواء للتأكد من كل شيء على ما يرام بعد ذلك والتأكد من أنك تعرف كم من الوقت سوف تأخذ العمليات (على جدول مع العديد من الصفوف هذا يمكن أن يكون وقتا طويلا).

انتهى زميلي في العثور على مقال حول ما كان يشير إليه: http:// www.nigelrivett.net/sqladmin/altertableprolems.html .بعد قراءة هذا وتحقيق الإبلاغ عن نهاية العام، قررنا عدم إجراء التعديلات على أنواع الأعمدة وسوف تعيد تنشأ هذا في الشهرين المقبلين.أفكر بعد قراءة المقال، قد أذهب فقط مع طريقة إسقاط / إنشاء.

شكرا للجميع لملاحظاتهم على هذا.العديد من النهج المثيرة للاهتمام للنظر عندما نقرر المضي قدما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى dba.stackexchange
scroll top