۱۳۸۸/۰۲/۰۱

مقايسه ساختاري دو ديتابيس SQL Server


يكي از مواردي كه در محيط كاري زياد پيش مي‌آيد بحث همگام نبودن ديتابيس توسعه با ديتابيس كاري است.
منظور از ديتابيس توسعه، همان ديتابيسي است كه براي برنامه نويسي و آزمايش از آن استفاده مي‌شود و ديتابيس كاري هم مشخص است (براي مثال بر روي يك سرور در اينترانت داخلي يك شركت و يا بر روي يك سرور اينترنتي قرار دارد). عادت‌هاي مختلفي هم اين‌جا ممكن است وجود داشته باشد، براي مثال تغييرات جديد بر روي ديتابيس كاري اعمال شود و سپس فراموش شود كه همان‌ها نيز بايد به ديتابيس توسعه هم اعمال شوند تا در تغييرات بعدي براي آزمايش دچار مشكل نشويم و برعكس. بعد از يك مدت هم تبديل به كابوس مي‌شود؛ نمي‌دانيم الان ديتابيس كاري جديدتر است يا ديتابيس توسعه؛ و يا اينكه كلا دو ديتابيس مفروض چه تفاوت‌هاي ساختاري با هم دارند (بديهي است بحث ديتا در اينجا در درجه‌ي اول اهميت قرار ندارد). فرصت اين هم وجود ندارد كه تك تك جداول، ويووها، رويه‌هاي ذخيره شده و خلاصه تمامي اشياء مرتبط را بررسي كنيم كه چه اختلافي با هم دارند. اينجا مستندات هم كمكي نخواهند كرد چون صحبت از يك جدول با 5 فيلد در ميان نيست كه موارد را سريع و به صورت دستي تطابق دهيم. همچنين اين مشكل عموما زماني رخ مي‌دهد كه يكي از دو طرف در حال حاضر مستندات كامل و به روزي ندارد. اكنون چه بايد كرد؟
اولين فكري كه به ذهن خطور مي‌كند مراجعه به ابزارهاي جانبي است (مثلا Red Gate's SQL Compare چند صد دلاري) غافل از اينكه خود Visual studio 2008 (نگارش‌هاي تيمي و ديتابيسي) اين قابليت را نيز ارائه مي‌دهد (شكل زير).


پس از انتخاب new schema comparison ، در صفحه‌اي كه ظاهر مي‌شود، بر روي new connection كليك كرده و ديتابيس‌هاي مبداء و مقصد را جهت مقايسه ساختاري انتخاب نمائيد و سپس بر روي دكمه Ok كليك كنيد.


اگر اس كيوال سرور 2008 را نصب كرده باشيد، با پيغام زير روبرو خواهيد شد:


براي رفع اين مشكل بايد بسته به روز رساني زير را نصب كرد تا اين نگارش نيز پشتيباني شود:

(براي نصب حتما بايد SP1 مربوط به VS.Net 2008 پيشتر نصب شده باشد)

پس از كليك بر روي دكمه Ok، كار آناليز دو ديتابيس شروع شده و تفاوت‌ها گزارش داده مي‌شوند:


همچنين جهت سهولت كار، اسكريپت T-SQL ايي را نيز به نام schema update script توليد مي‌كند كه با اجراي آن به سادگي كار به روز رساني ديتابيس مقصد صورت خواهد گرفت.


در پايان يا مي‌توان اسكريپت توليد شده را ذخيره كرد و در زماني دلخواه اجرا و اعمال نمود و يا مي‌توان بلافاصله بر روي دكمه write updates كه در نوار ابزار ظاهر شده است كليك كرد تا ديتابيس مقصد از لحاظ ساختاري با ديتابيس مبداء يكي شود.