1

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

这是我的脚本:

                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表有大约 1100 万行,位于:

  • 第一步,我必须插入表中的某些列C。(1100万行)
  • 第二步,我必须将数据从 C 表插入到 B 表。(1100 万行)
  • 第三步,我应该更新 C 表(1100 万行)

总共 1100 万行,但我收到此错误:

错误是由于“ACTIVE_TRANSACTION”,数据库“test”的事务日志已满。

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

4

2 回答 2

1

您的事务日志文件已满,并且没有剩余的磁盘空间供其增长(如果指定了自动增长选项)。

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

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

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

您确定要检查的几件事:

  • 您的数据库是处于恢复模式FULL还是SIMPLE恢复模式
  • 如果它使用FULL恢复模式,请检查是否定期备份事务日志文件(如果不这样做,它将尽可能多地增长并占用您的空间)

如果您的数据库不需要处于FULL恢复模式下,您可以将其置于SIMPLE.

于 2015-05-21T13:52:11.677 回答
0

如果您在同一个查询窗口中运行这些,SSMS 将在一个隐式事务中运行它们。尝试将这些中的每一个放在单独的显式事务中。另外,清除你的T-Log

于 2015-05-21T13:45:52.617 回答