SQL Server Replication

Replication راه حلي براي انتقال اطلاعات از يك بانك اطلاعاتي SQL sever به يك بانك اطلاعاتي ديگر از همان نوع و البته مستقر در يك محل و كامپيو تر ديگر است . اين فرآيند توسط ايجاد يك كپي از اطلاعات موجود در مبدا و انتقال به مقصد صورت مي گيرد .

در اين ارتباط اطلاعاتي اصطلاحا به كامپيو تر وبانك اطلاعاتي مبدا ، ناشر (publisher) و به كامپيو تر وبانك اطلاعاتي مقصد ، مشترك يا متعهد (subscriber) مي گويند البته اين نوع رابطه ، با وجود تنها يك ناشر اما يك يا چند مشترك امكان پذير است . بدين معني كه اطلاعات يك بانك اطلاعاتي در مبدا قابل انتقال به چند مقصد مختلف است . از نسخه 7 به بعد SQL severامكان تغيير اطلاعات در مقصد و انتقال آن به مبدا نيز وجود دارد . با اين وصف ، اين رابطه داده اي بين ناشر و مشترك ممكن است گاهي اوقات بر عكس شود و جاي مبدا و مقصد در يك مقطع زماني عوض شود . بدين ترتيب يك كامپيوتر مشترك يا مقصد مي تواند گاهي اوقات نقش ناشر يا مبدا در همان رابطه بازي كند . اين قابليت جديدMulti site update مي گويند .


در SQL sever ، سه نوع انتقال اطلاعات از طريق Replication وجود دارد . هر كدام از اين سه راه ، سناريو ي خاصي براي انتقال اطلاعات از مبدا به مقصد و يا برعكس را مديريت مي كنند كه در ادامه به بررسي آن ها مي پردازيم .

انتقال اطلاعات به روش ادغام (Merge)
اينوع انتقال اطلاعات كه از قابليت Multi site هم پشتيباني مي كند ، زماني مورد استفاده قرار مي گيرد كه استقلال داخلي هر بانك اطلاعاتي طرف يك رابطه ، به رسميت شناخته مي شود . بدين معني كه در يك رابطه انتقال اطلاعات ، هر كامپيو تر ضمن حف ظ ساختار بانك اطلاعاتي خود ، هم مي تواند نقش ناشر را داشته باشد و نقش مشترك را ايفا نمايد . در اين حالت هر تغييري در جداول مشترك هر طرف ديگر اعمال مي شود . نكته مهمي كه در اينجا مطرح است اين است كه چطور طرفين اين ارتباط متقابل بايد با هم هماهنگ باشند و اولويت يكديگر را به رسميت بشناسند . به عنوان مثال فرض كنيد در يك زمان واحد ، هر دو طرف بخواهند اطلاعاتي را در مورد يك جدول بانك اطلاعاتي به يكديگر ارسال كنند . (يعني بروز حالت تداخل) اين مشكل با استفاده از روش خاصي كه هر نوع Replication مخصوص خودش دارد قابل حل است . به طور كلي در حالت ادغام ، يك پايگاه داده حايل ميان ناشر و مشترك به عنوان توزيع گر ( Distributor) ساخته مي شود . اين پايگاه داده به نام Distributor در ليست پايگاه هاي داده اي ناشر قرار مي گيرد و وظيفه ايجاد همزماني (synchronization ) بين ناشر و مشتركين را ايفا مي كند .
پايگاه داده توزيع گر هم مي تواند در سمت ناشر و هم در يك كامپيوتر مياني ديگر (غير از كامپيو تر هاي سمت مشترك) قرار داشته باشد . اين پايگاه داده ضمن ايجاد همزماني در ردو بدل اطلاعات بين ناشر و مشترك ، اين امكان را نيز فراهم مي سازد تا مدير سيستم بتواند اولويت و در واقع ارجحيت جهت انتقال اطلاعات در زمينه بروز تداخل را مشخص كند . اين اولويت priority در زمان تعريف طرف هاي ناشر و مشترك يك Replication از نوع ادغام توسط مدير سيستم تنظيم مي شود .

تصوير برداري از اطلاعات (Snapshot)
در اين روش ابتدا يك تصوير كامل از آنچه كه بايد از سمت ناشر به سمت مشترك برود تهيه مي شود . اين تصوير هم شامل خود ساختار آنچه كه منتقل مي شود (مثلا ساختار يك جدول) و هم شامل اطلاعات داخل آن است . در ابتداي كار، تصويرمذكور عينا به مشترك فرستاده مي شود . روند و توالي ارسال اين تغييرات هم همانند حالت قبل (ادغام) طي يك فاصله زماني مشخص مثلا ساعتي يك بار كه توسط مدير سيستم قابل تنظيم است ، انجام مي گيرد .
يكي از مزاياي اين روش نسبت به حالت ادغام ، اين است كه زمان كمتري از وقت مدير سيستم را جهت پيكر بندي و تنظيم عمل انتشار صرف مي كند و به دليل اينكه در ابتداي عمل انتشار، خود ساختار نيز عينا به مشترك منتقل مي شود ، از قابليت اطمينان بيشتري برخوردار است . به طور كلي كاربرد اين نوع انتقال اطلاعات ، زماني است كه مدير سيستم قصد ايجاد يك ارتباط ساده و يكطرفه ولي مطمئن دارد

انتقال بر اساس فرآيند (Transactional)
اين روش يكي از بهترين و قابل كنترل ترين روش هاي انتقال است. در اين روش هر تغييري كه در جداول ناشر صورت مي گيرد ، به صورت يك دستور SQL درآمده كه تحت يك فرآيند واحد هم در سمت كليه مشتركين اجرا مي شود . در اين صورت اگر به طور مثال يكي از مشتركين به دليلي با اشكال مواجه شده و تغيير مورد نظر در آن انجام نشود ، اين تغيير نه در خود ناشر و نه در هيچ كدام از مشتركين ديگر نيز انجام نخواهد شد ، بدين معني كه يا يك تغيير در اطلاعات براي تمام كامپيوتر ها اعم از ناشر و كليه مشتركين انجام مي شود و يا اين كه براي هيچ كدام انجام نخواهد شد در اين حالت هم يك پايگاه داده به واسطه به نام Distribution نقش دريافت وارسال فرآيند را به طرف مشترك ايفا مي كند . در واقع روش فرآيند ، در مقايسه با دو روش قبل از حالت به هنگام (online) بودن بيشتري برخورداراست . يعني اين كه هر فرآيند و هر دستور در همان لحظه كه مي خواهد در ناشر اجرا شود ، به واسط فرستاده شده و سپس در يك زمان واحد در كليه مشتركين نيز انجام مي شود و در واقع زمان تغيير اطلاعات در ناشر و در مشتركين تقريبا يكسان است . همچنين در اين روش تداخلي هم پيش نمي آيد . چون هر تغييري ابتدا بايد به واسط فرستاده شود و از آن جا به جاهاي ديگر ارسال شود و واسط هم آن ها را در يك صف اولويت (priority queue) قرار داده و به ترتيب انجام مي دهد . نتيجه اين نوع انتقال اطلاعات ، داشتن چند پايگاه داده كاملا يكسان و به هنگام در مكان هاي مختلف است كه همگي از يك ناشر ، اطلاعات مورد نظر را دريافت مي كنند .

تعريف ناشر و مشتركين
براي تعيين يك  SQL Serverوان ناشر ، كافي است يك رابطه Replication براي آن تعريف كرده و پس از انجام تنظيمات مربوطه و طي يك مراحل خاص هر يك از سه نوع انتقال اطلاعات ، آن كامپيوتر را به عنوان مبدا يا ناشر يك فرآيند انتقال معرفي كنيم . در همين حين و براي ايجاد پايگاه داده واسط يا همان توزيع گر (Distributor) هم مي توان وارد عمل شده و خود ناشر را به عنوان توزيع گر آن فرآيند انتقال معرفي كنيم . پس از اين كار نوبت به تعريف مشتركين مي رسد . براي تعريف يك مشترك از دو راه مي توان اقدام كرد ، كه هر يك كاربرد مخصوص به خودرادارند . در روش اول كه فرستادن اطلاعات به طرف يك مشترك است و در اصطلاح push ناميده مي شود . بدين معني كه مدير سيستم مي تواند بلا فاصله پس از تعريف يك ارتباط و ناشر آن از همان لحظه و در همان محل استقرارناشر ، مشتركين را يك به يك به اين نوع ارتباط دعوت و اضافه كند و اطلاعات را به سمت آنها بفرستد . اين ارتباط به دليل اين كه كامكلا از طرف ناشر، كنترل مي شود، از حالت به هنگام بيشتري (online) برخوردار است و اطلاعات بلا فاصله به سمت مشترك فرستاده مي شود . در روش دوم كه pull نام دارد ، تعريف مشترك از سمت خودش انجام مي شود و در واقع اين مشترك است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي است كه اطلاعات را از ناشر طلب مي كند . اين حالت بيشتر در مواقعي كاربرد دارد كه اولا تعداد مشتركين از قبل براي ناشر مشخص نيست و ثانيا بروز بودن اطلاعات در آن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات درآن واحد از اهميت حياتي براي سيستم برخوردار نيست و انتقال اطلاعات مي تواند با تاخير و با درنگ زماني و در زمان دلخواه مشترك انجام شود

طرح يك مسئله
فرض كنيد مي خواهيم با استفاده از مكانيسم Replication ، اطلاعات موجود در بانك اطلاعاتي Northwind را از يك پايگاه داده SQL server به نام server به يك بانك اطلاعاتي به همان نام و بر روي يك پايگاه داده ديگر مستقر در يك سرور راه دور به نام Home server منتقل كنيم . براي اين كار مي توانيم از هر كدام از سه روش انتقال اطلاعات ، استفاده نماييم .

مراحل ايجاد ناشر
براي اين كار ، در پنجره Enterprise Manager بر روي گزينه Publication از آيتم Replication كليك سمت راست نموده فرمان New را انتخاب مي نماييم . با آغاز ويزارد مخصوص ، كليد Next را كليك كرده و در صفحه بعد در پاسخ به اين سوال كه آيا مي خواهيد پايگاه داده توزيع گر (Distributor) درهمين كامپيوتر ساخته شود يا خير ، گزينه اول يعني خود كامپيوتر server را انتخاب مي كنيم و به مرحله بعد مي رويم .
در پنجره بعدي از كاربر خواسته مي شود تا فولدري را جهت قرار دادن فايل هاي مربوط به عمليات انتقال مشخص كند . وجود اين فولدر براي انجام عمل Distributeضروري است و بايد طوري انتخاب شود كه در شبكه اي كه قرار است مشتركين به آن بپيوندند قابل دسترسي باشد . پس از انتخاب اين فولدر و كليك بر روي كليد Next ، در مرحله بعد نام بانك اطلاعاتي مورد نظر يعني Northwind را از داخل ليست انتخاب كرده و به مرحله اصلي يعني انتخاب نوع Replication مي رسيم كه در اين جا همان گزينه اول يعني snapshot را انتخاب مي كنيم .
سپس در مرحله بعد بايد هر موجوديتي اعم از جداول و روال هايي، را كه مي خواهيم در اين عمليات انتقال وجود داشته باشند ، معرفي كنيم براي مثال جدول مشتريان (customers) را از داخل ليست جداول علامت زده و به مرحله بعد مي رويم . در مرحله بعد يك نام براي عمليات انتقال انتخاب كرده و كليد Next را مي زنيم و در نهايت با كليك بر روي عبارت Finish عمليات را پايان مي دهيم .

مراحل ايجاد مشتركين
روش Pull (از طريق مشترك)
براي ايجاد يك مشترك با روش pull ، به كامپيوتر مشترك مراجعه كرده و بر روي گزينه subscription كليك سمت راست كرده و فرمان New pull را انتخاب مي كنيم . سپس از داخل پنجره بعدي گزينه دوم يعني Look in the Active Directory را انتخاب مي نماييم . در مرحله بعد نام ناشر و سپس بانك اطلاعاتي مورد نظر ، نام عمل نشر كه در ناشر تعريف كرديم و سپس رمز عبور مربوط به يك كاربر معتبر در ناشر مثلا كاربر sa را وارد نماييم .
در قسمت بهد هم نام بانك اطلاعاتي مقصد را كه همان Northwind است انتخاب مي ناميم . پس از طي چند مرحله ديگر كه نياز به تغييري در آن ها نيست و صرفا با كليك بر روي كليد Next ، مقادير پيش فرض را تاييد مي كنيم به مرحله انتخاب توالي زماني به روز شدن مشترك مي رسيم . در اين جا هم بايد بين سه روش مختلف يعني حالت هاي بلا درنگ ، زمان دار ، بر اساس در خواست ، يكي را انتخاب كنيم كه در اين جا همان نوع اول يعني بلادرنگ را انتخاب مي نماييم .
با اين كار مراحل تعريف يك مشترك از طريق Pull پايان مي پذيرد . اما نكته مهمي كه در اين جا بايد به آن اشاره كنيم اين است كه براي فراهم ساختن امكان تعريف مشتركين از طريق Pull حتما بايد اين اجازه را قبلا و از طريق ناشر به كاربران مشترك داده باشيم . براي اين كار ، قبل از تعريف مشترك ، بايد در كامپيوترناشر ، بر روي نام عمليات انتقال ايجاد شده كليك سمت راست كرده و گزينه خصوصيات (properties)را انتخاب نماييم . سپس زبانه subscription را باز كرده و مطمئن شويم كه گزينه هاي Allow anonymous و همچنين Allow Pull در حالت تاييد شده باشند .
روش push (از طريق ناشر)
براي تعريف يك مشترك با استفاده از روش Push ، به كامپيو تر ناشر مراجعه كرده و بر روي نام عمليات نشر كه قبلا ايجاد كرده ايم كليك سمت راست مي كنيم . با شروع مراحل ويزارد ، نام كامپيوتر مشترك را از ليست انتخاب مي كنيم . در مراحل بعدي با معرفي بانك اطلاعاتي Northwind به عنوان مقصد به پنجره ويژه تعريف زمان به روز شدن مشترك مي رسيم كه از بين دو نوع بلادرنگ و زماندار قابل انتخاب است . كه باز هم نوع اول را انتخاب مي كنيم . در مرحله بعد هم مطمئن مي شويم كه گزينه start snapshot agent درحالت تاييد قراردارد و سپس با چند كليك بر روي كليد Nextعمليات را پايان مي دهيم . نكته بسيار مهمي كه براي تعريف مشترك از طريق روش push بايد در نظر داشته باشيم اين است كه براي ظاهر شدن نام هر مشترك درليست انتخاب كه در شكل 8 ملاحظه كرديد ، بايد قبلا اين مشترك با استفاده از عمليات Registration در كامپيوتر ناشر تعريف شده باشد . در غير اين صورت نام آن در داخل ليست مشتركين ظاهر نمي شود . عمل مذكور هم در يك محيط شبكه اي بسيار آسان است . كافي است بر روي SQL server Group در كامپيوتر ناشر كليك راست كرده و با انتخاب New Registration و وارد كردن نام مشترك اين كار را انجام دهيم .