PDA

View Full Version : کپی اطلاعات بین server های مختلف



leylam
سه شنبه 28 تیر 1384, 11:46 صبح
سلام
چطوری میتوانم بین دو سرور مختلف table ها را چک کنم و سپس در صورت تفاوت اطلاعات را کپی کنم .(تماما با دستور sql )
در ضمن قبل از نوشتن این عنوان جستجو کردم و نتیجه نداشت
لطفا راهنمایی کنید

Kamyar.Kimiyabeigi
چهارشنبه 29 تیر 1384, 07:59 صبح
درود
شما باید از replication استفاده کنین

m-khorsandi
چهارشنبه 29 تیر 1384, 08:00 صبح
شما میتونید بوسیله Replication این کار رو انجام بدید و مدیریت انتقال و مقایسه رو به اون بسپارید و نیازی به
چک کردن اطلاعات هم ندارید.

leylam
چهارشنبه 29 تیر 1384, 08:33 صبح
ممنون از توجه شما ولی من میخوام کاملا دستی این کارو انجام بشه
از قدیم گفتند: با گیوتین پرتقال پوست نمی کنند.

leylam
چهارشنبه 29 تیر 1384, 10:44 صبح
من میخوام از server و data base خودم در یک database دیگر روی server متفاوت table ایجاد کنم .
لطفا راهنمایی کنید

Kamyar.Kimiyabeigi
چهارشنبه 29 تیر 1384, 10:57 صبح
اگر باز به قول شما با گیوتین پرتقال پوست کندن نیست می تونین از linkserver استفاده کنین یعنی با استفاده از linkserver به server مورد نظرتون وصل شین و هر کاری می خواین انجام بدین

m-khorsandi
چهارشنبه 29 تیر 1384, 12:56 عصر
موقع Setup کردن Replication شما امکان محدود سازی رو در حد جدول و فیلد دارید و حتما نباید تمام
DataBase شما منتقل بشه.

ضرب المثل شما خیلی به درد این موضوع نمیخوره.....

sarami
چهارشنبه 29 تیر 1384, 23:10 عصر
َشما باید یک replicat برای SQLاصلی تون ایجاد کنید
که دومی child اولی میشه و اطلاعات رو replicat می کنه براتون
سعی میکنم تو این هفته طریقه این کار رو براتون توwww.sarami.blogfa.com توضیح بدم

AminSobati
چهارشنبه 29 تیر 1384, 23:56 عصر
اگر پیدا کردن تفاوت رکوردها بر مبنای یک شرط ساده ای باشه، این کار نیاز به Solutionهای پیشرفته نداره. مثلا اگر صرفا وجود بعضی IDها نشانگر رکورد اضافی در یک جدول نسبت به جدول دیگه باشه، میتونین راحت با Outer Join متوجه بشین چه IDهایی در جدول A وجود داره که در جدول B نیست. حالا این IDها رو در یک جدول موقتی قرار میدیم. سپس با دستور Insert رکوردهایی رو از جدول A به جدول B میبریم که ID اونها در جدول موقتی هم وجود داشته باشه.
اگر اطلاعات از یک SQL Server به SQL Server دیگه باید منتقل بشه، همونطور که دوستان اشاره کردند، Linked Server یا دستور OpenRowSet یا OpenDataSource میبایست استفاده بشه.

leylam
شنبه 01 مرداد 1384, 08:32 صبح
سلام
خیلی ممنون
ازروش جدول موقتی و واسط استفاده کردم.ممنون از تمامی دوستان

leylam
شنبه 01 مرداد 1384, 08:46 صبح
اگر ممکنه در مورد روش linked server بیشتر توضیح دهید.

AminSobati
دوشنبه 03 مرداد 1384, 20:44 عصر
متاسفانه توضیح Linked Server در اینجا ممکن نیست ولی سایر دستوراتی که به طور مشابه عمل میکنند، باعث خواهند شد تا بتونین از SQL Server به سایر بانکهای اطلاعاتی(خارج از SQL Server) وصل بشین و تبادل اطلاعات کنین.
مثلا OpenRowSet:


SELECT a.*
FROM OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=seattle1;UID=sa;PWD=MyPass',
pubs.dbo.authors) AS a
ORDER BY a.au_lname, a.au_fname
GO

m-khorsandi
سه شنبه 04 مرداد 1384, 07:41 صبح
آقای ثباتی عزیز،
بعد از ساختن یک LinkedServer میشه از اون به دو شکل استفاده کرد:


Select * From linkedservername.dbo.table_name




Select * From OpenQuery(linkedservername, 'Select * from table_name where clause')


چه تفاوتی بین این دو روش هست ؟

AminSobati
سه شنبه 04 مرداد 1384, 15:55 عصر
دوست عزیزم،
OpenQuery یک امکان جالب به شما میده به اسم Pass-Through Query.
در این حالت شما میتونین کل یک Query رو به عنوان String به لینک بدین تا براتون اجرا کنه و نتیجه برگرده:


SELECT * FROM OPENQUERY (MyLink1,'EXEC SomeSP1')
که البته به جای Exec دستورات دیگه ای که نتیجه به شکل جدول داشته باشند، قابل استفاده است.
ولی در حالت اول که مثال زدین، تمام پردازش به عهده سروری هستش که داره Link رو Call میکنه.