将SQL Server作为源端
1. 适用场景
本文适用于使用百度智能云
数据传输服务DTS
(以下简称DTS),支持自建SQL Server数据库为源端的数据迁移任务。
2. 迁移前置条件
2.1 数据库账号权限
结构迁移和全量迁移
SQL Server启动CDC功能需要SQL Server代理服务的支持。
CDC要求采用独占方式使用cdc架构和cdc用户,如果某数据库中当前存在名为cdc的架构或数据库用户,那么在删除或重命名此架构或用户之前,不能对此数据库启用变更数据捕获。
如需对启动了CDC功能的源表执行DDL,只能由角色sysadmin、database role db_owner成员或database role db_ddladmin成员操作。
用来启动数据库级别CDC功能的账号,必须是sysadmin角色的成员;用来启动表级别CDC功能的账号,必须是sysadmin或db_owner角色的成员。
不支持列集的增量更改。
不支持计算列的增量更改。
不支持数据类型sql_variant、cursor和table。
暂不支持无主键表增量迁移的DELETE操作。
数据类型MONEY和SMALLMONEY仅支持小数点后两位。
4. 使用SQL Server数据库作为源端
使用SQL Server数据库作为源端,在任务创建、任务配置、前置检查、任务启动、任务暂停、任务终止的操作流程请参考典型实践文档。 在任务配置参数和对象映射部分与其他数据源有些许不同。
4.1 任务配置参数
如上图所示。目前DTS的源端支持公网自建SQL Server实例,SQL Server源端配置参数说明如下:
接入类型:支持公网/BCC/BBC/DCC自建SQL Server实例。
数据类型:固定选择SQL Server。
IP/端口:自建SQL Server数据库的访问IP与服务端口。
数据库:自建SQL Server数据库中待迁移的数据库名。
账号:自建SQL Server的数据库账号。
密码:该数据库账号对应的密码。
4.2 对象映射(异构迁移)
SQL Server为三级schema,当需要向两级schema的目的端进行数据迁移时, DTS提供了两种库表名映射方式供用户选择。如下图所示,选择好的迁移对象会出现在右边的已选择对象列表中。DTS支持上下游库表名映射、列过滤黑白名单等功能。可以点击【编辑】,对每一个迁移对象配置映射和过滤规则。目标数据库对象可以映射为源库中database和schema:
数据库对象映射为源库中的Database: 忽略SQL Server中的schema, SQL Server中不同schema下的表均映射到mysql指定库中,目标端库名默认使用源端的库名。
数据库对象映射为源库中的Schema: 忽略SQL Server中的库名,SQL Server中不同schema映射为mysql中不同库,目标库名默认使用源端schema名。
完成对象映射配置后,点击【保存并预检查】,启动任务的前置检查。
5. 在SQL Server数据库中使用CDC
使用CDC功能之前需要启动数据库代理服务。如果您使用的是RDS for SQL Server,可能存在启动失败,解决方案:
配置账号,请参考
https://docs.microsoft.com/zh-cn/sql/ssms/agent/configure-a-user-to-create-and-manage-sql-server-agent-jobs?redirectedfrom=MSDN&view=sql-server-ver15
如果 SSMS 中"SQL Server代理"属性打开报错,则执行命令:
reconfigure
;
修改代理属性中的错误日志为:C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Log\SQLAGENT.OUT,或者其他存在的路径。
修改本地服务”SQL Server代理“的属性,选择登录身份为"本地系统账号"。
然后启动本地服务、SSMS 中启动SQL Server代理。
5.1 启动数据库级别CDC功能
EXEC
sys
.
sp_cdc_enable_db
;
SELECT
name
,
is_cdc_enabled
FROM
sys
.
databases
WHERE
name
=
'DB_name'
EXEC sys. sp_cdc_enable_table
@source_schema = N'schema_name' ,
@source_name = N'table_name' ,
@role_name = NULL ,
@capture_instance = DEFAULT ,
@supports_net_changes = 0 ,
@index_name = NULL ,
@captured_column_list = NULL ,
@filegroup_name = DEFAULT ,
@allow_partition_switch = 1