Để thực hiện truy vấn chéo giữa các hệ thống cơ sở dữ liệu khác nhau — như từ SQL Server sang SQL Server hoặc từ SQL Server sang Oracle — ta có thể sử dụng tính năng Linked Server. Đây là giải pháp thay thế gần nhất cho khái niệm DBLINK trong Oracle, cho phép truy cập dữ liệu từ xa thông qua cú pháp 4 phần: [linked_server].[database].[schema].[object].
Kiểm tra phiên bản và môi trường SQL Server
Trước khi cấu hình liên kết, cần xác minh phiên bản và khả năng hỗ trợ của máy chủ:
SELECT
@@VERSION AS 'Phiên bản SQL Server & Hệ điều hành',
SERVERPROPERTY('ProductVersion') AS 'Số hiệu sản phẩm',
SERVERPROPERTY('ProductLevel') AS 'Cấp bản vá',
SERVERPROPERTY('Edition') AS 'Phiên bản phát hành',
SERVERPROPERTY('EngineEdition') AS 'Loại động cơ';
Kết quả trả về giúp xác định xem bạn đang dùng phiên bản nào (ví dụ: SQL Server 2019 Developer Edition), từ đó chọn trình điều khiển phù hợp (MSOLEDBSQL thay vì SQLNCLI11 nếu hỗ trợ).
Thiết lập liên kết giữa hai máy chủ SQL Server
Dưới đây là quy trình tạo một linked server tên REMOTESQL01, trỏ tới một instance SQL Server khác trên mạng nội bộ:
-- Bước 1: Đăng ký máy chủ liên kết
EXEC sp_addlinkedserver
@server = N'REMOTESQL01',
@srvproduct = N'',
@provider = N'MSOLEDBSQL', -- Trình điều khiển hiện đại, an toàn hơn
@datasrc = N'10.20.30.40,1433',
@catalog = N'ProductionDB';
-- Bước 2: Gắn thông tin đăng nhập cho kết nối từ xa
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'REMOTESQL01',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'app_user',
@rmtpassword = N'Str0ngP@ssw0rd!';
-- Bước 3: Cấu hình tùy chọn tối ưu hóa
EXEC sp_serveroption REMOTESQL01, 'collation compatible', 'true';
EXEC sp_serveroption REMOTESQL01, 'data access', 'true';
EXEC sp_serveroption REMOTESQL01, 'rpc out', 'true';
EXEC sp_serveroption REMOTESQL01, 'connect timeout', '20';
EXEC sp_serveroption REMOTESQL01, 'query timeout', '120';
Sau khi thiết lập thành công, bạn có thể truy vấn trực tiếp:
SELECT TOP 10 ProductID, Name, ListPrice
FROM REMOTESQL01.ProductionDB.dbo.Product;
Thiết lập liên kết từ SQL Server sang Oracle
Yêu cầu cài đặt Oracle Provider for OLE DB (OraOLEDB) hoặc Oracle Data Access Components (ODAC) trên máy chủ SQL Server. Đảm bảo tnsnames.ora đã được cấu hình đúng tại vị trí %ORACLE_HOME%\network\admin\.
-- Tạo linked server trỏ tới Oracle qua TNS alias 'ORCLPROD'
EXEC sp_addlinkedserver
@server = N'ORACLE_PROD',
@srvproduct = N'Oracle',
@provider = N'OraOLEDB.Oracle',
@datasrc = N'ORCLPROD';
-- Thiết lập xác thực
EXEC sp_addlinkedsrvlogin
@rmtsrvname = N'ORACLE_PROD',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'hr',
@rmtpassword = N'hr_password';
-- Kích hoạt RPC để hỗ trợ stored procedure từ xa (nếu cần)
EXEC sp_serveroption 'ORACLE_PROD', 'rpc out', 'true';
Vì Oracle không hỗ trợ truy vấn 4 phần trực tiếp như SQL Server, nên thường phải dùng OPENQUERY:
SELECT * FROM OPENQUERY(ORACLE_PROD, 'SELECT employee_id, first_name, salary FROM employees WHERE ROWNUM <= 5');
Xóa cấu hình liên kết
Khi không còn sử dụng, hãy gỡ bỏ theo thứ tự đúng để tránh lỗi phụ thuộc:
-- Xóa ánh xạ đăng nhập trước
EXEC sp_droplinkedsrvlogin @rmtsrvname = 'ORACLE_PROD', @locallogin = NULL;
-- Sau đó mới xóa máy chủ liên kết
EXEC sp_dropserver @server = 'ORACLE_PROD', @droplogins = 'droplogins';