PDA

View Full Version : سوال: ادغام دو دیتابیس



mehdi.safavie
یک شنبه 25 مرداد 1394, 20:48 عصر
درود;

دیتابیس من تو یه قسمت از برنامه دی اتچ میشه و ازش یه کپی گرفته میشه تا بشه اون رو با حافظه فلش به یه سیستم دیگه برد .
زمانی که به یه سیستم دیگه میبرمش اطلاعاتی که رو اون یکی سیستم هست باید با اطلاعات جدیدی که تو فلش گذاشتیم ادغام بشه و تکراری ها حذف بشن جدیدا هم توض اضافه بشن .
واسه اینکار یه دیتابیس کمکی دیگه تو برنامه گذاشتم . که اول اطلاعات اصلی سیستم رو میریزه تو دیتابیس کمکی . بعد دیتابیس اصلی رو دی اتچ میکنه ، حالا اطلاعات رو مقایسه میکنه و تکراری ها رو حذف میکنه و در انتها اطلاعاتی که مونده و تکراری نیستن رو اضافه میکنه .

این روند از نظر اصولی درسته ؟
راه کار دیگه ای هست برای این کار ؟

در کنار این موضوع جدیدا پیغام خطای There is no row at posision 0 رو دریافت میکنم ( تو کوئری Insert ) ، چه کار کردم که الان این پیغام رو میبینم ؟

Mani_rf
دوشنبه 26 مرداد 1394, 09:19 صبح
بهتر بود این سوال رو در بخش دیتابیس میپرسیدی تا DBA ها پاسخ بدن .
من از بعد برنامه نویسی پاسخ این سوال رو به شما میدم.

دیتابیس SQL Server برای این کار طراحی نشده که بخواید به صورت آفلاین دونسخه هم زمان داشته باشید. اگر بتونید سیستم ها رو به هم متصل کنید میتونید از امکانات Replicate دیتایس استفاده کنید.
روش های زیادی میشه برای انجام این کار انجام داد که فعلا پیشنهاد من به شما اینه که :
1- با توجه به این که برروی هر دوسیستم به فایل فیزیکی دیتابیس دسترسی دارید، اگر حجم دیتابیس زیاد نیست (مثلا کمتر از 5 گیگ، البته به تشخصی خودتون ) یک نسخه Backup از دیتابیس مبدا بگیرید و روی دیتابیس مقصد برگردونید. (مزیت: دقت بالا، راحتی در کار. ایراد: سرعت پایین در صورت بالا بودن حجم دیتابیس )
2- اگر روش اول امکان پپذیر نیست از روش لاگ کردن دستورات استفاده کنید. به عبارت ساده تر هر دستوری که روی دیتابیس اجرا میشه رو توی یک تیبل ذخیره کن و در نهایت دستورات رو روی دیتابیس مقصد اجرا کن.

از روش های زیاد دیگه این مثل TimeStamp هم میشه استفاده کرد که توصیه نمیکنم.