View Full Version : راهکار های انتقال اطلاعات از چند پایگاه داده در شهر های مختلف به پایگاه ها داده مرکزی
m0rteza
جمعه 02 مرداد 1388, 11:35 صبح
سلام
بنده یک برنامه نوشتم که قرار در شهر های مختلف نصب بشه . در هر برنامه تصمیم گرفتم در هنگام ذخیره اطلاعات کدی برای شهر در نظر بگیرم. تا با استفاده از این کد ها در شهر مرکزی بتوان اطلاعات را به تفکیک شهر نمایش داد.
فعلا VPN موجود نیست . برای این کار دوستا گفته اند :
1) انتقال داده با مودم : اگر اطلاعاتی در این خصوص در دست دوستان است بفرمایند
2) انتقال با فایل :
یعنی در هر شهر داده ها را در یک فایلی چیزی بریزن و و به صورت حضوری تحویل شهر مرکز دهند .و شهر مرکز این فایل را به برنامه تحویل دهد.
ساختار این فایل چگونه باید باشد ؟ کلا راهنمایی در این خصوص بفرمایید
meysam_pro
جمعه 02 مرداد 1388, 12:14 عصر
روش استاندارد برای این کار Replication هستش.
اگه نتونستی Replication رو راه اندازی کنی ، می تونی با استفاده از Tigger ها داده های وارد شده به سیستم رو به صورت رشته Insert into یا Delete یا... در بیاری و توی فایل متنی بریزی. بعدا میتونی از طریق یک مودم داده ها رو انتقال بدی.
m0rteza
جمعه 02 مرداد 1388, 12:46 عصر
دوست عزیز ممنون .
دارم روی روش اول تحقیق میکنم ولی یه مشکل وجود داره . اینجور فهمیدم عمل replication فقط توسط Sql Server انجام میشه. و کابرای من باید فرض کنم کاربرام هیچی از Sql Server بلد نیستن . ولی واقعا ممنون . یک مطلب خوب ازتون یاد گرفتم.
و اینکه میشه روش دوم رو بیشتر توضیح بدید؟ و چطور این کار رو برای داده هایی که فرستاده نشده اند فقط انجام بدم
ممنون
meysam_pro
جمعه 02 مرداد 1388, 13:50 عصر
قرار نیست کاربر از Replicate شدن خبردار بشه.
اینکه میشه روش دوم رو بیشتر توضیح بدید؟
تریگری بنویسید که کار انجام شده مثلا:insert into tblMainProperty values(v1,v2) در برنامه استفاده شده، شما همین رشته رو از طریق Trigger درست کنید و ...
چطور این کار رو برای داده هایی که فرستاده نشده اند فقط انجام بدم
رشته ها رو به صورت تک تک یا خوشه ای بفرستید و فلگ مربوطه رو اصلاح بکنید(توصیه می کنم تو دیتابیس ذخیره بکنید.)
m0rteza
جمعه 02 مرداد 1388, 14:20 عصر
واقعا عذر می خوام .
اینجور که من از حرفای شما فهمیدم یعنی اینکه بعد از هر عمل Insert و Update و Delete ، رشته ی تولید شده جهت نجام این کار ها رو ذخیره کنم و بعد اونها رو روی پایگاه داده مقصد اجرا کنم
درسته ؟
تریگری بنویسید که کار انجام شده مثلا:insert into tblMainProperty values(v1,v2) در برنامه استفاده شده، شما همین رشته رو از طریق Trigger درست کنید و ...
میشه کمی در این مورد واضح تر توضیح بدید؟
ممنون
AminSobati
جمعه 02 مرداد 1388, 14:43 عصر
سلام دوست عزیزم،
اولین گزینه من Replication هست. اما روشی که در پست دوم مطرح شد هم قابل بررسیه به شرط اینکه انتقال تغییرات یک طرفه باشه.
برای تفکیک اطلاعات در نقطه مرکزی، قطعا در طراحی دیتابیس شما میبایست فیلدی برای مشخص کردن اینکه اطلاعات از کجا وارد سیستم شده در نظر گرفته باشید
m0rteza
جمعه 02 مرداد 1388, 15:07 عصر
سلام ممنون آقای ثباتی
میشه در مورد Replication توضیح بفرمایید. آیا با وجود اینکه کاربران به VPN مجهز نیستن میشه از این روش استفاده کرد؟ این روش چه نیازمندی هایی رو می طلبه؟
و میشه کمی در مورد روش دوم هم شما توضیح بدید.
ممنون از هر دو دوست عزیز
meysam_pro
جمعه 02 مرداد 1388, 16:02 عصر
اینجور که من از حرفای شما فهمیدم یعنی اینکه بعد از هر عمل Insert و Update و Delete ، رشته ی تولید شده جهت نجام این کار ها رو ذخیره کنم و بعد اونها رو روی پایگاه داده مقصد اجرا کنم
بله، دقیقا. در مورد نوشتن تریگر یک تاپیک جدید ایجاد کنین تا اونجا بحث کنیم.
راه اندازی Replication و تنظیمات اون یه کمی زمانبره ، در ثانی گهگاه بعد Down شدن سرور[که پیش میاد] یه Error هایی میده که آدم هیچی نمیفهمه!
این قضیه تریگر رو هم که گفتم از رو Replication ور داشتم(یه دفعه اونقدر Errorداد که میخواسم سرور رو Reset کنم:عصبانی++: )
meysam_pro
جمعه 02 مرداد 1388, 16:06 عصر
معرفي
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 و وارد كردن نام مشترك اين كار را انجام دهيم .
منبع (http://www.iritn.com/index.php?action=show&type=news&id=5909)
AminSobati
جمعه 02 مرداد 1388, 22:16 عصر
سلام ممنون آقای ثباتی
میشه در مورد Replication توضیح بفرمایید. آیا با وجود اینکه کاربران به VPN مجهز نیستن میشه از این روش استفاده کرد؟ این روش چه نیازمندی هایی رو می طلبه؟
و میشه کمی در مورد روش دوم هم شما توضیح بدید.
ممنون از هر دو دوست عزیز
سلام!
میتونین با خطوط تلفن هم Replication برقرار کنید. البته اگر حجم اطلاعات برای تبادل در این حد باشه
m0rteza
شنبه 03 مرداد 1388, 01:57 صبح
میتونین با خطوط تلفن هم Replication برقرار کنید. البته اگر حجم اطلاعات برای تبادل در این حد باشه
میشه در این باره یکم توضیح مرحمت کنید
AminSobati
شنبه 03 مرداد 1388, 13:29 عصر
از دو تا کامپیوتر یکی به اونیکی زنگ میزنه، بعد از Connect شدن IP میگیرن. بعد باید Replication رو Config کرد. البته سوال شما پاسخش خیلی تفصیل داره و توصیه میکنم حداقل تجربه Replication در حالت Local رو پیدا کنید بعد برین سراغ کار اصلی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.