You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSMA迁移Oracle至SQL Server未全量迁移且无报错

Oracle到SQL Server迁移部分行未迁移排查方案

一、先核对基础信息

  • 确认SSMA中选择的迁移表是否和你实际的myschema.users一致:日志里显示的是"sch"."my_USERS",存在表名/schema不一致的可能,先验证Oracle中两个表的实际行数:
    -- Oracle端执行
    SELECT COUNT(*) FROM myschema.users;
    SELECT COUNT(*) FROM sch.my_USERS;
    
  • 同时在SQL Server中确认迁移后的行数:
    -- SQL Server端执行
    SELECT COUNT(*) FROM [DB].[sch].[my_USERS];
    

二、定位未迁移的行及原因

SSMA标记部分迁移但无错误日志,通常是数据兼容性问题导致静默跳过,按以下步骤排查:

  1. 找出缺失行
    假设表有主键user_id,通过主键关联对比源表和目标表:

    -- Oracle端执行(需先创建SQL Server链接服务器)
    SELECT user_id FROM myschema.users
    MINUS
    SELECT user_id FROM [DB].[sch].[my_USERS]@SQLServer_Link;
    

    也可导出两个表的主键列表,用Excel对比差异。

  2. 检查数据类型兼容性

    • 在SSMA中右键目标表,选择Report Type Mapping,查看字段类型转换规则,重点排查:
      • Oracle CLOB/NCLOB转SQL Server VARCHAR(MAX)/NVARCHAR(MAX)时的超长数据截断
      • DATE/TIMESTAMP类型的特殊值(如Oracle的DATE包含时分秒,SQL Server旧版本映射是否匹配)
    • 检查源表中是否存在含不可见字符、换行符的字符串字段,这类数据可能导致插入失败但无明显报错。
  3. 开启SSMA详细日志

    1. 打开SSMA,点击工具 > 设置
    2. 选择日志记录,将日志级别设为详细
    3. 重新执行迁移,查看生成的详细日志,里面会记录每一行的处理状态,可定位被跳过行的具体原因。
  4. 手动测试缺失行
    定位到缺失行后,手动编写SQL插入到SQL Server,观察是否触发具体错误(如违反约束、数据类型不兼容),这是最快定位根因的方法。

三、常见问题解决

  • 重复主键/唯一约束:源表存在重复键,SQL Server插入失败但被SSMA静默跳过,需清理源表重复数据后重新迁移
  • 字符集不兼容:Oracle字符集(如AL32UTF8)与SQL Server字符集(如SQL_Latin1_General_CP1_CI_AS)冲突,导致部分字符无法插入,可将SQL Server目标表字符集改为UTF-8(2019及以上版本支持),或清理源表特殊字符
  • SSMA配置问题:检查SSMA迁移设置是否开启了跳过错误行选项,关闭该选项后重新迁移,会抛出具体错误信息

内容的提问来源于stack exchange,提问作者synccm2012

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:55:00