SQLServer 数据源为您提供读取和写入 SQLServer 的双向通道数据集成能力,实现不同数据源与 SQLServer 之间进行数据传输。本文为您介绍 DataSail 的 SQLServer 数据同步的能力支持情况。
SQL Server 离线读写使用驱动版本是 com.microsoft.sqlserver:mssql-jdbc:7.2.2.jre8,驱动能力请参见官网文档。该驱动支持的SQL Server版本如下所示:
版本 | 离线通道支持性 | 实时整库同步支持性 | 备注 |
|---|---|---|---|
SQL Server 2022 | ✅ 是 | ✅ 是 | 推荐版本 |
SQL Server 2019 | ✅ 是 | ✅ 是 | 推荐版本 |
SQL Server 2017 | ✅ 是 | ✅ 是 | |
SQL Server 2016 | ✅ 是 | ✅ 是(仅限 SP1 及以上) | 需确认已安装 Service Pack 1 |
SQL Server 2014 | ✅ 是 | ❌ 否 | 不支持实时增量同步 |
SQL Server 2012 | ✅ 是 | ❌ 否 | 不支持实时增量同步 |
SQL Server 2008 R2 | ✅ 是 | ❌ 否 | 仅支持离线全量读写 |
SQL Server 2008 | ✅ 是 | ❌ 否 | 仅支持离线全量读写 |
PDW 2008R2 AU34 | ✅ 是 | ❌ 否 | 并行数据仓库版本 |
Azure SQL Database | ✅ 是 | ❌ 否 | 云数据库版本 |
您可以在数据库中执行以下语句,查看 SQL Server 数据库的版本:
SELECT @@VERSION;
子账号新建数据源时,需要有项目的管理员角色,方可以进行新建数据源操作。各角色对应权限说明,详见:管理成员。
建议创建专用同步账号
创建用户 SQL 示例如下:
-- 创建 DataSail 专用同步登录账号 CREATE LOGIN datasail_login WITH PASSWORD = 'YourStrongP@ssw0rd'; -- 在目标数据库中创建用户并关联登录 USE [your_database]; CREATE USER datasail_user FOR LOGIN datasail_login;
离线读 SQLServer 数据时,配置的账号需拥有同步表所在 Schema 的读权限:
-- 授予指定 Schema 的读权限 GRANT SELECT ON SCHEMA::dbo TO datasail_user; -- 如需指定特定表的读权限 GRANT SELECT ON [dbo].[your_table] TO datasail_user;
离线写 SQLServer 数据时,配置的账号需拥有同步表的写(INSERT、DELETE、UPDATE)权限:
-- 授予指定 Schema 的写权限 GRANT INSERT, UPDATE, DELETE ON SCHEMA::dbo TO datasail_user; -- 单独授权指定表 GRANT SELECT ON [dbo].[your_table] TO datasail_user;
数据同步解决方案(实时 CDC 读取) 使用 SQLServer 数据源配置实时方案时,需要配置的账号具备以下额外权限:
-- 授予查看数据库级别变更的权限 GRANT VIEW DATABASE STATE TO datasail_user; -- 授予查看服务器状态的权限(用于监控 CDC 状态) USE master; GRANT VIEW SERVER STATE TO datasail_login; -- 将用户添加到 db_datareader 角色(读取 CDC 变更表) USE [your_database]; EXEC sp_addrolemember 'db_datareader', 'datasail_user';
Change Data Capture (CDC) 所需权限:
EXEC sp_addrolemember 'db_owner', 'datasail_user'; -- 或者更精细的控制: GRANT SELECT ON SCHEMA::cdc TO datasail_user;
SQL Server 实时整库同步依赖 Change Data Capture (CDC) 机制来捕获数据变更。在配置实时同步任务前,需要在 SQL Server 服务端完成以下配置。
如果您只使用离线批式同步,可以跳过本节。
-- 启用数据库的 CDC 功能 USE [your_database]; EXEC sys.sp_cdc_enable_db; -- 验证是否启用成功(is_cdc_enabled 应返回 1) SELECT name, is_cdc_enabled FROM sys.databases WHERE name = 'your_database';
-- 对需要同步的每张表启用 CDC USE [your_database]; EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', @source_name = N'your_table', @role_name = NULL, @supports_net_changes = 1; -- 验证表级别 CDC 是否启用 SELECT name, is_tracked_by_cdc FROM sys.tables WHERE name = 'your_table';
如果您需要同步整库中的所有表,可以使用以下脚本批量启用所有表的 CDC:
USE [your_database]; DECLARE @schema_name NVARCHAR(128); DECLARE @table_name NVARCHAR(128); DECLARE table_cursor CURSOR FOR SELECT s.name, t.name FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.is_tracked_by_cdc = 0 AND t.type = 'U'; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @schema_name, @table_name; WHILE @@FETCH_STATUS = 0 BEGIN EXEC sys.sp_cdc_enable_table @source_schema = @schema_name, @source_name = @table_name, @role_name = NULL, @supports_net_changes = 1; PRINT 'Enabled CDC for: ' + @schema_name + '.' + @table_name; FETCH NEXT FROM table_cursor INTO @schema_name, @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor;
CDC 依赖 SQL Server Agent 来运行捕获和清理作业。请确保 SQL Server Agent 处于运行状态:
-- 查看 CDC 捕获和清理作业的状态 USE [your_database]; EXEC sys.sp_cdc_help_jobs;
注意
CDC 默认保留变更数据 3 天(4320 分钟)。如果同步任务可能出现较长时间的暂停或回溯,建议调大保留期:
-- 查看当前 CDC 保留期设置 USE [your_database]; EXEC sys.sp_cdc_help_jobs; -- 修改 CDC 清理作业的保留期(单位:分钟,以下示例为 7 天) EXEC sys.sp_cdc_change_job @job_type = N'cleanup', @retention = 10080;
SQL Server 默认可能未启用 TCP/IP 协议,需要确保 TCP/IP 已启用,DataSail 才能通过网络连接到数据库:
-- 验证 TCP/IP 连接是否正常(从 DataSail 资源组网络测试) -- 使用 sqlcmd 工具: -- sqlcmd -S <host>,<port> -U datasail_login -P <password> -d your_database -Q "SELECT 1"
为避免在全量同步阶段对生产数据库造成锁等待,建议启用快照隔离级别:
-- 启用数据库的快照隔离 ALTER DATABASE [your_database] SET ALLOW_SNAPSHOT_ISOLATION ON; -- 启用读已提交快照隔离(推荐) ALTER DATABASE [your_database] SET READ_COMMITTED_SNAPSHOT ON;
说明
启用快照隔离会增加 tempdb 的空间使用。请确保 tempdb 有足够的磁盘空间。
确保集成同步任务使用的独享数据集成资源组,具有 SQLServer 数据库节点的网络访问能力。网络互通方案详见网络连通解决方案。

注意
若考虑安全因素,减少 IP CIDR 的访问范围,您至少需要将集成资源组绑定的子网下的 IPv4 CIDR 地址加入到数据库白名单中。


SQL Server 支持 TLS 加密连接。DataSail 使用 JDBC 连接 SQL Server 时,可以通过连接串参数配置加密:
加密模式 | 连接串参数 | 说明 |
|---|---|---|
不加密(默认) |
| 不使用 TLS 加密,适用于内网环境。 |
加密但不验证证书 |
| 使用 TLS 加密但跳过证书验证,适用于自签名证书。 |
加密且验证证书 |
| 使用 TLS 加密并验证服务器证书,推荐用于生产环境。 |
说明
使用加密且验证证书模式时,需要将 SQL Server 的 CA 证书导入到 JVM 的信任存储中。
SQL Server 全量的字段类型详见 SQL Server 帮助文档。以 SQL Server 2016 为例,列举常见的字段类型支持情况。
整数类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
bigint | ✅ 支持 | ✅ 支持 |
int | ✅ 支持 | ✅ 支持 |
smallint | ✅ 支持 | ✅ 支持 |
tinyint | ✅ 支持 | ✅ 支持 |
bit | ✅ 支持 | ✅ 支持 |
精确数值类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
decimal | ✅ 支持 | ✅ 支持 |
numeric | ✅ 支持 | ✅ 支持 |
money | ✅ 支持 | ✅ 支持 |
smallmoney | ✅ 支持 | ✅ 支持 |
浮点类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
float | ✅ 支持 | ✅ 支持 |
real | ✅ 支持 | ✅ 支持 |
日期时间类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
date | ✅ 支持 | ✅ 支持 |
datetime | ✅ 支持 | ✅ 支持 |
datetime2 | ✅ 支持 | ✅ 支持 |
smalldatetime | ✅ 支持 | ✅ 支持 |
time | ✅ 支持 | ✅ 支持 |
datetimeoffset | ❌ 不支持 | ❌ 不支持 |
字符串类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
char | ✅ 支持 | ✅ 支持 |
varchar | ✅ 支持 | ✅ 支持 |
text | ✅ 支持 | ✅ 支持 |
nchar | ✅ 支持 | ✅ 支持 |
nvarchar | ✅ 支持 | ✅ 支持 |
ntext | ✅ 支持 | ✅ 支持 |
二进制类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
binary | ✅ 支持 | ✅ 支持 |
varbinary | ✅ 支持 | ✅ 支持 |
image | ✅ 支持 | ✅ 支持 |
其他类型
字段类型 | SQL Server Reader | SQL Server Writer |
|---|---|---|
uniqueidentifier | ✅ 支持 | ✅ 支持 |
xml | ✅ 支持 | ✅ 支持 |
sql_variant | ✅ 支持 | ✅ 支持 |
cursor | ❌ 不支持 | ❌ 不支持 |
hierarchyid | ❌ 不支持 | ❌ 不支持 |
Spatial Geometry Types | ❌ 不支持 | ❌ 不支持 |
table | ❌ 不支持 | ❌ 不支持 |
rowversion | ❌ 不支持 | ❌ 不支持 |
新建数据源操作详见配置数据源,下面为您介绍用连接串方式配置 SQLServer 数据源信息:
说明
参数 | 说明 |
|---|---|
基本配置 | |
数据源类型 | SQLServer |
接入方式 | 连接串 |
数据源名称 | 数据源的名称,可自行设置,仅支持中文,英文,数字,“_”,100个字符以内。 |
参数配置 | |
主机名或IP地址 | SQLServer 数据库的主机名称或者 IP 地址。 |
端口 | 主机的端口号。 |
数据库名 | 输入已创建的 SQLServer 数据库名称。 |
是否使用KMS密码 | 可选择是否使用KMS密码连接数据库。默认关闭不使用,开启后将使用KMS密码。 |
用户名 | 有权限访问数据库的用户名信息。 说明 是否使用KMS密码为关闭状态时,需设置该参数。 |
密码 | 输入用户名对应的密码信息。 说明 是否使用KMS密码为关闭状态时,需设置该参数。 |
Secret | 用于连接数据库的KMS密码,下拉可选已创建的 SQLServer 凭据。KMS相关信息统一在密钥管理系统中管理,创建凭据的操作可参见凭据管理。 说明 是否使用KMS密码为开启状态时,需设置该参数。 |
数据源注册完成后,建议按照以下步骤验证连通性:
基础连通测试:在数据源注册页面单击测试连通性按钮。
SQL 查询测试:在 DataSail 中执行简单查询验证。
-- 验证连接和权限 SELECT @@VERSION; SELECT DB_NAME(); SELECT SCHEMA_NAME();
CDC 状态验证(如需实时同步):
-- 验证数据库 CDC 是否启用 SELECT name, is_cdc_enabled FROM sys.databases WHERE name = DB_NAME(); -- 验证表 CDC 是否启用 SELECT name, is_tracked_by_cdc FROM sys.tables WHERE is_tracked_by_cdc = 1; -- 查看 CDC 捕获实例 SELECT * FROM cdc.change_tables;
权限验证:
-- 检查当前用户拥有的权限 SELECT * FROM fn_my_permissions(NULL, 'DATABASE');