我正在将数据子集从一个数据库迁移到另一个数据库。
我正在编写一个.net 应用程序,它将与我们内部的 ORM 进行通信,它将数据从源数据库拖到目标数据库。
我想知道,是否可行,或者将整个过程放入事务范围,然后如果没有问题就提交它是否是一个好主意。
我会说我可能会移动大约 1Gig 的数据。
性能不是问题,但在事务范围内可以有多少修改或新数据有限制吗?
我正在将数据子集从一个数据库迁移到另一个数据库。
我正在编写一个.net 应用程序,它将与我们内部的 ORM 进行通信,它将数据从源数据库拖到目标数据库。
我想知道,是否可行,或者将整个过程放入事务范围,然后如果没有问题就提交它是否是一个好主意。
我会说我可能会移动大约 1Gig 的数据。
性能不是问题,但在事务范围内可以有多少修改或新数据有限制吗?
除了日志文件的物理大小之外没有限制(注意所需的大小将比迁移数据的大小大得多。还要考虑是否有错误并且回滚可能需要非常非常长的事务时间。
如果原始数据库相对较小(< 10 gigs),那么我只需进行备份并在没有事务的情况下运行未记录的迁移。
如果有任何问题,只需从备份中恢复。
(我假设您可以为此使数据库脱机 - 实时迁移是另一个蜡球......)
如果您需要在现场进行,那么在事务中小批量进行是唯一的方法。
我假设您正在不同服务器之间复制数据。
在回答您的问题时,没有限制。然而,有一些限制因素会影响这是否是一个好主意。第一个是锁定和锁定争用。IE:
其他建议:
考虑编写代码,使其具有增量性和可中断性,即一次执行一点,并从中断处继续。这将涉及许多小交易。
考虑将数据加载到目标数据库中的临时表或临时表中,然后在从该源更新时使用事务,使用存储过程或 SQL 批处理。将其放入事务中应该不会有太多麻烦,因为在同一台服务器上,它应该快得多。
也可以考虑 SSIS 作为一个选项。实际上,我对SSIS一无所知,但它应该擅长这种东西。