
# SQL Server数据源
本数据集成服务全面支持云上及线下自建SQL Server数据源，可满足不同用户在多种部署环境下的数据同步需求。
#### 使用前准备及限制
- **网络要求**
  SQL Server数据源必须与CDM网络进行通讯，以确保数据传输的顺畅性。详情请参见[网络打通](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_7765.html)。
  
- **权限要求**
  - **离线读取SQL Server时** ：
    - 账号需具备对同步表的只读权限（SELECT），以确保数据能够被安全、准确地读取。这可以防止未经授权的数据修改，保障数据的完整性和一致性。
    
    - 如果数据集成任务涉及从视图或存储过程读取数据，账号需要具备相应的SELECT权限。
    
    - 建议账号至少具备**db_datareader**角色权限，以确保能够读取数据库中的所有用户表数据。
     
  
  - **离线写入SQL Server时** ：
    - 账号需具备对同步表的写入权限（INSERT、DELETE、UPDATE），以便能够将数据正确写入目标表。这些权限允许数据集成服务对目标表进行数据插入、更新或删除操作，确保数据同步的完整性和准确性。
    
    - 如果数据集成任务涉及新建表或删除表，账号需要具备相应的权限（CREATE TABLE、DROP TABLE）。这通常需要**db_ddladmin** 或**db_owner**角色权限。
    
    - 建议账号至少具备**db_datawriter** 角色权限，以确保能够对数据库中的所有用户表进行写入操作。如果需要进行表结构的修改或创建，建议赋予**db_ddladmin** 或**db_owner**角色权限。
     
  
  - **特殊说明** ：
    - 在某些复杂的数据迁移场景下，尤其是涉及跨数据库操作、动态SQL执行或高级配置时，可能需要**sysadmin**权限。然而，出于安全考虑，建议仅在必要时赋予此权限，并在任务完成后立即撤销。
    
    - 账号需要具备连接到SQL Server实例的权限（CONNECT）。这通常默认授予所有用户，但如果存在限制，需要确保账号具备此权限。
     
   
- **版本建议**
  Microsoft SQL Server建议使用的版本为2005及以上版本。
  
 
#### 驱动选择
| 驱动名称      | 获取地址                                                                                                                                                                | 建议版本                                                                                                                                                 |
|:---|:---|:---|
| SQLServer | [Microsoft JDBC Driver for SQL Server](https://docs.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-server-ver15#previous-releases) | 4.2版本，获取[sqljdbc42.jar](https://docs.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-server-ver15#previous-releases) |
   
#### 支持的数据类型
以SQL Server 2016为基准，本数据集成服务兼容以下字段类型及其常见变体，确保在读写操作中能够准确处理各类数据：
| 类别  | 字段类型             | SQL Server 读取 | SQL Server 写入 |
|:---|:---|:---|:---|
| 整数型 | bigint           | √             | √             |
| 整数型 | int              | √             | √             |
| 整数型 | smallint         | √             | √             |
| 整数型 | tinyint          | √             | √             |
| 整数型 | bit              | √             | √             |
| 浮点数 | float            | √             | √             |
| 浮点数 | real             | √             | √             |
| 数值  | decimal          | √             | √             |
| 数值  | numeric          | √             | √             |
| 数值  | money            | √             | √             |
| 数值  | smallmoney       | √             | √             |
| 字符型 | char             | √             | √             |
| 字符型 | varchar          | √             | √             |
| 字符型 | text             | √             | √             |
| 字符型 | nchar            | √             | √             |
| 字符型 | nvarchar         | √             | √             |
| 字符型 | ntext            | √             | √             |
| 二进制 | binary           | √             | √             |
| 二进制 | varbinary        | √             | √             |
| 二进制 | image            | √             | √             |
| 时间  | date             | √             | √             |
| 时间  | datetime         | √             | √             |
| 时间  | datetime2        | √             | √             |
| 时间  | smalldatetime    | √             | √             |
| 时间  | time             | √             | √             |
| 其他  | sql_variant      | x             | x             |
| 其他  | uniqueidentifier | √             | √             |
| 其他  | xml              | √             | √             |
| 其他  | identity int     | √             | √             |
   
#### 支持的迁移场景
数据集成离线同步支持以下三种同步方式，以满足不同数据迁移场景的需求：
- **单表同步**
  适用于数据入湖和数据上云场景下，表或文件级别的数据同步。
  
- **分库分表同步**
  适用于数据入湖和数据上云场景下，多库多表同步场景。
  
- **整库迁移**
  适用于数据入湖和数据上云场景下，离线或自建数据库整体同步场景。
  
云场景下，离线或自建数据库整体同步场景。支持的数据源类型请参考整库同步支持的数据源类型。
需要注意的是，分库分表与整库迁移能力会根据不同region的上线支持情况有所不同，具体支持情况以页面为准。以下是针对SQL Server的支持迁移场景概览：
| 支持迁移场景 | SQL Server单表读取 | SQL Server单表写入 | SQL Server分库分表读取 | SQL Server分库分表写入 | SQL Server整库读取 | SQL Server整库写入 |
|:---|:---|:---|:---|:---|:---|:---|
| 是否支持   | √              | √              | √(部分region支持)    | √(部分region支持)    | x              | x              |
   
#### 核心能力速览
- **连接配置**
  
  | 配置项     | 支持情况 | 说明                                     |
  |:---|:---|:---|
  | 用户/AK   | √    | 支持用户认证，确保连接安全。                         |
  | SSL加密   | √    | 支持SSL加密，保障数据传输安全，当前仅支持云上RDS开启SSL认证。    |
  | SSL认证支持 | x    | 当前默认不开启证书认证能力。                         |
  | 私有证书支持  | x    | 不支持私有证书。                               |
  | 连接配置调优  | √    | 支持connectTimeout等连接配置调优，可根据实际需求优化连接性能。 |
  | 自定义驱动   | √    | 支持自定义驱动，提供更高的灵活性。                      |
     
  
- **读取能力**
  
  | 配置项    | 支持情况 | 说明                                                       |
  |:---|:---|:---|
  | 分片并发   | √    | 支持按主键或常见字段做水平分片，多线程并行抽取，显著提升吞吐效率。                        |
  | 脏数据处理  | √    | 支持异常数据写入脏数据桶，避免因少量异常数据导致作业失败。                            |
  | 自定义字段  | √    | 可在任务级追加计算列、常量列或脱敏函数，满足个性化业务需求。                           |
  | 增量读取   | √    | 支持where条件和SQL模式，可实现增量读取。                                 |
  | 流批读取方式 | 批读   | 支持批量读取，适用于中小数据量场景，可一次性处理数据，提高处理效率。                       |
  | 读取行数调优 | √    | 可根据需求在连接中配置【单次请求行数】，合理控制数据传输量，优化性能，避免因数据量过大导致的传输延迟或系统压力。 |
     
  
- **写入能力**
  
  | 配置项     | 支持情况 | 说明                                                          |
  |:---|:---|:---|
  | 数据源调优参数 | √    | 支持batchSize、socketTimeout等写入端优化配置，提升写入性能。                   |
  | 脏数据处理   | √    | 支持异常数据写入脏数据桶，避免因少量异常数据导致作业失败。                               |
  | 冲突解决    | x    | 不支持冲突解决机制。                                                  |
  | 导入前后处理  | √    | 支持preSql/delete等操作，可在数据导入前后进行数据清洗和处理。                       |
  | 并发写入    | √    | 支持并发写入，提升写入效率。                                              |
  | 写入行数调优  | √    | 可根据需求配置单次写入的行数，合理控制数据传输量，优化性能，避免因数据量过大导致的传输延迟或系统压力，该数据源不支持。 |
     
  
 
#### 创建数据源
在DataArts Studio管理中心新建相应的数据源，详情请参见[创建DataArts Studio数据连接](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0009.html)。
#### 创建数据集成离线作业
在DataArts Studio数据开发中新建SQL Server集成作业，详情请参见[新建离线处理集成作业](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_1458.html)。
#### 常见问题
[OBS 导入数据到 SQL Server 时出现 "Unable to execute the SQL statement" 怎么处理？](https://support.huaweicloud.com/dataartsstudio_faq/dataartsstudio_03_0106.html)
#### 最佳实践
[关系型数据库增量迁移](https://support.huaweicloud.com/bestpractice-dataartsstudio/dataartsstudio_05_0005.html)
