PDA

View Full Version : ادغام و استخراج اطلاعات از چندین بانک به یک بانک



jafari_ms
شنبه 17 بهمن 1383, 10:27 صبح
با سلام به تمام دوستان و اساتید محترم:
من میخواستم چندین بانک یکسان رو که در جاهای مختلف کار می کنند ، اطلاعاتشون رو استخراج و در یک بانک اصلی ادغام کنم و یا از این بانک اصلی اطلاعات ثابتی رو استخراج ، و روی دیگر بانکهای یکسان ادغام کنم
البته میخوام این کار رو با برنامه نویسی مثلا VB انجام بدم لطفا راهنمای کنید که آیا SQL خودش چنین ابزاری داره یا نه ؟ و بهترین راه کدامه؟
با تشکر

سنبله کار
یک شنبه 18 بهمن 1383, 12:52 عصر
موضوعات مربوط به replication راه گشا خواهد بود .

toxi
چهارشنبه 21 بهمن 1383, 13:24 عصر
دوست عزیز. شما اگه می خواین از طریق VB این کار رو انجام بدی ، باید از TSQL استفاده کنی. یه شی ADOCommand بساز و نوع Command رو بزار Text ..حلا این دستورات رو از روش اجرا کن.
البته این یه شبیه سازی هست. تو باید نام بانک ها و جداول خودت رو بزاری. ضمنا این مثال برای بانک هایی هست که همش sql server هستن. اما گه می خوای از بانک های دیگه مثل access ، oracle ، paradox اطلاعاتت رو بکشی بیرون و بفرستی رو دیتا بیست باید از DTS استفاده کنی.
<p align = left><span dir=ltr>
use db1
insert into db1.table1 (fn1,ln1)
select name2,l_name2 from db2.table2
go
select * from db1.table1
</span></p>
اونایی که عدد یک دارن برای مقصد هستند و اونایی که 2 دارن معرف منبع هستند.
امیدوارم جوابتو گرفته باشی.

AminSobati
پنج شنبه 22 بهمن 1383, 21:19 عصر
دوست عزیزم،
انجام چنین کاری توسط برنامه نویسی یک باطلاق بیش نیست! چون هر چی بیشتر وارد این کار بشین، بیشتر به مشکلات و دردسر اون پی خواهید برد.
ولی مایکروسافت قابلیت Merge یا ادغام اطلاعات رو تحت عنوان Replication به شما عرضه میکنه که بعد از راه اندازی Replication میتونین توسط برنامه نویسی اون رو فعال یا غیر فعال کنین. لذا وقتی این قابلیت در اختیار شماست، توصیه نمیکنم که خودتون بخواهید Code بنویسین. چون ریزه کاری های بسیاری داره که در ابتدا از چشم شما پنهانه، مثل Conflict که بین چند SQL Server پیش میاد و ...

jafari_ms
یک شنبه 02 اسفند 1383, 14:27 عصر
با سلام خدمت دوستان
در مورد این موضوع هر کس بتونه من رو راهنمایی کنه خیلی ممنون میشم

AminSobati
یک شنبه 02 اسفند 1383, 17:01 عصر
دقیقا در کدوم مورد؟

jafari_ms
پنج شنبه 06 اسفند 1383, 06:39 صبح
دوست عزیز مشکل من اینه که اطلاعاتم در شهرهای مختلفه و من برای انتقال اطلاعاتم با توجه به حجم بالای فایل پشتیبان sql توسط مودم مشکل دارم مثل ممکنه این فایل تا 1gb هم برسه
ضمنا من اطلاعات تمام table ها رو نمی خوام که backup بگیرم و ممکن چند تا از او نا رو و حتی یک مقداری از اون ها رو نخوام (مثل فقط اطلاعاتی که از اول سال وارد شده بخوام) بنابراین نمیدون در sql باید چیکار کنم
خودم با برنامه نویسی اطلاعاتم رو تبدیل به یک بانک access میکنم و بعد مجداا جایی که بخواد ادغام بشم در sqlمیریزم که البته پیچیده میشه و احتمال اشتباه هم بالاست

اگر شما راه بهتری دارید لطفا بگید

titbasoft
پنج شنبه 06 اسفند 1383, 17:55 عصر
انجام چنین کاری توسط برنامه نویسی یک باطلاق بیش نیست!
این مساله رو با پوست و گوشت و اُستُخونم کاملا احساس کردم :cry:

اما یه سوال هم من دارم. اونهم اینکه اگر structure دیتابیسها متفاوت باشند چی مثلا از یک جدول 2 فیلد برداریم با یک جدول دیگه هم join ببندیمش اونهایی که تکراری نیستنند رو بریزیم توی یک جدول در دیتابیس مقصد. :strange:
(ado.net) امکانات خیلی خوبی برای table mapping داره که اینگونه کارهارو یه ذره راحت تر می کنه!
من خودم این طوری عمل میکنم که اول کل دیتاهایی که باید انتقال داده بشن رو جمع آوری میکنم بعد به دیتابیس مقصد وصل میشم و اونها رو validate می کنم بعد طبق ساختار دیتابیس مقصد اونها رو توی یک xml فایل ذخیره میکنم سپس فایل رو روی server انتقال میدم و در مرحله آخر فایل رو به دیتابیس import می کنم. آیا این راه درسته؟ (sql روی هاست اینترنته!) :wink:

AminSobati
جمعه 07 اسفند 1383, 20:29 عصر
ضمنا من اطلاعات تمام table ها رو نمی خوام که backup بگیرم و ممکن چند تا از او نا رو و حتی یک مقداری از اون ها رو نخوام (مثل فقط اطلاعاتی که از اول سال وارد شده بخوام) بنابراین نمیدون در sql باید چیکار کنم
دوست عزیزم، با توجه به اینکه همه اطلاعات مورد نیاز نیست پس شما میتونین از Replication به خوبی استفاده کنین و این امکان رو به شما خواهد داد که رکوردها رو Filter کنین(برای جابجایی)
لذا سرعت پایین خطوط Dial-Up شاید کمتر شما رو اذیت کنه. ولی اگر این هم مشکله، من یک راه حل شناخته شده براش سراغ ندارم و باید رفت دنبال روشهای غیر متعارف، مثل کد نویسی و امثالهم...


من خودم این طوری عمل میکنم که اول کل دیتاهایی که باید انتقال داده بشن رو جمع آوری میکنم بعد به دیتابیس مقصد وصل میشم و اونها رو validate می کنم بعد طبق ساختار دیتابیس مقصد اونها رو توی یک xml فایل ذخیره میکنم سپس فایل رو روی server انتقال میدم و در مرحله آخر فایل رو به دیتابیس import می کنم. آیا این راه درسته؟ (sql روی هاست اینترنته!)
دوست عزیزم، اگر مشکل فقط انتقال رکوردهای جدیده، این روش قشنگیه ولی در مورد فیلدهای Identity چه فکری کردین؟ اگر از اون سمت هم رکورد به بانک Local شما قراره اضافه بشه، احتمال وجود Identityهای تکراری هست.
اما در کل اگر تغییرات روی رکوردها هم میبایست منتقل بشن، اینجا کار پیچیده میشه..

titbasoft
شنبه 08 اسفند 1383, 12:18 عصر
دوست عزیزم، اگر مشکل فقط انتقال رکوردهای جدیده، این روش قشنگیه ولی در مورد فیلدهای Identity چه فکری کردین؟ اگر از اون سمت هم رکورد به بانک Local شما قراره اضافه بشه، احتمال وجود Identityهای تکراری هست.

از اونجایی که این identity خاطر بسیاری از اساتید دانشگاه رو آزرده کرده بود ما هم عادت کردیم کمتر از identity استفاده کنیم. اما یه شانسی که اوردم (البته تجربه قبلیم باعث شد که زیر بار نرم) اینه که دیتا های مقصد read-only هستند :D

خوشحال شدم که روش من تائید شد . چون خودم فکر میکردم خیلی ناشیانه است :mrgreen: :sunglass:

jafari_ms
یک شنبه 09 اسفند 1383, 20:11 عصر
با سلام به تمام دوستان و اساتید عزیز
ممنون که در این مورد من رو راهنمائی کردید . ولی فکر کنم سواد من خیلی پائینه
چون هنوز یک روش علمی خوب برای این کار پیدا نکردم و یا شاید نفهمیدم
اگه میشه یک کم بیشتر راهنمائی کنید.
:sorry: ممنون میشم

ehsan707
جمعه 14 اسفند 1383, 19:39 عصر
دوست عزیز شما قبل از اینکه بخواهید کاری یا راهنمایی طلب کنید باید به این سوالات پاسخ بدین
1- چه زمانی برای درنگ داده های خودتون متصور هستید ؟ مثلا نیاز دارید که دادها در همه سرویس دهنده و گیرنده ها یکسان باشند؟
2- نوع دادهای بانک شما چگونه است ؟ خواندنی - نوشتنی و خواندنی؟
3- فواصل شبکه و حجم داده شما چقدر است ؟ وووو

من سعی میکنم در حد سواد خودم چند مطلب ارائه کنم ببخشید اگه کم و کسری دیدن توش

به عنوان مثال من چند تا مطلب مینویسم
الف/ مثلا بانک ملت نیاز دارد که خلاصه حساب مشتری را در طول روز به شعبه مرکزی انتقال دهد. نوع خطوط ما شبکه وایر لس 100 مگ در ثانیه و زمان درنگ داده ها حدود 16 تا 7 صبح فردا حجم داده حدود 15 مگ میباشد برای هر شعبه
در این حالت روش اسنپ شات یا مرج بسته به نوع پیشهاد میگردد

ب/ بیمه ایران در نظر دارد که با یک شماره تامین اجتماعی تمام مشتریان خود را به صورت لحظه ای کنترل نماید این مشتریان در سراسر ایران پراکنده بوده و شبکه منظمی هم برای تمام بیمارستانها موجود نیست درنگ داد ها صفر است حجم داده در حد چند کیلوبایت میباشد
دراین حالت سرور اینترنتی Asp.net با پشتیبانی ssl پیشنهاد میگردد