如何将SSMS管理的MSFT SQL Server数据库(含2100万数据)迁移至Oracle
从SQL Server(SSMS)迁移2100万条数据到Oracle的实操方案
针对大数据量(2100万条)的迁移,推荐以下几种成熟方案,按易用性和效率排序:
一、Oracle SQL Developer 迁移工具(官方免费,优先推荐)
这是Oracle官方提供的可视化迁移工具,对新手友好,且针对大数据量做了优化:
- 前置准备:安装Oracle SQL Developer,在工具中添加SQL Server的JDBC驱动(
mssql-jdbc.jar,可从微软官网下载后导入) - 操作步骤:
- 在SQL Developer中分别创建SQL Server源连接和Oracle目标连接,确保两者连通正常
- 点击顶部菜单「迁移」→「迁移向导」,按提示选择源数据库为SQL Server,目标为Oracle
- 选择需要迁移的对象(表、视图、存储过程等),重点核对数据类型映射:比如SQL Server的
nvarchar对应Oracle的varchar2,datetime对应timestamp,identity列需映射为Oracle的「序列+触发器」 - 先执行结构迁移(创建目标表结构),再启动数据迁移;针对2100万条数据,建议在迁移设置中开启「批量提交」(设置批量大小为10000条/批),同时启用并行迁移任务提升速度
二、SSIS(SQL Server Integration Services)
适合熟悉SQL Server生态的用户,可灵活定制迁移逻辑:
- 前置准备:确保已安装SSDT(SQL Server Data Tools),并安装Oracle ODAC驱动(Oracle Data Access Components)
- 操作步骤:
- 新建SSIS项目,拖入「数据流任务」
- 在数据流中添加「OLE DB源」,连接SQL Server并选择要迁移的表;再添加「OLE DB目标」,连接Oracle并关联目标表(无表则直接新建)
- 配置数据类型映射,开启「快速加载」选项,设置批量插入行数(比如5000条/批),调整缓冲区大小适配内存
- 若数据量过大,可按ID或时间字段拆分迁移任务,分批次执行避免资源耗尽
三、命令行脚本方式(适合自动化/特殊场景)
用SQL Server的bcp导出文本,再用Oracle的sqlldr(SQL*Loader)导入,效率极高:
- 导出SQL Server数据:在命令行执行
bcp "SELECT * FROM 源库名.dbo.目标表" queryout "D:\data\export.txt" -S SQLSERVER实例名 -U 用户名 -P 密码 -c -t "," -r "\n" - 准备Oracle控制文件(比如
load.ctl):LOAD DATA INFILE 'D:\data\export.txt' INTO TABLE 目标库.目标表 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' (列1, 列2, 列3, ...) - 执行Oracle导入:在命令行执行
大文件可拆分后并行导入,提升效率sqlldr 用户名/密码@Oracle实例名 control=load.ctl log=load.log PARALLEL=true
关键注意事项
- 索引与约束:迁移数据前先删除目标表的索引和外键约束,完成后再重建,避免迁移过程中IO开销过大
- 日志优化:迁移时可临时设置Oracle表为
NOLOGGING模式(ALTER TABLE 表名 NOLOGGING;),完成后改回LOGGING,减少日志写入量 - 数据验证:迁移完成后,务必核对源表与目标表的行数,抽样检查字段值(比如随机选取100行对比),确保数据准确
内容的提问来源于stack exchange,提问作者Shashidhar R
相关产品推荐
相关产品推荐

