【问题标题】:Is it a good idea to wrap a data migration into a single transaction scope?将数据迁移包装到单个事务范围中是个好主意吗?
【发布时间】:2011-03-16 22:47:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果原始数据库相对较小(

    如果有任何问题,只需从备份中恢复。

    (我假设您可以为此使数据库脱机 - 在活动时进行迁移是另一回事......)

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

    【讨论】:

    • 同意,但备份/恢复选项只有在您可以安排停机时间时才有效,而生产系统很难安排停机时间。此外,1G 的数据模块在 t-log 文件中会占用比 1G 多得多的空间。
    【解决方案2】:

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

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

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

    其他建议:

    • 考虑编写代码,使其具有增量性和可中断性,即一次执行一点,并且从中断处继续执行。这将涉及大量小额交易。

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

    • 还可以考虑选择 SSIS。其实我对SSIS一无所知,但它应该擅长这种东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2015-03-11
      • 2011-05-14
      相关资源
      最近更新 更多