Fatal error encountered during data read.

语言:C#  (主要技术:SqlBulkCopy)
场景:MySQL => SQL Server
需求:将MySQL中的一个 1186264 行( 纯数据大小 2.8 GB )的表所有记录传输到 SQL Server 的表中。


发现异常后处理过程:

1. 先将sql语句前面加上:"set net_write_timeout=99999; set net_read_timeout=99999;" , 异常依旧;
2. 发现大约执行 10 分钟后产生了异常,于是在 MySQL 中执行: " set global wait_timeout=99999; " , 异常依旧;
3. 设置 BulkSize = 1000 ,再执行程序发现SQL Server表中查到记录数在增长,但大约传输 38 万行数据后不再有数据增加, 近一个小时还没动静,手动停止了;
4. MySQL中增加一个新表 dc_init_temp 

drop table if exists dc_init_temp;
create table dc_init_temp(
    pkId varchar(100) not null,
    autoId INT(10) AUTO_INCREMENT,
    PRIMARY KEY (`pkId`),
    KEY `ix_dc_init_temp_autoId` (`autoId`)
);

5. 将表中主键插入到新表中;

6. 采用分页方式循环将记录传输到SQL Server:

set net_write_timeout=99999; set net_read_timeout=99999;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
select * from dbName.tableName as a
WHERE  a.id in
(
    SELECT b.`pkId`
    FROM   `dc_init_temp` as b
    where  b.autoId>? and b.autoId<=?  #(pageIndex-1)*pageSize ,  pageIndex*pageSize
);
COMMIT;

7. 到此终于解决, 同步完成 634 秒(当然,因为是测试环境的虚拟机,IO差一点,正式服务器会更快)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值