Linked Server là gì? Cách tạo và truy vấn dữ liệu giữa các SQL Server
Khi dữ liệu nằm trên nhiều SQL Server khác nhau, việc mở từng hệ thống để truy vấn riêng lẻ sẽ gây khó khăn cho báo cáo, đối soát và vận hành. Linked Server cho phép một SQL Server kết nối tới nguồn dữ liệu bên ngoài, sau đó thực hiện truy vấn từ xa ngay trong T-SQL.
Tuy nhiên, Linked Server không phải cơ chế sao chép dữ liệu. Đây là cấu hình kết nối có liên quan trực tiếp đến provider, tài khoản truy cập, firewall, mã hóa và hiệu suất truy vấn. Nếu cấu hình thiếu chặt chẽ, hệ thống có thể phát sinh lỗi đăng nhập, truy vấn chậm hoặc mở rộng quyền truy cập ngoài dự kiến.
Linked Server là gì?
Linked Server là tính năng của SQL Server cho phép một instance truy cập dữ liệu và thực thi lệnh trên nguồn dữ liệu ở bên ngoài, chẳng hạn như một SQL Server khác, Azure SQL Managed Instance hoặc nguồn dữ liệu hỗ trợ OLE DB. Microsoft mô tả Linked Server là nền tảng phục vụ các truy vấn phân tán giữa nhiều nguồn dữ liệu.
Sau khi cấu hình, máy chủ từ xa được đăng ký dưới một tên logic. Người dùng có thể gọi bảng, view hoặc stored procedure trên máy chủ đó trong câu lệnh T-SQL.
Ví dụ, ứng dụng kết nối tới SQL-APP nhưng cần lấy dữ liệu đơn hàng từ SQL-REPORT. Thay vì xây dựng thêm một lớp kết nối riêng, SQL-APP có thể sử dụng Linked Server với tên REPORTING_SQL để truy vấn bảng từ SQL-REPORT.
Điểm cần phân biệt là Linked Server chỉ tạo đường kết nối và cơ chế truy cập. Dữ liệu vẫn nằm trên máy chủ gốc, không tự động được sao chép sang máy chủ cục bộ.
Linked Server hoạt động như thế nào?
Một truy vấn qua Linked Server thường đi qua bốn lớp: SQL Server cục bộ, provider, nguồn dữ liệu từ xa và cơ chế xác thực.

Linked Server (Máy chủ liên kết) cho phép một SQL Server kết nối, truy vấn và cập nhật dữ liệu
1. SQL Server cục bộ nhận câu lệnh
Người dùng hoặc ứng dụng gửi truy vấn tới instance SQL Server đang kết nối. Instance này phân tích câu lệnh và xác định phần nào cần thực thi tại máy chủ cục bộ, phần nào cần gửi sang máy chủ từ xa.
2. OLE DB provider chuyển tiếp yêu cầu
OLE DB provider đóng vai trò trung gian giúp SQL Server giao tiếp với nguồn dữ liệu. Provider cần được cài đặt trên chính máy chủ đang chạy instance SQL Server, không chỉ trên máy tính của người quản trị dùng SSMS.
Khi kết nối tới một SQL Server khác, nên sử dụng Microsoft OLE DB Driver for SQL Server. SQL Server Native Client như SQLNCLI hoặc SQLNCLI11 đã lỗi thời và không được Microsoft khuyến nghị cho các triển khai mới.
3. SQL Server xác định nguồn dữ liệu
Nguồn dữ liệu có thể là tên máy chủ, named instance, địa chỉ mạng hoặc một hệ thống khác tùy provider. Với SQL Server, tên thường có dạng:
SQL-SERVER-NAME\INSTANCE-NAMENếu kết nối tới default instance, có thể chỉ cần dùng tên máy chủ.
4. Hệ thống áp dụng login mapping
SQL Server phải biết tài khoản nào được sử dụng khi truy cập máy chủ từ xa. Tài khoản cục bộ có thể được ánh xạ tới một login tương ứng trên máy chủ đích thông qua sp_addlinkedsrvlogin.
Quyền truy cập cuối cùng được quyết định ở máy chủ từ xa. Vì vậy, việc người dùng có quyền trên SQL Server cục bộ không đồng nghĩa với việc họ tự động có quyền trên cơ sở dữ liệu đích.
Linked Server được dùng trong trường hợp nào?
Linked Server phù hợp khi doanh nghiệp cần truy cập dữ liệu từ xa trong phạm vi có kiểm soát, đặc biệt khi các hệ thống hiện hữu đã sử dụng SQL Server.
Tổng hợp báo cáo từ nhiều cơ sở dữ liệu
Doanh nghiệp có thể đặt dữ liệu của từng chi nhánh trên các SQL Server riêng, sau đó sử dụng một máy chủ trung tâm để truy vấn doanh thu, đơn hàng hoặc tồn kho.
Cách này phù hợp với báo cáo nội bộ có quy mô vừa phải, không yêu cầu sao chép toàn bộ dữ liệu về một kho tập trung.
Đối soát dữ liệu giữa hệ thống cũ và mới
Trong quá trình chuyển đổi hệ thống, Linked Server có thể hỗ trợ so sánh dữ liệu giữa hai cơ sở dữ liệu. Ví dụ, đội vận hành kiểm tra số lượng đơn hàng, trạng thái thanh toán hoặc mã khách hàng trên hệ thống cũ và hệ thống mới.
Truy vấn dữ liệu từ một hệ quản trị khác
Nếu có OLE DB provider phù hợp, SQL Server có thể kết nối tới một số nguồn dữ liệu không phải SQL Server. Tuy nhiên, khả năng đọc, ghi và xử lý giao dịch phụ thuộc vào provider. Không phải nguồn dữ liệu nào cũng hỗ trợ đầy đủ các thao tác như SQL Server.
Gọi stored procedure trên máy chủ từ xa
Linked Server cũng có thể được dùng để gọi stored procedure ở máy chủ khác. Trường hợp này cần xem xét thêm quyền RPC và khả năng phát sinh giao dịch phân tán.
Khi nào không nên dùng Linked Server?
Linked Server không phải lựa chọn mặc định cho mọi bài toán tích hợp dữ liệu.
| Nhu cầu | Đánh giá |
|---|---|
| Truy vấn báo cáo với lượng dữ liệu vừa phải | Có thể phù hợp |
| Đối soát hoặc kiểm tra dữ liệu giữa hai hệ thống | Phù hợp |
| Đồng bộ dữ liệu lớn, liên tục | Nên cân nhắc ETL, CDC hoặc cơ chế replication |
| Join nhiều bảng lớn qua mạng | Thường khó kiểm soát hiệu suất |
| Giao tiếp giữa các ứng dụng độc lập | API hoặc message queue thường phù hợp hơn |
| Giao dịch nghiệp vụ quan trọng giữa nhiều hệ thống | Cần thiết kế riêng về transaction và khả năng phục hồi |
Nếu ứng dụng người dùng phải chờ một truy vấn liên máy chủ hoàn tất, độ trễ mạng hoặc lỗi kết nối từ xa có thể ảnh hưởng trực tiếp đến trải nghiệm. Với luồng nghiệp vụ quan trọng, nên đánh giá việc đồng bộ dữ liệu về hệ thống trung gian thay vì phụ thuộc hoàn toàn vào truy vấn trực tiếp.
Cách tạo Linked Server trong SQL Server
Microsoft hỗ trợ tạo Linked Server bằng giao diện SQL Server Management Studio hoặc câu lệnh T-SQL. Trước khi cấu hình, cần chuẩn bị thông tin về máy chủ đích, provider, tài khoản truy cập và quyền mạng.
Kiểm tra các điều kiện trước khi tạo
Cần xác nhận:
- Máy chủ SQL Server cục bộ có thể kết nối tới máy chủ đích.
- Firewall cho phép kết nối tới cổng SQL Server cần thiết.
- SQL Server từ xa đang hoạt động và cho phép kết nối.
- Provider tương thích đã được cài trên máy chủ chạy SQL Server cục bộ.
- Tài khoản từ xa chỉ có các quyền cần thiết.
- Hai hệ thống sử dụng phương thức xác thực và mã hóa phù hợp.
Nếu SQL Server chạy trên hạ tầng cloud, phần network thường quan trọng không kém câu lệnh tạo Linked Server. Với các instance đặt trên Bizfly Cloud Cloud Server, doanh nghiệp có thể tổ chức firewall, backup và giám sát máy chủ, nhưng vẫn phải tự kiểm tra rule mạng và quyền truy cập giữa các instance. Bizfly Cloud hỗ trợ Cloud Server Windows/Linux, cấu hình firewall, backup và theo dõi tài nguyên máy chủ.
Tạo Linked Server bằng SSMS
Trong SQL Server Management Studio:
- Mở Object Explorer.
- Chọn Server Objects.
- Nhấp chuột phải vào Linked Servers.
- Chọn New Linked Server.
- Tại tab General, nhập tên máy chủ hoặc instance cần kết nối.
- Nếu kết nối tới nguồn dữ liệu khác SQL Server, chọn Other data source rồi khai báo provider, data source và catalog.
- Tại tab Security, cấu hình login mapping.
- Chỉ bật RPC Out nếu cần gọi stored procedure hoặc thực thi lệnh từ xa.
- Nhấn OK, sau đó kiểm tra kết nối bằng một truy vấn đơn giản.
Microsoft phân tách rõ phần khai báo nguồn dữ liệu và phần khai báo security context. Đây là hai bước độc lập, vì kết nối tới đúng máy chủ chưa đồng nghĩa với việc tài khoản đã có quyền truy vấn.
Tạo Linked Server bằng T-SQL
Ví dụ dưới đây tạo một Linked Server tới named instance SQL Server:
USE master;GOEXEC master.dbo.sp_addlinkedserver @server = N'REPORTING_SQL', @srvproduct = N'', @provider = N'MSOLEDBSQL', @datasrc = N'SQL-REPORT\PROD';GOTrong đó:
REPORTING_SQLlà tên logic được sử dụng trong các câu truy vấn.MSOLEDBSQLlà OLE DB provider.SQL-REPORT\PRODlà tên máy chủ và instance đích.
Tiếp theo, ánh xạ một login cục bộ tới tài khoản chỉ đọc trên máy chủ từ xa:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'REPORTING_SQL', @useself = N'False', @locallogin = N'AppReportLogin', @rmtuser = N'report_reader', @rmtpassword = N'<không-đặt-mật-khẩu-thật-trong-mã-nguồn>';GOTài khoản report_reader chỉ nên được cấp quyền cần thiết, chẳng hạn SELECT trên một số bảng hoặc view phục vụ báo cáo. Không nên sử dụng sa, tài khoản sysadmin hoặc một login có quyền ghi toàn bộ cơ sở dữ liệu cho Linked Server.
Mật khẩu trong ví dụ chỉ mang tính minh họa. Khi triển khai, thông tin xác thực cần được quản lý qua công cụ bảo mật phù hợp, không lưu trực tiếp trong repository, script công khai hoặc tài liệu vận hành không được bảo vệ.
Lưu ý khi kết nối tới SQL Server 2025
SQL Server 2025 có thay đổi liên quan đến mã hóa kết nối. Với Microsoft OLE DB Driver 19, các Linked Server hiện có có thể ngừng hoạt động sau khi nâng cấp nếu chuỗi kết nối không khai báo phù hợp về Encrypt hoặc máy chủ không có chứng chỉ hợp lệ.
Ví dụ cấu hình theo hướng yêu cầu mã hóa:
EXEC master.dbo.sp_addlinkedserver @server = N'REPORTING_SQL_2025', @srvproduct = N'', @provider = N'MSOLEDBSQL19', @provstr = N'Encrypt=Mandatory;TrustServerCertificate=False', @datasrc = N'SQL-REPORT\PROD';GOTrong môi trường production, nên sử dụng chứng chỉ được tin cậy. Việc bật TrustServerCertificate=True có thể giúp kiểm thử hoặc xử lý tình huống đặc thù, nhưng làm giảm mức độ xác thực chứng chỉ và không nên được chọn một cách tùy tiện.
Cách truy vấn dữ liệu qua Linked Server
Sau khi tạo kết nối và phân quyền, có hai cách thường dùng để truy vấn dữ liệu: tên bốn phần và OPENQUERY.
Truy vấn bằng tên bốn phần
Tên bảng đầy đủ có cấu trúc:
LinkedServer.Database.Schema.ObjectVí dụ:
SELECT TOP (100) OrderId, CustomerId, OrderDate, TotalAmountFROM [REPORTING_SQL].[SalesDB].[dbo].[Orders]WHERE OrderDate >= '2026-09-01';Cách này dễ đọc và phù hợp với các truy vấn đơn giản. SQL Server sử dụng tên Linked Server, tên database, schema và object để xác định chính xác bảng cần truy cập. Microsoft gọi đây là cấu trúc tên bốn phần cho truy vấn phân tán.
Truy vấn bằng OPENQUERY
OPENQUERY gửi một câu lệnh pass-through tới máy chủ từ xa:
SELECT OrderId, CustomerId, OrderDate, TotalAmountFROM OPENQUERY( [REPORTING_SQL], ' SELECT OrderId, CustomerId, OrderDate, TotalAmount FROM SalesDB.dbo.Orders WHERE OrderDate >= ''2026-09-01'' ');Cách này hữu ích khi muốn để máy chủ đích thực hiện phần lọc trước, từ đó hạn chế lượng dữ liệu truyền về máy chủ cục bộ. Tuy nhiên, hiệu suất thực tế vẫn phụ thuộc vào index, execution plan, độ trễ mạng và khả năng xử lý của provider.
OPENQUERY yêu cầu Linked Server đã được tạo trước và không sử dụng cấu trúc tên bốn phần trong câu lệnh truy cập nguồn dữ liệu.
Gọi stored procedure từ xa
Nếu cần gọi stored procedure trên máy chủ đích, có thể bật RPC Out:
EXEC master.dbo.sp_serveroption @server = N'REPORTING_SQL', @optname = N'rpc out', @optvalue = N'true';GOSau đó thực thi procedure:
EXEC [REPORTING_SQL].[SalesDB].[dbo].[usp_GetOrderSummary] @FromDate = '2026-09-01', @ToDate = '2026-10-01';rpc out cho phép gửi RPC tới máy chủ được liên kết. Không nên bật tùy chọn này nếu hệ thống chỉ cần đọc bảng hoặc view.
Bảo mật Linked Server cần lưu ý gì?
Một Linked Server hoạt động được chưa có nghĩa là đã được cấu hình an toàn. Rủi ro lớn nhất thường nằm ở login mapping quá rộng, quyền trên máy chủ đích và việc cho phép kết nối mạng không cần thiết.
Chỉ cấp quyền tối thiểu
Tài khoản từ xa nên được tạo riêng cho mục đích của Linked Server. Nếu chỉ dùng để báo cáo, tài khoản này thường chỉ cần quyền đọc trên các view hoặc bảng liên quan.
Không nên ánh xạ tất cả login cục bộ vào một tài khoản từ xa có quyền cao. Khi đó, một người dùng chỉ có quyền hạn chế trên máy chủ cục bộ có thể vô tình hoặc cố ý sử dụng quyền của tài khoản chung để truy cập sâu hơn vào máy chủ đích.
Cẩn thận với Windows Authentication
Nếu sử dụng tùy chọn truyền tiếp security context hiện tại, Windows Authentication có thể yêu cầu Kerberos và delegation. Với các tình huống nhiều bước, chẳng hạn người dùng đăng nhập từ máy trạm tới SQL Server A rồi SQL Server A tiếp tục truy cập SQL Server B, lỗi NT AUTHORITY\ANONYMOUS LOGON có thể xuất hiện nếu delegation hoặc SPN chưa được cấu hình đúng.
Microsoft lưu ý delegation không cần thiết cho một số kết nối một bước, nhưng cần thiết trong các kịch bản nhiều bước.
Hạn chế đường mạng
Chỉ cho phép máy chủ nguồn kết nối tới địa chỉ và cổng cần thiết của máy chủ đích. Không nên mở cổng SQL Server cho toàn bộ Internet chỉ để Linked Server hoạt động.
Trong mô hình cloud hoặc hybrid, nên ưu tiên private network, VPN hoặc cơ chế kết nối nội bộ thay vì phụ thuộc vào địa chỉ công khai.
Bảo vệ kết nối bằng mã hóa
Nếu sử dụng SQL Server 2025 hoặc OLE DB Driver 19, cần kiểm tra rõ cấu hình Encrypt, chứng chỉ và TrustServerCertificate. Không nên xử lý lỗi kết nối bằng cách hạ toàn bộ yêu cầu mã hóa mà không đánh giá rủi ro.
Tối ưu hiệu suất khi dùng Linked Server
Linked Server thường chậm không phải vì bản thân câu lệnh SELECT, mà vì dữ liệu phải đi qua mạng hoặc phần xử lý bị phân tán giữa hai máy chủ.
Lọc dữ liệu ngay tại máy chủ nguồn
Không nên truy vấn SELECT * từ bảng lớn rồi mới lọc ở máy chủ cục bộ. Hãy chỉ lấy những cột cần thiết và đưa điều kiện lọc về phía máy chủ đích.
Ví dụ, thay vì lấy toàn bộ bảng đơn hàng:
SELECT *FROM [REPORTING_SQL].[SalesDB].[dbo].[Orders];nên giới hạn dữ liệu:
SELECT OrderId, OrderDate, TotalAmountFROM OPENQUERY( [REPORTING_SQL], ' SELECT OrderId, OrderDate, TotalAmount FROM SalesDB.dbo.Orders WHERE OrderDate >= ''2026-09-01'' ');Hạn chế join bảng lớn giữa hai máy chủ
Join một bảng cục bộ với một bảng lớn trên Linked Server có thể khiến lượng dữ liệu truyền qua mạng tăng mạnh. Với báo cáo phức tạp, có thể cân nhắc:
- Tạo view hoặc stored procedure xử lý trước trên máy chủ nguồn.
- Lấy tập dữ liệu đã được lọc về bảng tạm.
- Tạo index phù hợp trên bảng tạm rồi mới join cục bộ.
- Đưa dữ liệu báo cáo vào một kho dữ liệu hoặc hệ thống trung gian.
Kiểm tra execution plan ở cả hai phía
Không nên chỉ nhìn execution plan của máy chủ cục bộ. Cần xác định truy vấn nào đang thực thi ở máy chủ từ xa, điều kiện lọc có được đẩy xuống hay không và provider đang xử lý dữ liệu như thế nào.
Với truy vấn chạy thường xuyên, nên đo thời gian phản hồi, lượng dữ liệu truyền qua mạng, CPU, I/O và số lần gọi từ xa trước khi quyết định giữ Linked Server trong luồng production.
Các lỗi Linked Server thường gặp
Bảng dưới đây tóm tắt hướng kiểm tra theo từng nhóm lỗi:
| Lỗi hoặc hiện tượng | Nguyên nhân thường gặp | Hướng kiểm tra |
|---|---|---|
| Không tìm thấy server | Sai tên máy chủ, instance, DNS hoặc firewall | Kiểm tra tên instance, cổng kết nối và rule mạng |
| OLE DB provider không được đăng ký | Provider chưa cài trên máy chủ chạy SQL Server | Cài đúng provider và kiểm tra quyền đọc, thực thi của service account |
| Login failed | Sai tài khoản hoặc login mapping | Kiểm tra tab Security và quyền trên máy chủ đích |
ANONYMOUS LOGON | Windows delegation, SPN hoặc security context chưa đúng | Kiểm tra Kerberos, delegation hoặc dùng mapping rõ ràng |
| Gọi procedure bị từ chối | RPC Out chưa bật | Kiểm tra sp_serveroption |
| Truy vấn timeout | Dữ liệu truyền quá lớn, mạng chậm hoặc truy vấn từ xa thiếu index | Dùng OPENQUERY, lọc dữ liệu sớm và kiểm tra execution plan |
| Kết nối hỏng sau khi nâng cấp SQL Server 2025 | Thay đổi mặc định về encryption và OLE DB Driver 19 | Khai báo Encrypt, dùng chứng chỉ hợp lệ và kiểm tra provider |
Có thể kiểm tra Linked Server bằng stored procedure sau:
EXEC master.dbo.sp_testlinkedserver @servername = N'REPORTING_SQL';sp_testlinkedserver sẽ kiểm tra kết nối và trả về lỗi nếu không thể kết nối thành công.
Để xem các Linked Server đã đăng ký trên instance hiện tại:
SELECT name, product, provider, data_source, is_linkedFROM sys.serversWHERE is_linked = 1;Microsoft cung cấp sys.servers để xem thông tin về các server từ xa và Linked Server đã được đăng ký trong instance.
Câu hỏi thường gặp về Linked Server
Linked Server có sao chép dữ liệu sang máy chủ hiện tại không?
Không. Linked Server chỉ lưu thông tin kết nối và cho phép thực hiện truy vấn hoặc lệnh trên nguồn dữ liệu từ xa. Nếu muốn sao chép dữ liệu, cần triển khai thêm câu lệnh INSERT, ETL, replication hoặc cơ chế đồng bộ phù hợp.
Linked Server có kết nối được Oracle hoặc MySQL không?
Có thể, nếu có OLE DB provider tương thích và provider đó hỗ trợ các thao tác cần thiết. Khả năng đọc, ghi, xử lý kiểu dữ liệu và transaction phụ thuộc vào từng provider, vì vậy cần kiểm thử trước khi đưa vào production.
Linked Server có hoạt động trên Azure SQL Database không?
Theo tài liệu Microsoft, Linked Server có trong SQL Server và Azure SQL Managed Instance nhưng không khả dụng trên Azure SQL Database theo cách tương tự.
Vì sao truy vấn Linked Server bị lỗi NT AUTHORITY\ANONYMOUS LOGON?
Lỗi này thường liên quan đến Windows Authentication, login mapping hoặc Kerberos delegation trong kịch bản kết nối nhiều bước. Có thể xử lý bằng cách cấu hình delegation đúng hoặc ánh xạ login cục bộ tới một tài khoản từ xa cụ thể.
Nên dùng tên bốn phần hay OPENQUERY?
Tên bốn phần dễ viết và phù hợp với truy vấn đơn giản. OPENQUERY phù hợp khi muốn gửi trực tiếp câu lệnh tới máy chủ từ xa, đặc biệt khi cần lọc dữ liệu sớm. Không có lựa chọn nào luôn nhanh hơn; cần kiểm tra execution plan và lượng dữ liệu truyền trong từng trường hợp.
Có thể dùng tài khoản sa cho Linked Server không?
Không nên. Tài khoản Linked Server nên được tạo riêng và chỉ có quyền tối thiểu cần thiết. Dùng sa khiến một lỗi trong ứng dụng hoặc một tài khoản cục bộ bị lộ có thể dẫn tới quyền kiểm soát quá lớn trên máy chủ đích.
Linked Server giúp SQL Server truy cập và xử lý dữ liệu trên máy chủ khác thông qua T-SQL. Giá trị của nó nằm ở khả năng kết nối nhanh các hệ thống hiện hữu, nhưng hiệu quả phụ thuộc vào provider, login mapping, network, mã hóa và cách viết truy vấn. Doanh nghiệp nên dùng Linked Server cho các nhu cầu truy vấn hoặc đối soát có kiểm soát; với đồng bộ dữ liệu lớn hoặc giao dịch quan trọng, cần cân nhắc một kiến trúc tích hợp chuyên biệt hơn.





























