代码之家  ›  专栏  ›  技术社区  ›  Cascador84

Talend tmssqlrow似乎未执行事务

  •  0
  • Cascador84  · 技术社区  · 7 年前

    我在泰伦德的工作遇到了问题。 我使用tmssqlrow删除一些表(+/-25000000行)中的大量数据。由于我有一些条件,我不能使用截断。

    数据库设置为“恢复模式简单”选项。尽管如此,事务日志文件的增加仍然占用了磁盘的所有可用空间。

    以下是代码使用:

    DECLARE @RowCount int = 1, @nbocc int = 0 
    WHILE @Rowcount > 0 
    BEGIN 
       BEGIN TRANSACTION 
    
       delete TOP (100000) from large_table
    
       SET @Rowcount = @@ROWCOUNT;
       COMMIT TRANSACTION
       CHECKPOINT
    
       SET @nbocc = @nbocc + 1 
       IF @nbocc = 15 
       BEGIN    
          DBCC SHRINKFILE (N'logfile' , 0)
          WITH NO_INFOMSGS 
    
          SET @nbocc = 0 
       END
    END
    
    SET ROWCOUNT 0
    

    如果在management Studio中运行此脚本,它工作正常,因此ldf文件每出现15次就会收缩一次。但与Talend一起使用时,ldf文件不断增长。

    我怎样才能解决这个问题? 我尝试放置tOpenconnection,然后是tmssqlrow,然后是tmssqlcommit和tcloseconnection,但面临相同的问题。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ibrahim Mezouar    7 年前

    据我所见, tMSSqlRow 在sql脚本中并不总是按照预期的方式运行。您应该将脚本封装在存储过程中,然后从 tMSSqlRow ( EXEC myStoredProcedure.. ),或 tMSSqlSP 组成部分