压缩归档任务在 SSIS 中失败,文件为 1.25GB

Posted

技术标签:

【中文标题】压缩归档任务在 SSIS 中失败,文件为 1.25GB【英文标题】:compress-archive task failing in SSIS with 1.25GB file 【发布时间】:2021-08-05 09:28:36 【问题描述】:

我正在使用“执行进程任务”来调用 powershell compress-archive 命令。

对于小文件,它工作正常。

对于 1.25GB 的文件,它失败了。它开始处理然后“完成”但没有创建文件。

鉴于 compress-archive 应该可以处理最大 2GB 的文件,为什么会发生这种情况以及我还有哪些其他选择?

由于无法控制服务器安装,因此不能选择 7zip。

【问题讨论】:

【参考方案1】:

Compress-Archive 是System.IO.Compression.ZipArchive .Net 库的简化包装器。不支持某些功能,例如存储相对路径。异常处理和报告很弱。对于任何需要强大异常处理的压缩任务,我通常选择直接使用 .Net 库。

使用脚本(对于无人值守的工作来说总是一个好主意)和错误处理,代码并不复杂。这可能无法解决您的问题,但可能会为您提供更多信息:

$ZipPath = 'C:\Temp\test.zip'
$LogPath = "c:\Temp\Archiving-$(get-date -f yyyy-MM-dd).log"
$FilesToZip = (Get-ChildItem 'C:\Temp\*.csv' -File) #trying to compress the zip or log file will result in error: 'process cannot access the file ... in use'
@( 'System.IO.Compression','System.IO.Compression.FileSystem') | %  [void][Reflection.Assembly]::LoadWithPartialName($_) 
Try
    Start-Transcript $LogPath -Append
    $WriteArchive = [IO.Compression.ZipFile]::Open( $ZipPath, 'Update')#Update mode also creates a zip
    ForEach($file in $FilesToZip)
        $ArchivedFile = [IO.Compression.ZipFileExtensions]::CreateEntryFromFile($WriteArchive, 
            $File.FullName, $file.Name, 'Optimal')
        Write-Host "Archived: $($File.FullName) bytes: $($file.Length)"
    
Catch [Exception]
    Write-Error $_.Exception
Finally
    $WriteArchive.Dispose() #close the zip file so it can be read later     
    Stop-Transcript 

使用 Compress-Archive 的大致等效代码:

Compress-Archive -Path 'C:\Temp\*.csv' -DestinationPath 'C:\Temp\test.zip' -Update

但是,Compress-Archive 在后续运行时会覆盖 .Zip 存档中的条目。 CreateEntryFromFile 在存档中创建重复条目。

【讨论】:

我尝试在 c# 脚本任务中执行此操作,但由于“内存不足”而失败。如果在同一台机器上我只是尝试手动压缩它或使用 powershell 手动压缩,它工作正常。

以上是关于压缩归档任务在 SSIS 中失败,文件为 1.25GB的主要内容,如果未能解决你的问题,请参考以下文章

SSIS 错误:尝试向数据流任务缓冲区添加行失败,错误代码为 0xC0047020

从 SQL 代理运行时 SSIS 脚本任务失败

如果存储过程失败,则在执行 SQL 任务中将输出变量值获取到 ssis 变量中

使用 ssis 解压缩文件夹中的多个文件

3dmax在归档时出现归档失败是啥原因造成的?

SSIS 数据流脚本任务错误处理