Bài viết này cung cấp một ví dụ về cách tạo một máy chủ được liên kết trong SQL Server bằng Transact-SQL. Sử dụng T-SQL cho phép bạn tạo máy chủ được liên kết mà không cần dựa vào giao diện người dùng đồ họa (chẳng hạn như SSMS).
Cú pháp
Để tạo một máy chủ được liên kết bằng T-SQL, hãy sử dụng sp_addlinkedserver
hệ thống lưu trữ thủ tục.
Cú pháp chính thức như sau:
sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]
Hầu hết các đối số là tùy chọn, nhưng bạn sẽ cần cung cấp tên máy chủ được liên kết.
Bạn cũng có thể muốn chỉ định nguồn dữ liệu hoặc vị trí của máy chủ được liên kết và có thể là tên nhà cung cấp. catalog
đối số cho phép bạn chỉ định một cơ sở dữ liệu mặc định mà máy chủ được liên kết được ánh xạ tới. Xem tài liệu chính thức của Microsoft để biết giải thích về từng đối số này.
Ví dụ - Tạo máy chủ được liên kết
Để tạo một máy chủ được liên kết bằng T-SQL, hãy thực thi sp_addlinkedserver
thủ tục được lưu trữ trong khi chuyển tên của máy chủ được liên kết cũng như nguồn của nó.
Dưới đây là ví dụ về cách tạo máy chủ được liên kết:
EXEC sp_addlinkedserver @server=N'Homer', @srvproduct=N'', @provider=N'MSOLEDBSQL', @datasrc=N'172.17.0.2,1433', @catalog='Music';
Trong trường hợp này, tên máy chủ được liên kết là “Homer” và tôi chỉ định địa chỉ IP của máy chủ, theo sau là cổng TCP (trong trường hợp của tôi, đó thực sự là một vùng chứa Docker trên cùng một máy). Thay đổi tên máy chủ và địa chỉ IP / cổng theo yêu cầu. Tôi cũng chỉ định một cơ sở dữ liệu mặc định có tên là “Âm nhạc”.
Ví dụ này sử dụng MSOLEDBSQL
là tên nhà cung cấp, nhưng bạn có thể sử dụng bất kỳ tên nhà cung cấp nào có thể áp dụng trong trường hợp của bạn. Trong trường hợp của tôi, tôi đang liên kết đến một phiên bản SQL Server khác.
Lưu ý rằng MSOLEDBSQL
là nhà cung cấp được đề xuất cho SQL Server. Nếu trước đây bạn đã sử dụng SQLOLEDB
hoặc SQLNCLI
, cả hai điều này hiện không được dùng nữa. Microsoft đã quyết định hủy bỏ OLE DB và phát hành nó vào năm 2018.
Nếu bạn muốn liên kết với Oracle, bạn có thể sử dụng OraOLEDB.Oracle
, đối với MS Access, bạn có thể sử dụng Microsoft.Jet.OLEDB.4.0
(dành cho Access các định dạng 2002-2003) hoặc Microsoft.ACE.OLEDB.12.0
(đối với định dạng 2007). Tài liệu chính thức có một bảng các thông số để sử dụng cho các tình huống khác nhau.
Kiểm tra máy chủ được liên kết
Khi bạn đã thêm máy chủ được liên kết, bạn có thể sử dụng sp_testlinkedserver
để kiểm tra nó:
EXEC sp_testlinkedserver Homer;
Kết quả (nếu thành công):
Commands completed successfully.
Nếu bạn gặp lỗi "Đăng nhập không thành công", rất có thể bạn không có thông tin đăng nhập tương ứng trên máy chủ từ xa. Bạn sẽ cần có thông tin đăng nhập tương ứng với thông tin đăng nhập giống như thông tin đăng nhập trên máy chủ cục bộ.
Cách hoạt động của nó là, khi bạn thêm máy chủ được liên kết lần đầu tiên, một ánh xạ mặc định giữa tất cả thông tin đăng nhập trên máy chủ cục bộ và thông tin đăng nhập từ xa trên máy chủ được liên kết sẽ tự động được tạo. SQL Server sử dụng thông tin đăng nhập cục bộ khi kết nối với máy chủ được liên kết thay mặt cho đăng nhập. Nếu thông tin đăng nhập cục bộ của bạn không có thông tin đăng nhập tương ứng trên máy chủ từ xa, thì bạn sẽ gặp lỗi "Đăng nhập không thành công".
Thêm thông tin đăng nhập cho máy chủ được liên kết
Nếu bạn không muốn máy chủ được liên kết sử dụng thông tin đăng nhập của riêng mình, bạn có thể chỉ định một thông tin đăng nhập khác để nó sử dụng. Miễn là máy chủ từ xa có thông tin đăng nhập tương ứng với cùng thông tin đăng nhập, bạn sẽ sẵn sàng sử dụng. Rõ ràng, bạn cần đảm bảo rằng tài khoản từ xa có các quyền thích hợp để thực hiện những gì bạn cần.
Dưới đây là ví dụ về cách thêm thông tin đăng nhập Máy chủ SQL cho máy chủ được liên kết.
EXEC sp_addlinkedsrvlogin @rmtsrvname=N'Homer', @useself=N'FALSE', @locallogin=NULL, @rmtuser=N'Marge', @rmtpassword=N'BigStrong#Passw0rd';
Chạy điều này trên máy chủ cục bộ sau khi bạn đã tạo máy chủ được liên kết. Bạn sẽ cần thông tin đăng nhập tương ứng với cùng thông tin đăng nhập trên máy chủ được liên kết thực tế (từ xa).
Điều này thêm thông tin đăng nhập có tên là “Marge” cho máy chủ được liên kết có tên là “Homer”. Miễn là máy chủ từ xa có thông tin đăng nhập với cùng thông tin xác thực, máy chủ cục bộ sẽ có thể đăng nhập vào máy chủ được liên kết.
Xem Thêm thông tin đăng nhập vào máy chủ được liên kết trong SQL Server để biết ví dụ về cách thêm thông tin đăng nhập tương ứng trên máy chủ từ xa.
Thả một máy chủ được liên kết
Dưới đây là một ví dụ về việc loại bỏ máy chủ được liên kết có tên “Homer” và tất cả các thông tin đăng nhập được liên kết.
EXEC sp_dropserver 'Homer', 'droplogins';
droplogins
đối số là tùy chọn, nhưng nếu bạn không chỉ định điều này khi thả máy chủ được liên kết có các mục nhập đăng nhập máy chủ từ xa và liên kết được liên kết hoặc được định cấu hình làm nhà xuất bản sao chép, thông báo lỗi sẽ được trả về.
Xem Xóa máy chủ được liên kết bằng T-SQL để biết thêm ví dụ về việc loại bỏ máy chủ được liên kết.
Chạy một truy vấn phân tán trên máy chủ được liên kết
Bây giờ chúng tôi đã tạo máy chủ được liên kết, đây là ví dụ về việc chạy truy vấn phân tán dựa trên nó:
SELECT * FROM Homer.Music.dbo.Artists;
Sự khác biệt duy nhất giữa truy vấn này và truy vấn cục bộ là bạn cần thêm tên máy chủ được liên kết vào FROM
mệnh đề.
Như thế này:
LinkedServer.Database.Schema.Table
Ngoài ra, bạn có thể sử dụng OPENQUERY()
để chạy một truy vấn chuyển qua:
SELECT * FROM OPENQUERY( Homer, 'SELECT * FROM Music.dbo.Artists;' );