Linked Server là cơ chế cho phép kết nối từ một SQL Server tới một database server khác (có thể là SQL Server hoặc các hệ thống khác). Nó giúp việc truy vấn hoặc cập nhật dữ liệu từ một server ở xa rất thuận tiện.
Tạo Linked server
Để tạo linked server, trong Management Studtio 2008 bạn mở rộng node Server Objects/Linked Server, right click và chọn “New Linked Server”:
Trong cửa sổ mở ra sau đó:
– Ô “Linked server” cho bạn nhập tên của linked server.
– Lựa chọn “Server type” cho phép bạn chọn “SQL Server” hoặc “Other data source”
Nếu bạn chọn “SQL Server”, các ô nhập liệu bị mờ đi và bạn chỉ có thể nhập vào ô “Linked server” là tên của SQL Server ở xa mà bạn muốn nối tới. Nói cách khác, tên của Linked server phải trùng với tên của SQL Server ở xa.
Nếu chọn “Other data source”, bạn có thể đặt tên Linked server tùy ý và bạn có thể kết nối tới 1 database server bất kỳ, SQL Server hoặc các hệ thống khác như Oracle, MySQL… (tất nhiên chỉ các hệ thống có thư viện kết nối hiện cài đặt trên server của bạn). Khi đặt lựa chọn này bạn cần chỉ định thêm một vài thông tin:
– Provider: tên của thư viện kết nối với server ở xa. Ví dụ nếu muốn kết nối với Oracle bạn cần chọn “Microsoft OLE DB Provider for Oracle”; nếu muốn kết nối với SQL Server 2008 bạn có thể chọn “SQL Server Native Client 10.0″.
– Product: tên của server ở xa.
– Data source: tên của server ở xa.
Trong hình trên, tôi tạo 1 linked server có tên LNK_SQLDB2 kết nối tới server ở xa là 1 SQL Server có tên SQLDB2.
Chuyển sang tab “Security”, bạn chọn “Be made using this security context” và nhập vào login và password. Đây là login nằm tại server ở xa và sẽ được dùng mỗi khi bạn truy nhập vào server ở xa thông qua linked server.
Lưu ý login và password phải hợp lệ (tồn tại thực) trên server ở xa. Sau đó bạn nhấn “OK” và linked server được tạo.
Sử dụng Linked Server
Việc truy vấn tới server ở xa thông qua linked server rất đơn giản, câu lệnh chỉ cần gọi đến tên đầy đủ của bảng như sau:
ten_link_server.ten_db.ten_schema.ten_bang
SELECT * FROM LNK_SQLDB2.TestDB.dbo.TestTable
Bạn cũng có thể update bảng nếu như login được dùng ở trên có quyền update bảng ở server đầu đằng kia. Tuy nhiên, nếu thực hiện 1 thủ tục ở xa, bạn sẽ nhận được thông báo lỗi:
EXEC LNK_SQLDB2.TestDB.dbo.pr_test
Msg 7411, Level 16, State 1, Line 1
Server 'LNK_SQLDB2' is not configured for RPC.
Lý do là vì lựa chọn mặc định khi bạn tạo linked server không thiết lập RPC (Remote Procedure Call) thành thử nó không cho phép bạn gọi thủ tục từ xa. Để thiết lập lựa chọn này, bạn cần sửa lại linked server (click phải, chọn “Properties”) rồi chuyển tới cửa sổ “Server Options” và đặt “RPC Out” thành True:
Khi làm trên SQL Server 2005 hoặc mới hơn, sau khi sửa lại xong và bấm “OK”, có thể bạn sẽ gặp lỗi:
“Ad hoc updates to system catalogs are not allowed”
Sở dĩ như vậy vì bản 2005 trở về sau không cho phép update trực tiếp vào catalog hệ thống. Điều này quả là gây rắc rỗi. Bạn có thể đặt lại lựa chọn của SQL Server để vượt qua lỗi này, tuy nhiên cách dễ dàng và an toàn nhất là xóa linked server và tạo lại, và trong khi tạo lại bạn đặt các lựa chọn theo ý muốn.
Nguồn: sqlviet[dot]com