将数据迁移包装到单个事务范围中是一个好主意吗?

时间:2011-03-16 22:47:23

标签: sql-server-2008 transactionscope database-migration

我正在从一个数据库到另一个数据库的数据子集进行数据迁移。

我正在编写一个.net应用程序,它将与我们的内部ORM进行通信,这将把数据从源数据库拖到目标数据库。

我想知道,它是否可行,或者将整个流程放入事务范围,然后如果没有问题提交它也是一个好主意。

我说我可能会移动大约1Gig的数据。

性能不是问题,但是对事务范围内可以修改的数据或新数据有限制吗?

2 个答案:

答案 0 :(得分:2)

除了日志文件的物理大小之外没有其他限制(请注意,所需的大小将远远大于迁移数据的大小。还要考虑是否存在错误并且您回滚可能需要非常大的事务很长一段时间。

如果原始数据库相对较小(<10 gigs),那么我只是进行备份并在没有事务的情况下运行未记录的迁移。

如果有任何问题,请从备份恢复。

(我假设您可以将数据库脱机以进行迁移 - 当生存是另一个蜡球时进行迁移...)

如果您需要在现场进行,那么在交易中小批量进行是唯一的方法。

答案 1 :(得分:0)

我假设您在不同服务器之间复制数据。

在回答你的问题时,没有限制。然而,限制因素将影响这是否是一个好主意。主要的是锁定和锁定争用。即:

  • 如果服务器正在用于其他查询,那么长时间运行的事务可能会锁定其他用户。
  • 然而,如果服务器未使用,则不需要交易。

其他建议:

  • 考虑编写代码,使其具有增量性和可中断性,即一次一点,并从中断的任何地方继续进行。这将涉及许多小额交易。

  • 考虑将数据加载到目标数据库中的临时表或临时表中,然后在使用存储过程或SQL批处理从该源更新时使用事务。将它放入一个事务中应该不会有太多麻烦,因为在同一台服务器上,它应该更快,更快。

  • 还可以考虑SSIS作为选项。实际上,我对SSIS一无所知,但它应该擅长这种东西。