معرفی
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 و وارد كردن نام مشترك این كار را انجام دهیم .