ما هى الاستعلامات الموزعه Distributed Queries
الاستعلامات الموزعه هى استعلامات هجينه (اى تتم على مصادر بيانات مختلفه) تمكنك من التعامل مع البيانات الموزعه على اجهزه اخرى و من مصادر مختلفه
تخيل ان شركتك تستخدم ثلاث انظمه موزعه بين الاكسس و الاوراكل و ال MS SQL Server و تحتاج انت فى احدى برامجك للاستعلام من تلك الانطمه فى وقت واحد لجمع بيانات مشتركه منها فالحل المتوافر من هنا هو استخدام طريقة الاستعلامات الموزعه
مصادر البيانات Data Sources
يقوم ال MS SQL Server بدعم الاستعلامات الموزعه لمختلف مصادر البيانات عن طريق ال OLEDB مباشره
البدأ فى استخدام الاستعلامات الموزعه
قبل البدء فى الاستعلام سنقوم اولاً بانشاء مرجع Refernce لقاعدة البيانات البعيده التى نود الاستعلام منها ... و لكن كيف ذلك ؟
الخوادم المرتبطه Linked Servers
الخوادم المرتبطه هى خوادم وهميه مجرد رابط لقاعدة بيانات على خادم Server اخر بعيد
كيفية اضافة Linked Server
1 - باستخدام ال T-SQL
sp_addlinkedserver @server = "Mserver", @srvproduct = "Access 2000", @Provider = "Microsoft.Jet.OLEDB.4.0", @datasrc ="c:\Test.mdb"
فى حالة الربط ب MS SSQL Server ستقوم اولاً بانشاء Logins للاتصال بهذا الخادم
exec sp_addlinkedsrvlogin @rmtsrvname = "Mserver", @useself = "false", @locallogin = "sa", @rmtuser = "Admin", @rmtpassword = password
2 - باستخدام ال Enterprise Manager
- من ال Enterprise Manager اختر Security
- ستجد لديك Linked Servers قم بالضغط بالزر الايمن ثم قم باختيار Add new Linked Server ستضع اسم ال linked server ثم من خاصية other data source باختيار ال provider فى حالة ما إذا كان المصدر ليس sql server و من خاصية ال data source ستقوم بكتابة المسار كامل لقاعدة البيانات (اكسس للتبسيط)
- اضغط Ok
استخدام الاستعلامات الموزعه
لدينا 3 طرق استخدام ال openquery او استخدام عبارة T-SQL عاديه او openrowset
استخدام عبارة ال T-SQL تتم كالاتى :
select field1,field2 from linked_server_name ... mytable
الثلاث نقاط (...) لا تحذفهم لان الاستعلام مكون من 4 اجزاء Four Parts Name
استخدام ال openquery تتم كالاتى :
SELECT * FROM OPENQUERY (linked_server_name, 'SELECT field1, field2 FROM mytable')
استخدام ال openrowset تتم كالاتى :
SELECT field1, field2
FROM OPENROWSET ('Microsoft.jet.oledb.4.0', 'C:\Test1.mdb';
'usernamehere'; 'passwordhere', mytable)استخدام الاستعلامات الموزعه مع لغات البرمجه
فكرة استخدام الاستعلامات الموزعه داخل لغه مثل الفيجوال بيسك مثلاً ستكون كالتالى:
(المثال منقول من هنا )
Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=master;User " _ & "Id=sa;Password=;" cn.Execute "EXEC sp_addlinkedserver 'MyLinkedServerName', 'Jet 4.0', " _ & "'Microsoft.Jet.OLEDB.4.0', 'c:\program files\microsoft " _ & "office\office\samples\northwind.mdb'" cn.Execute "EXEC sp_addlinkedsrvlogin ' MyLinkedServerName ', FALSE, NULL, " _ & "'admin', ''" cn.Close Set cn = Nothing
للاتصال بقاعدة البيانات SQL Server فى حالتنا واضافة ال Linked Server لقاعدة بيانات اكسس
لتنفيذ الاستعلام الموزع بالثلاث طرق سيكون الكود كالاتى
Dim rs As ADODB.Recordset
Dim cn As ADODB.Connection
Dim SQL As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
' the OPENQUERY function
SQL = " Select a.* from OPENQUERY(MyLinkedServerName, 'Select * from " _
& "Customers') a"
' the OPENROWSET function
SQL = "SELECT * From OPENROWSET('Microsoft.Jet.OLEDB.4.0','c:\program " _
& "files\microsoft office\office\samples\northwind.mdb'; 'Admin';'', " _
& "Customers)"
' the four-part syntax
SQL = "Select * from MyLinkedServerName...Customers"
cn.CursorLocation = adUseClient
cn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=master;User " _
& "Id=sa;Password=;"
rs.Open SQL, cn, adOpenStatic, adLockReadOnly
' ...
rs.Close
set rs = Nothing
cn.Close
Set cn = Nothing* للتعليق على المقاله من هنا
مصادر اخرى يمكنك الرجوع إليها لمزيد من المعرفه
كتاب الامتحان 70-229 الخاص بتصميم وتطبيق قواعد البيانات على SQL Server
مواضيع ذات علاقه بالموضوع :
استدعاء إجراء اوراكل من خلال SQL Server باستخدام خادم الاتصال