PDA

View Full Version : replication؟



dell816
شنبه 30 تیر 1386, 22:13 عصر
:متفکر:مقاله راجع به Replication دارید؟

rezarafiee
یک شنبه 31 تیر 1386, 09:54 صبح
منبع: از مجله شبکه شماره چهل و هشتم (http://www.shabakeh-mag.com/Articles/Show.aspx?n=1001455)


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

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

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

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

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

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

مراحل ایجاد ناشر

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

مراحل ایجاد مشترکین
1- روش Pull ( از طریق مشترک )
برای ایجاد یک مشترک با روش pull ، به کامپیوتر مشترک مراجعه کرده و بر روی گزینه subscription کلیک سمت راست کرده و فرمان New pull را انتخاب می کنیم . سپس از داخل پنجره بعدی گزینه دوم یعنی Look in the Active Directory را انتخاب می نماییم . در مرحله بعد نام ناشر و سپس بانک اطلاعاتی مورد نظر ، نام عمل نشر که در ناشر تعریف کردیم و سپس رمز عبور مربوط به یک کاربر معتبر در ناشر مثلا کاربر sa را وارد نماییم .
در قسمت بهد هم نام بانک اطلاعاتی مقصد را که همان Northwind است انتخاب می نامیم . پس از طی چند مرحله دیگر که نیاز به تغییری در آن ها نیست و صرفا با کلیک بر روی کلید Next ، مقادیر پیش فرض را تایید می کنیم به مرحله انتخاب توالی زمانی به روز شدن مشترک می رسیم . در این جا هم باید بین سه روش مختلف یعنی حالت های بلا درنگ ، زمان دار ، بر اساس در خواست ، یکی را انتخاب کنیم که در این جا همان نوع اول یعنی بلادرنگ را انتخاب می نماییم .
با این کار مراحل تعریف یک مشترک از طریق Pull پایان می پذیرد . اما نکته مهمی که در این جا باید به آن اشاره کنیم این است که برای فراهم ساختن امکان تعریف مشترکین از طریق Pull حتما باید این اجازه را قبلا و از طریق ناشر به کاربران مشترک داده باشیم . برای این کار ، قبل از تعریف مشترک ، باید در کامپیوترناشر ، بر روی نام عملیات انتقال ایجاد شده کلیک سمت راست کرده و گزینه خصوصیات (properties)را انتخاب نماییم . سپس زبانه subscription را باز کرده و مطمئن شویم که گزینه های Allow anonymous و همچنین Allow Pull در حالت تایید شده باشند .

2- روش push (از طریق ناشر )
برای تعریف یک مشترک با استفاده از روش Push ، به کامپیو تر ناشر مراجعه کرده و بر روی نام عملیات نشر که قبلا ایجاد کرده ایم کلیک سمت راست می کنیم . با شروع مراحل ویزارد ، نام کامپیوتر مشترک را از لیست انتخاب می کنیم . در مراحل بعدی با معرفی بانک اطلاعاتی Northwind به عنوان مقصد به پنجره ویژه تعریف زمان به روز شدن مشترک می رسیم که از بین دو نوع بلادرنگ و زماندار قابل انتخاب است . که باز هم نوع اول را انتخاب می کنیم . در مرحله بعد هم مطمئن می شویم که گزینه start snapshot agent درحالت تایید قراردارد و سپس با چند کلیک بر روی کلید Nextعملیات را پایان می دهیم . نکته بسیار مهمی که برای تعریف مشترک از طریق روش push باید در نظر داشته باشیم این است که برای ظاهر شدن نام هر مشترک درلیست انتخاب که در شکل 8 ملاحظه کردید ، باید قبلا این مشترک با استفاده از عملیات Registration در کامپیوتر ناشر تعریف شده باشد . در غیر این صورت نام آن در داخل لیست مشترکین ظاهر نمی شود . عمل مذکور هم در یک محیط شبکه ای بسیار آسان است . کافی است بر روی SQL server Group در کامپیوتر ناشر کلیک راست کرده و با انتخاب New Registration و وارد کردن نام مشترک این کار را انجام دهیم .