本文介绍使用 DTS 数据迁移功能从 SQL Server 迁移数据至腾讯云数据库 SQL Server 的操作指导。
注意事项
网络共享存储盘的环境暂不支持使用 DTS 迁移数据。
DTS 在执行全量数据迁移时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您的数据库配置过低,建议您在业务低峰期进行迁移。
全量迁移过程通过有锁迁移来实现,锁表过程中会短暂(秒级)阻塞写入操作。
由于迁移完成后数据文件的物理环境发生了改变,数据库索引会失效,迁移完成后需要对索引进行重建,否则可能会导致数据库性能有明显下降。
前提条件
源数据库和目标数据库符合迁移功能和版本要求,请参见 数据迁移支持的数据库 进行核对。
已完成 准备工作。
源数据库所在的服务要开放文件共享端口445。
源数据库必须得设置为“完全恢复模式”,且在迁移前建议用户自己做下全量备份。
源数据库所在本地磁盘空间需要足够大,剩余空闲空间能放下要迁移库的大小。
当源实例非腾讯云 SQL Server 实例(公网/CVM 自建实例、其他云厂商实例)或腾讯云单节点(原基础版) SQL Server 实例时,目标端需使用具有 sysadmin 权限的账号进行迁移,且需要能够运行 xp_cmdshell 存储过程,当源实例为腾讯云双节点(原高可用版/集群版) SQL Server 时,目标端账号无权限限制。
迁移源端的 SQL 服务启动账号需要改为内置账户 Local System 启动,源端迁移的数据库账号无限制,但是需要有 sysadmin 权限。
如图所示,迁移源端的 SQL 服务启动,启动配置中的登录身份,选择内置账户,并修改为 Local System 启动。注意:
修改账号后需要重启 SQL server 服务。
应用限制
同一源实例同一时间只能发起一个迁移任务。
当前中国大陆及中国香港地域可以支持跨地域迁移,其他地域不支持跨地域迁移。
只支持库粒度迁移,即在迁移过程中,只支持将库的所有对象一起迁移,不支持单个表的迁移。
不支持迁移实例级别的 login、job agent、触发器、db link (link server)。
操作限制
迁移过程中,请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号,否则会导致迁移任务失败。
增量同步的过程中,不能进行事务日志备份,否则会截断事务日志,导致事务日志不能连续。
如果仅执行全量数据迁移,请勿在迁移过程中向源实例中写入新的数据,否则会导致源和目标数据不一致。针对有数据写入的场景,为实时保持数据一致性,建议选择全量 + 增量数据迁移。
针对全量 + 增量数据迁移,当单击完成,任务状态为完成中时,请勿向源数据库中写入新的数据,建议在单击完成前至少2分钟停写新的数据,否则可能会导致源和目标库的数据不一致。
支持的 SQL 操作
操作类型 | 支持的 SQL 操作 |
DML | INSERT、UPDATE、DELETE、REPLACE |
DDL | TABLE:CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、RENAEM TABLE VIEW:CREATE VIEW、ALTER VIEW、DROP VIEW INDEX:CREATE INDEX、DROP INDEX DATABASE:CREATE DATABASE、ALTER DATABASE、DROP DATABASE |
环境要求
说明:
类型 | 环境要求 |
源数据库要求 | 源实例所在的服务需要开放文件共享端口445。 源库和目标库网络能够连通。 源库所在的服务器需具备足够的出口带宽,否则将影响迁移速率。 |
目标数据库要求 | 仅支持单节点(原基础版)迁移到双节点(原高可用版/基础版),且目标实例的版本号需要大于或等于源实例的版本号。 目标库不能有和源库同名的库。 目标库所在的磁盘空间要大于源库大小,要为源库的1.5倍。 目标库不能有访问,不能有负载业务进行,否则会导致迁移失败。 |
操作步骤
1. 登录 DTS 控制台,在左侧导航选择数据迁移页,单击新建迁移任务,进入新建迁移任务页面。
2. 在新建迁移任务页面,选择迁移的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买。
配置项 | 说明 |
源实例类型 | 请根据您的源数据库类型选择,购买后不可修改。本场景选择“SQL Server”。 |
源实例地域 | 选择源数据库所属地域。如果源库为自建数据库,选择离自建数据库最近的一个地域即可。 |
目标实例类型 | 请根据您的目标数据库类型选择,购买后不可修改。本场景选择“SQL Server”。 |
目标实例地域 | 选择目标数据库所属地域。 |
规格 |
3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置,测试源库和目标库连通性通过后,单击新建。
说明:
设置类型 | 配置项 | 说明 |
任务设置 | 任务名称 | 设置一个具有业务意义的名称,便于任务识别。 |
| 运行模式 | 立即执行:完成任务校验通过后立即启动任务。 定时执行:需要配置一个任务执行时间,到时间后启动任务。 |
| 标签 | 标签用于从不同维度对资源分类管理。如现有标签不符合您的要求,请前往控制台管理标签。 |
源库设置 | 源库类型 | 购买时选择的源库类型,不可修改。 |
| 所属地域 | 购买时选择的源库地域,不可修改。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 云主机自建:源数据库部署在 腾讯云服务器 CVM 上。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 对于第三方云厂商数据库,一般可以选择公网方式,也可以选择 VPN 接入,专线或者云联网的方式,需要根据实际的网络情况选择。 |
| 数据库实例 | 选择源库的实例 ID。 |
| 账号 | 源库 SQL Server 的数据库账号,账号权限需要满足要求。 |
| 密码 | 源库 SQL Server 的数据库账号的密码。 |
目标库设置 | 目标库类型 | 购买时选择的目标库类型,不可修改。 |
| 所属地域 | 购买时选择的目标库地域,不可修改。 |
| 接入类型 | 根据您的场景选择,本场景选择“云数据库”。 |
| 数据库实例 | 选择目标库的实例 ID。 |
| 账号 | 目标库的数据库账号,账号权限需要满足要求。 |
| 密码 | 目标库的数据库账号的密码。 |
4. 在设置迁移选项及选择迁移对象页面,设置迁移类型、对象,单击保存。
配置项 | 说明 |
迁移类型 | 请根据您的场景选择。 全量迁移:迁移整个数据库,迁移数据仅针对任务发起时,源数据库已有的内容,不包括任务发起后源库实时新增的数据写入。 全量 + 增量迁移:迁移数据包括任务发起时源库的已有内容,也包括任务发起后源库实时新增的数据写入。如果迁移过程中源库有数据写入,需要不停机平滑迁移,请选择此场景。 |
指定对象 | 只支持库粒度迁移,即指定库的所有对象需要一起迁移。在源库对象中选择待迁移的库,然后将其移到已选对象框中。 |
5.
在校验任务页面
,进行校验,校验任务通过后,单击启动任务。
如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。
6. 返回数据迁移任务列表,任务进入准备运行状态,运行1分钟 - 2分钟后,数据迁移任务开始正式启动。
选择全量迁移:任务完成后会自动结束,不需要手动结束。
选择全量 + 增量迁移:全量迁移完成后会自动进入增量数据同步阶段,增量数据同步不会自动结束,需要您手动单击完成结束增量数据同步。
请选择合适时间手动完成增量数据同步,并完成业务切换。
观察迁移阶段的状态为准备完成,将源库停写几分钟,之后再手动完成增量同步。
7. (可选)如果您需要进行查看任务、删除任务等操作,请单击对应的任务,在操作列进行操作,详情可参考 任务管理。
8. 当迁移任务状态变为任务成功时,即可对业务进行正式割接,更多详情可参考 割接说明。
迁移前校验任务检查项
迁移参数检查
迁移网络检查
源库连接性检查
目的库连接性检查
硬盘空间检查
字符集检查
数据库版本检查
用户权限检查
源库存在性检查
目的库存在性检查
迁移前校验失败错误详情及解决方案
序号 | 错误详情 | 建议 |
1 | 迁移的数据库在目标实例中已经存在。 | 请更换源实例中迁移的数据库或者请将目标实例上和迁移数据库重名的库删除。 |
2 | 提供的迁移账号无法登录 | 1. 请检查源实例是否已经处于运行中状态 2. 请检查源实例端口是否被防火墙安全组阻止访问。 3. 请检查源实例端口是否填写错误。 4. 请检查源实例的账号和密码是否填写错误。 |
3 | 迁移的数据库名称不符合规范,数据库名称只允许由“字母”/“数字”/“_”组成,必须由字母开头。 | 请更换源实例中迁移的数据库或者请将源实例中迁移的数据库按照命名提示规范重命名,之后再进行迁移。 |
4 | 迁移的数据库名称长度至少是1个字符。 | 请更换源实例中迁移的数据库或者请将源实例中迁移的数据库按照命名提示规范重命名,之后再进行迁移。 |
5 | 迁移的数据库名称长度最长不超过64个字符。 | 请更换源实例中迁移的数据库或者请将源实例中迁移的数据库按照命名提示规范重命名,之后再进行迁移。 |
6 | 迁移的数据库名称中包含敏感字符。 | 请更换源实例中迁移的数据库或者请将源实例中迁移的数据库进行重命名,去掉非法字符后再进行迁移。 |
7 | 等待网络检查。 | 请等待网络检查,无需操作处理。 |
8 | 网络检查失败。 | |
9 | 检查数据传输服务器是否能连通源数据库。 | 1. 请检查源实例的 SQL 服务启动账号是否是使用内置账户 Local System 启动的,需要将启动配置中的“登录身份”选择“内置账户”并修改为 Local System 账户启动。 2. 请检查源实例是否开启了 xp_cmdshell,需要将 xp_cmdshell 开启。 3. 请检查迁移账号需要有 sysadmin 权限。 |
10 | 迁移账号权限不足,无法完成迁移。 | 1. 请检查源实例的 SQL 服务启动账号是否是使用内置账户 Local System 启动的,需要将启动配置中的“登录身份”选择“内置账户”并修改为 Local System 账户启动。 2. 请检查源实例是否开启了 xp_cmdshell,需要将 xp_cmdshell 开启。 3. 请检查迁移账号需要有 sysadmin 权限。 |
11 | 检查目的服务器硬盘空间是否足够。 | |
12 | 检查字符集是否一致。 | 请检查字符集是否一致,如不一致,请将源数据库和目的数据库的字符集调整为一致。 |
13 | 检查数据库版本号是否一致。 | 请检查源实例及目标实例的数据库版本,高版本实例不能向低版本实例迁移,例如:源实例2012版本不能迁移到目标实例2008版本。目标实例的版本必须要大于或等于源实例的版本才可进行迁移,可以通过控制台的 调整实例版本 功能升级目标实例的版本。 |
14 | 检查目标实例权限是否存在。 | |
15 | 检查源数据库是否存在。 | 在源实例中未找到待迁移的数据库,请确定待迁移的数据库在源实例是否存在。 |
16 | 检查目标数据库是否存在。 | 迁移的数据库在目标实例已经存在,请把目标实例上和迁移数据库重名的数据库删除或重命名后再进行重试。 |
17 | 连不上源服务器,请检查账号密码是否正确。 | 1. 请检查源实例的 SQL 服务启动账号是否是使用内置账户 Local System 启动的,需要将启动配置中的“登录身份”选择“内置账户”并修改为 Local System 账户启动。 2. 请检查源实例是否开启了 xp_cmdshell,需要将 xp_cmdshell 开启。 3. 请检查迁移账号需要有 sysadmin 权限。 |
18 | 检查数据传输服务器是否能连通目标数据库。 |
迁移中的迁移步骤流程
1. 禁止备份作业。
2. 备份数据库。
3. 传输备份文件。
4. 恢复数据库。
5. 部署实时同步。
迁移中任务失败错误详情及解决方案
序号 | 错误信息 | 建议 |
1 | 任务失败!请提交工单,获取解决方案。 | |
2 | 在源实例中未找到待迁移的数据库。 | 在源实例中未找到待迁移的数据库,请确认待迁移的数据库在源实例是否存在。 |
3 | 源实例无法执行迁移初始化操作。 | 源实例无法执行迁移初始化操作: 1. 请检查源实例的 SQL 服务启动账号是否是使用内置账户 Local System 启动的,需要将启动配置中的“登录身份”选择“内置账户”并修改为 Local System 账户启动。 2. 请检查源实例是否开启了 xp_cmdshell,需要将 xp_cmdshell 开启。 3. 请检查迁移账号需要有 sysadmin 权限。 |
4 | 高版本实例不能向低版本实例迁移。 | 高版本实例不能向低版本实例迁移,例如:源实例2012版本不能迁移到目标实例2008版本。目标实例的版本必须要大于或等于源实例的版本才可进行迁移,可以通过控制台的 调整实例版本 功能升级目标实例的版本。 |
5 | 源实例的备份作业无法禁止。 | |
6 | 源库创建全量备份文件失败。 | 源库创建全量备份文件失败: 1. 请在源实例的 cmd 终端执行 net share,查看名字是 backup 的共享文件夹是否存在。 2. 请检查源实例共享文件夹里的备份文件是否生成。 3. 请检查源实例磁盘空间是否不足以创建备份。 |
7 | 源实例传送备份文件失败。 | 源实例传送备份文件失败: 1. 请检查源实例文件共享服务是否启动。 2. 请检查源实例中以“ls” 开头的系统账号是否正确创建。 3. 请在源实例的 cmd 终端执行 net share,查看名字是 backup 的共享文件夹是否存在。 4. 请检查以 “ls”开头的系统账号对共享文件夹是否有完全控制权限。 |
8 | 在目标实例通过备份文件恢复数据库失败。 | 在目标实例通过备份文件恢复数据库失败: 1. 请检查源实例文件共享服务是否启动。 2. 请检查源实例中以“ls”开头的系统账号是否正确创建。 3. 请在源实例的 cmd 终端执行 net share,查看名字是 backup 的共享文件夹是否存在。 4. 请检查以 “ls” 开头的系统账号对共享文件夹是否有完全控制权限。 |
9 | 部署增量同步失败。 | |
10 | 同步增量日志失败。 | 同步增量日志失败: 1. 同步中的网络连接异常,无法共享增量文件,请重新进行迁移。 2. 增量迁移过程中事务日志被截断,请停止源实例上的日志备份作业,重新进行迁移。 |
11 | 同步结束后,数据存在不一致。 | 同步结束后,数据存在不一致。当前已完成全量备份数据的同步,请手动检查迁移后的数据,如数据差异较大,需要注意: 1. 点击“完成”时,源实例需要停机,然后重试迁移。 2. 增量迁移过程中事务日志被截断,请停止源实例上的日志备份作业,重新进行迁移。 |
相关 API