【问题标题】:Unexpected EOF encountered in BCP data-file bcp version 2014.120.6169.19在 BCP 数据文件 bcp 版本 2014.120.6169.19 中遇到意外的 EOF
【发布时间】:2022-11-11 06:07:05
【问题描述】:

我在生产服务器上得到[Microsoft][ODBC Driver 11 for SQL Server]Unexpected EOF encountered in BCP data-file,但在我的测试服务器上没有。

两台服务器的设置完全相同,我正在使用两台服务器上相同文件夹路径中的相同文件进行测试。测试服务器上的数据库是从生产服务器获取的还原备份。

bcp.exe version 2014.120.6169.19 
SQL server version 12.0.6169.19 
Windows Server 2012 R2

这不是文件编码或 BCP 命令的参数的问题, 我检查过:

  • Windows 注册表以及所有 ODBC 和 SQL Server 值对于两台服务器都是相同的
  • C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110 中文件的版本,它们都是一样的。
  • 我比较了 bcp.exe 的 MD5 校验和,在两台服务器上它是相同的5f f0 d6 cf 46 b8 71 47 bc a0 fb ca 96 97 c8 e8
  • 停止启动 SQL 并重新启动服务器没有帮助
  • 缓存中的最后一个 SQL 更新是“KB5014165”,于 2022 年 6 月 21 日,并应用于两台服务器

这已经工作了多年,并在上个月停止工作。


更新 2022-10-17

  • 我们安装了最新的服务包,SQL 版本现在是12.0.6439.10,但没有区别
  • 文件昨天在 06:00 失败,然后在今天早上 04:00 导入正常,但在 06:00 再次失败,当我在 10:30 测试时再次失败

问题:还有什么我可以检查的吗?也许是生产服务器上可能不同的环境变量?

【问题讨论】:

  • 一种假设是,如果您使用 bcp.exe 摄取数据文件,则其中涉及格式文件。两个地方的格式文件是否相同?
  • 是的,我在两台服务器上使用相同的文件,我将它从我的 PC 复制到它们。

标签: sql-server bcp


【解决方案1】:

这是由准备 BCP 文件的代码引起的:它选择字段 -t 和行 -r 分隔符作为数据本身不存在的最低字符值。

它导致 BCP 因以下两个问题而失败:

A) 格式错误的文件:字段和行分隔符都使用了相同的字符,虽然这本身已经是一个问题,但在 BCP 中表现为字段分隔符的数量不均匀,这意味着在读取字段时到达了文件末尾。

解决方案:确保字段-t 和行-r 分隔符不同

B) 不支持的分隔符字符:选择用作分隔符之一的不兼容字符,特别是在本例中为char(127)。同样,通过进一步的测试,我发现我也必须避免使用chars <=21,在127160char(173) 的范围内

解决方案:确保避免使用上述范围内的分隔符

两者都显示了相同的无用错误消息[Microsoft][ODBC Driver 11 for SQL Server]Unexpected EOF encountered in BCP data-file

这在测试服务器上也没有发生的原因:为了优化,每个服务器都会记住并重复使用在先前导入期间检测到的分隔符,在某些时候,生产服务器已经通过测试的较旧数据导入训练了有问题的分隔符服务器没见过。所以测试服务器仍然缓存了有效的分隔符,但生产服务器有坏的分隔符。

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 2019-02-17
    • 2014-12-07
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 2017-08-20
    相关资源
    最近更新 更多