كيف يمكنني الحفاظ على مخطط قاعدة بيانات متسق عبر 18 قاعدة بيانات (خادم SQL)؟

StackOverflow https://stackoverflow.com/questions/93804

سؤال

لدينا 18 قاعدة بيانات يجب أن تحتوي على مخططات متطابقة، لكن لا.في بعض السيناريوهات، تمت إضافة جدول إلى أحدهما، ولكن ليس الباقي.أو، كانت بعض الإجراءات المخزنة مطلوبة في عدد قليل من قواعد البيانات، ولكن ليس في القواعد الأخرى.أو نسي مسؤول قواعد البيانات لدينا تشغيل برنامج نصي لإضافة طرق عرض على جميع قواعد البيانات.

ما هي أفضل طريقة للحفاظ على مزامنة مخططات قاعدة البيانات؟

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

المحلول

بالنسبة للإصلاحات/التنظيفات القديمة، هناك أدوات، مثل SQLCompare, ، والتي يمكنها إنشاء برامج نصية لمزامنة قواعد البيانات.

بالنسبة لمتاجر .NET التي تستخدم SQL Server، يوجد أيضًا إصدار قاعدة بيانات Visual Studio, ، والتي يمكنها إنشاء برامج نصية للتغيير لتغييرات المخطط التي يمكن التحقق منها في التحكم بالمصدر، ويتم إنشاؤها تلقائيًا باستخدام عملية CI/build الخاصة بك.

نصائح أخرى

مقارنة SQL بواسطة Red Gate هي أداة عظيمة لهذا الغرض.

SQLCompare هي أفضل أداة استخدمتها للعثور على الاختلافات بين قواعد البيانات ومزامنتها.

للحفاظ على مزامنة قواعد البيانات، يجب أن يكون لديك عدة أشياء:

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

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

استخدم كل ما يناسب حالتك وميزانيتك، ما عليك سوى الحصول على عملية، والحصول على الأدوات التي تناسب هذه العملية.

3) قلت أنه في بعض الأحيان تحتاج الكائنات فقط إلى الانتقال إلى عدد قليل من قواعد البيانات.مع وجود 18 قاعدة بيانات فقط، ربما على خادم واحد، أوصي بجعل كل قاعدة بيانات تطابق الكائنات تمامًا.5 قواعد بيانات فقط تحتاج إلى usp_DoSomething؟وماذا في ذلك؟وضعه في كل قاعدة بيانات.سيكون هذا أسهل بكثير في الإدارة.لقد فعلنا ذلك بهذه الطريقة على نظام مكون من 6 خوادم بحوالي 250-300 قاعدة بيانات.وكانت هناك استثناءات، ولكن تم تجميعها.حصلت قواعد البيانات الموجودة على الخادم C على هذه المجموعة الإضافية من الكائنات.حصلت قواعد البيانات الموجودة على الخادم L على هذه المجموعة الأخرى.

4) لقد قلت أنه في بعض الأحيان ينسى مسؤول قاعدة البيانات نشر البرامج النصية للتغيير على جميع قواعد البيانات.يخبرني هذا أنه يحتاج إلى أدوات لنشر التغييرات.من المحتمل أنه يأخذ برنامج نصي SQL، ويفتحه في Query Analyzer أو Manegement Studio (أو أي شيء تستخدمه) وينتقل يدويًا إلى كل قاعدة بيانات وينفذ SQL.وهذا ليس حلاً جيدًا على المدى الطويل (أو القصير). البوابة الحمراء (صانعو SQLCompare أعلاه) لديهم العديد من الأدوات الرائعة. متعدد النصوص يبدو أنه قد يعمل لأغراض النشر.لقد عملت مع DBA الذي كتب أداة خاصة به في SQL Server 2000 باستخدام O-SQl.سيستغرق الأمر ملف SQL وتنفيذه على كل قاعدة بيانات على الخادم.كان عليه تنفيذه على كل خادم، لكنه كان يتفوق على التنفيذ على كل قاعدة بيانات.لقد ساعدت أيضًا في كتابة أداة VB.net من شأنها أن تفعل الشيء نفسه، باستثناء أنها ستمر أيضًا عبر قائمة الخوادم، لذلك يجب تنفيذها مرة واحدة فقط.

5) التحكم بالمصدر.فريقي الحالي لا يستخدم التحكم بالمصادر، وليس لدي الوقت الكافي لإخبارك بعدد المشاكل التي يسببها هذا.إذا لم يكن لديك نوع من نظام التحكم بالمصدر، فاحصل على واحد.

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

بصرف النظر عن استخدام أدوات مقارنة قواعد البيانات، مع وجود 18 قاعدة بيانات، يجب أن يكون لديك DBA، لذا قم بفرض سياسة مفادها أن DBA فقط يمكنه تغيير الجداول على مستوى قاعدة البيانات عن طريق تقييد الوصول إلى CREATE وALTER إلى DBA فقط.على كل من قواعد البيانات الاختبارية والمباشرة.لا ينبغي لقاعدة بيانات التطوير أن تحتوي على هذا بالطبع!اجعل المطورين الذين قاموا بإنشاء المخططات أو تعديلها طوعًا أو كرها يذهبون عبر DBA.

قم بإنشاء برنامج نصي DDL/SQL واحد يتم التحكم فيه من المصدر لكل إصدار و فقط استخدامه لتحديث قواعد البيانات.يمكن أن تكون أدوات الاختلاف مفيدة ولكن بشكل أساسي للتحقق من أنك لم ترتكب أي خطأ والخروج من المشاكل عند فشل السياسات.قم بدمج البرامج النصية DDL وSQL والإجراءات المخزنة في برنامج نصي واحد بحيث لا يكون من السهل "نسيان" تشغيل أحد البرامج النصية.

لدينا أداة تسمى DB Schema Difftective يمكنها مقارنة مخططات قاعدة البيانات ومزامنتها.باستخدام أداتنا الأخرى، DB MultiRun، يمكنك بسهولة نشر البرامج النصية (المتزامنة) التي تم إنشاؤها إلى خوادم قاعدة بيانات متعددة (قائمة على المشروع).

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

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