PDA

View Full Version : لينك بين دو سرور



nkhozooii
شنبه 25 مهر 1388, 16:47 عصر
من مي خواهم از table ها و ديگر عناصر داخل يك ديتابيس كه روي سرور ديگري قرار دارد در ديتابيس خودم استفاده كنم. براي اين كار خيلي توي اينترنت سرچ زدم و متوجه شدم كه با دستورات SP_addlinkedServer و SP_Addlinkedsrvlogin اين كار انجام مي شود. اما هر جوري اينها را روي سرور ها اجرا مي كنم درست از آب در نمي آيد. اين موارد برايم مبهم است:
1)دقيقا نمي دانم اين دستورات را به ترتيب بايد روي كدام سرور ها اجرا كرد.
2) چه شرايطي نياز است كه حتما اين دستورها موثر واقع شوند( شرايطي كه به طور پيش فرض قبل از اجراي اين ها لازم است چيست)
3) با دادن آي پي نمي توان اين اتصال را برقرار كرد.
4) اگه يكي از بانك ها sql2000 و ديگري 2005 باشد چه كنم ( دقيقا شرايطي كه من الان دارم)
لطفا به طور كاربردي توضيح دهيد و اگه مثال كاربردي داريد بگذاريد . آدرس و ... هم نگذاريد چون من حسابي سرچ كرده ام ( تمام امروز را جهت سرچ سپري كرده ام) و به جايي نرسيده ام و بد جوري كارم گيره. از لطفتان بي نهايت سپاسگذارم.

nkhozooii
یک شنبه 26 مهر 1388, 07:31 صبح
شما را به خدا يكي پاسخ بده. ديگه نمي دونم چه كار بايد بكنم.

nkhozooii
یک شنبه 26 مهر 1388, 11:23 صبح
من همچنان منتظرم . اگه بخواهيد كد هايم را هم كه اجرا نمي شوند مي تونم براتون بگذارم.

nkhozooii
چهارشنبه 13 آبان 1388, 10:18 صبح
مشكل اينجانب برطرف شد. حال از آنجاييكه اطلاعي در اين مورد در اين سايت نديدم اطلاعات مربوط به برقراري لينك سرورها را برايتان مي گذارم. البته بعدا اگر فرصتي شد تكميل تر خواهد شد.

) برقراري لينك بين سرور ها :
مثال:



Server1=dbsrv


Server2=khozooii



مي خواهيم از طريق server1 به جداول و ديتابيس هاي موجود در Server2 دسترسي يابيم. به اين طريق عمل مي كنيم: ( اين دستورات را در سرور 1 نوشته و اجرا مي كنيم)



sp_addlinkedserver
@server = 'remote',
@srvproduct = ' ',
@provider = 'SQLNCLI',
@datasrc = 'khozooii'


در دستور بالا يك لينك با نام اختياري remote بين سرور ها ايجاد مي شود. SrvProduct نام محصول است كه مهم نيست و خالي مي گذاريم ( نام محصول همان SQL Server مي باشد ) نام Provider در sql2005 ؛ SQLNCLI است ولي اگر سرور 1 ما Sql2000 است اين نام SQLOLEDB خواهد بود. عبارت DataSrc همان نام سيستم سرور 2مي باشد. اگر بخواهيم از اين لينك تنها براي دسترسي به يكي از ديتابيس هاي سرور2 استفاده نماييم ( نه همه آنها) مي بايست نام آن را قيد نماييم . پس بايد خط زير را به دستور اضافه نماييم:



@catalog = 'tdins'

كه در اينجا tdins نام ديتابيس مورد نظر است.
اگر ارتباطات از نوع Windows Autenticate است كد بالا به تنهايي جواب مي دهد ولي از آنجا كه اكثر ديتابيس ها جهت امنيت بيشتر از طريق يوزر و پسورد قابل دسترسي مي باشند بايد عمل لاگين نيز انجام گردد و دستور مربوط به آن نيز در سرور 1 اجرا گردد كه به اين طريق است:




exec sp_addlinkedsrvlogin
@rmtsrvname='remote',
@useself='FALSE',
@locallogin=null,
@rmtuser='sa',
@rmtpassword='itgroup'


كه در اين دستور rmtsrvname نام لينك ساخته شده توسط ما و rmtuser يوزر اس كيو ال سرور 2و rmtpassword پسورد اس كيو ال سرور2 جهت معرفي به سرور 1 مي باشد.
حال اين دستور روي سرور 1 قابل اجرا مي گردد. يعني سرور 1 به جداول ديتابيس موجود در سرور 2 دسترسي پيدا مي كند:

select * from remote.tdins.dbo.gcm
در اين دستور tdins نام ديتابيس در سرور 2 و gcm نام تيبل موجود در آن است كه از اين طريق در سرور 1 قابل اجرا گشت.
نكته:
1) در صورتيكه بخواهيم كليه لينك هايي را كه از اين طريق ساخته ايم را مشاهده نماييم دستور زير را در sql2005

select * from sys.servers
و دستور زير را در sql2000 اجرا مي نماييم.

select * from sysservers
2) در صورتيكه بخواهيم لينك remote را حذف نماييم؛ اگر دستور لاگين را اجرا نكرده باشيم از اين طريق مي توان لينك را حذف نمود:

exec sp_dropserver 'remote'
و اگر لاگين را برقرار نموده ايم جهت حذف remote دستور زير را اجرا مي كنيم:

Exec sp_dropserver 'remote'', 'droplogins'

sia_2007
شنبه 16 آبان 1388, 16:26 عصر
تعجب میکنم ؟!
به نظر میآید شما زیاد دنبال این مسئله بوده اید.
چطوذ Linked Server را پیدا نکرده اید ؟!
این کار شما یک رابط گرافیکی بسیار عالی دارد :
در SQL Server 2008 در بخش Server Objects؛ گزینه Linked Servers را بزنید
( راست کلیک و New Linked Server)
در بخش اول نام Linked Server تان
در بخش دوم نوع سرور ریموت :
SQL
Access 2007 & Later : MS Office 12 Access OLE DB
Access 2003 & Older & Excel : MS Jet 4.0
Oracle : MS OLE DB for Oracle
mySql : OLE DB for ODBC
و انواع خاص دیگری از سرورها
و البته بدیهی است برای دسترسی به ODBC نیاز به DNS است.
و برای دسترسی به Access و Excel آدرس فایل آن و برای Oracle؛ Alias آنرا بزنید.
---
حال برای تنظیم اینها میتوانید به مستندات Books Online مراجعه کنید؛ لکن اگر کسی Books Online ندارد؛ یا نتواسته از آن درست استفاده کند؛ نوع خاص اتصلاش را بگوید تا برایش بفرستم.
و در نهایت نکته ای بسیار جالب :
----
برای خواندن اطلاعات از یک جدول Access برای مثلا Join کردن آن با یک جدول در Sql و هزاران کار دیگر؛ باید به صورت زیر عمل کنیم :
Select * From AccessLinkedServer...TableName
بدیهی است؛ 3 نقطه برابر نام سرور؛ نام دیتابیس و نام Schema است؛ که در Access موضوعیت ندارند.
---
این یکی رو اگر بخواهید از مستندات Books Online استفاده کنید که فاتحه تان خوانده است :
برای فراخوانی SP ها از یک سرور ریموت مثلا Sql باید گزینه های
RPC
RPC Out
را برابر True قرار دهید.
حال مستندات Books Online :
RPC Enables RPC from the specified server.
RPC Out Enables RPC to the specified server. :چشمک:
---
و البته بحث شیرین امنیت :
در Tab؛ Security
4 گزینه است :
شما یا گزینه آخر را بزنید؛ و نام Login و Pass تان را که سرور ریموت در اختیار شما قرار داده است را بزنید.
یا در بخش بالا Add را بزنید و نام یوزرتان را انتخاب نمایید؛ و سپس نام User و Pass ای را که میخواهید این یوزر به آن وصل شود را وارد نمایید.
اگر گزینه Impersonate را تیک بزنید؛ میگویید که نام یوزر ریموت برابر نام یوزر انتخابی و پس آن برابر پس یوزر انتخابی است.
و اگر این گزینه را تیک نزنید؛ میتوانید مثل حالت قبل یوزر و پس ریموت را خودتان وارد نمایید.
این حالت برای وقتی است که میخواهید برای هر یوزر خودتان سطح دسترسی به سرور ریموت تعیین نمایید.
هول نشوید؛ !!! اکثر اوقات همان روش ساده اول را استفاده میکنید.
---
در ضمن برای Access نیازی به رمز گذاری نیست.
اما اگر خود بانک Access تان رمز داشت؛ نمیدانم چطوری باید به آن وصل شوید
البته شاید هم وصل شدید؛ !!! من که تست نکرده ام.
موفق و موید باشید و سرفراز

nkhozooii
دوشنبه 18 آبان 1388, 12:26 عصر
من در اين مقوله زياد سرچ كردم اما مطالب ارائه شده معمولا در مورد sql2000 و 2005 اجرايي نبود . در ضمن از مطالب مفيدتان ممنون.