【DM版本】: 8
【操作系统】:centos
【CPU】:
【问题描述】*:
我使用select分批分页导出全部数据,但是如果导出数据的时候,对数据库有增删改操作,那么此次导出的数据有丢失,请问这个是什么原因?如何处理才能不丢数据?
我只要那一刻的数据不丢就行,导出数据的过程中增删改的数据丢不丢无所谓
我是用go语言实现的全量导出
你是怎么分批分页进行查询的哈 试着begin 放到一个事务里去做呢
如果你是使用的dexp导出是不会发生你说的问题,因为dexp属于快照导出,会导出那一时刻的数据后面数据有变化是不不影响你导出结果的。
如果你用的insert into select分页导出是会发生你说的情况,那么要想解决有两种方式 一种是加锁for update 或者lock table锁定原表,但是这种方式会阻塞后续得事务。另一种方式是使用物化视图确保数据的一致性,你可以创建一个物化视图来存储源表在特定时间点的数据。
1、先将表放到备份表,然后通过备份表导出数据,创建备份表语句:create table 备份表 as select *from 表;
2、采用dexp的方式;
3、使用dts直接迁移;
有个猜想,是因为你的SQL语句,多次执行因为排序数据重复问题,导致多次执行同一个SQL得到的结果集顺序不一致, 你可以试试排序时将主键字段加上以保证排序唯一
你是导出的dmp文件吗,最好是停业务或者是在业务量较低的时间段去导出,以防导出时有新数据产生