FluentMigrator Execute(string template, params object[] args) 中的大数据出错;

Error on large data in FluentMigrator Execute(string template, params object[] args);

我有一个 sql 脚本可以使用 FluentMigrator 执行方法将数据从旧 table 迁移到新脚本。

这是我的脚本:

                INSERT INTO [Demo].[C]([key], [value], [tempID]) SELECT [name], [value], [userID] FROM [Demo].[A]
                INSERT INTO [Demo].[B]([parentID], [propertyID]) SELECT [tempID], [id] FROM [Demo].[C] WHERE [tempID] IS NOT NULL
                UPDATE [Demo].[C] SET [tempID] = NULL

userProperty table 有大约 1100 万行,并且在:

总共 1100 万行,但出现此错误:

The error was The transaction log for database 'test' is full due to 'ACTIVE_TRANSACTION'.

我想找到最快的方法,因为这是 one time running 脚本。

如果您在同一个查询 运行 中使用这些 window,则 SSMS 运行 将其全部包含在一个隐式事务中。尝试将这些中的每一个都放在一个单独的显式事务中。另外,清除你的 T-Log

您的事务日志文件已满,没有剩余磁盘 space 可用于增长(如果指定了自动增长选项)。

执行以下查询以获取有关您的事务日志文件设置的更多详细信息:

SELECT [type_desc]
      ,[name]
      ,[physical_name]
      ,[size]
      ,[max_size]
      ,[growth]
FROM [sys].[database_files];

您的问题可能有不同的解决方案。例如,获取更多space并启用自动增长选项,单独执行步骤等

您确定的几件事:

  • 您的数据库是否处于 FULLSIMPLE 恢复模式下
  • 如果它正在使用 FULL 恢复模式,请检查是否对事务日志文件进行了定期备份(如果不进行备份,它会尽可能多地增长并吃掉你的 space)

如果你的数据库不需要在FULL恢复模式下,你可以把它放到SIMPLE.