【问题标题】:SSIS Error: VS_NEEDSNEWMETADATASSIS 错误:VS_NEEDSNEWMETADATA
【发布时间】:2017-05-14 05:58:09
【问题描述】:

我目前正在使用 Visual Studio 2015(在 BIDS 2008 中制作)更新我们所有的 ETL,并将它们重新部署到在 SQL Server 2016(最初是 2008R2)上运行的新报告服务器上。

在更新其中一个 ETL 并尝试在新服务器上运行时出现此错误:


包执行失败。步骤失败。

有时它也会产生这个错误:

来源:加载事实表 SSIS.Pipeline 描述:“复制到事实 表”验证失败,返回验证状态 “VS_NEEDSNEWMETADATA”。


我尝试删除并重新添加 OLEDB 目标、连接字符串并打开列映射以刷新元数据。我还重新创建了整个数据流任务,但仍然遇到同样的错误。

包在我的本地机器上运行良好。

更新:

我开始拆开包装,只运行其中的一部分,以尝试缩小失败的部分。加载到临时表时似乎失败,但我找不到原因。

我最终决定尝试重新创建整个事物。重新创建整个包后,仍然没有运气。下面的图片来自服务器本身的事件查看器,但它没有给我任何新信息。

Package error from event viewer

【问题讨论】:

  • 这个包是如何被执行的?即,通过 SSMS 手动、通过计划作业、以编程方式等
  • 我正在通过 SQL Server 代理作业执行它。 SQL 服务也拥有该文件夹的权限。
  • 包执行细节有什么要说的? (报告 -> 标准报告 -> 所有执行,深入了解失败的执行)。
  • 由于某种原因,当我点击报告时,它只显示“自定义报告”,我点击了它,但没有。
  • 当时我所能推荐的就是削减包直到它成功,然后添加失败的下一步。

标签: sql sql-server tsql ssis sql-server-2016


【解决方案1】:

我已经尝试了上面提供的所有解决方案以及其他网站。没有任何效果。

我从朋友那里得到了一个对我有用的建议。

步骤如下:

  1. 右键单击源/目标数据流组件。
  2. 转到高级编辑器 -> 组件属性
  3. 找到 ValidateExternalMetadata 并将其设置为 False

试试你的运气。这是一个可悲的问题,让我 2 天一无所知。

【讨论】:

  • 这个解决方案也对我有用。但为什么有必要这样做呢?
  • 2020,这在 VS-2019 中仍然没有改变。仅供参考。
  • 帮我解决了这个问题(不幸的是仍然是个问题)
  • 我遵循了这个建议,现在错误消息更加冗长。谢谢!
【解决方案2】:

我终于找到了问题所在,我就是这样做的。

因为我从 SSMS 获得的错误消息不是很深刻,所以我首先打开了我的远程桌面并登录到服务器。然后我转到管理工具>事件查看器,然后转到 Windows 日志>应用程序,看看失败的事件是否会提供更多详细信息。

它仍然没有给我太多。

我采取的下一步是运行包from the command line,因为消息应该更详细。打开 cmd,将目录更改为我的包所在的目录,然后...

DTEXEC /FILE YourPackageName.dtsx

最后,这里的错误消息显示包试图写入的表中缺少列。我添加了那些列,瞧!

【讨论】:

    【解决方案3】:

    如 cmets 所述,
    如果它在您的开发环境中运行正常,那么问题不在于包,而在于服务器上的预定作业。尝试重新创建它。

    如果这不起作用,
    似乎服务器有一个它正在使用的包的缓存实例,而不是更新的包。尝试重命名您的包并使用新包名称创建一个新作业,看看是否可行。

    如果这不起作用, 在这一点上我所能推荐的就是减少包直到它成功,然后添加失败的下一步。

    从您的解决方案看来,开发环境比部署的解决方案更能容忍架构更新。很高兴您能够解决,消除杂乱有帮助。

    【讨论】:

      【解决方案4】:

      我有同样的问题,我的问题是两个环境之间的差异,同一张表中的同一个字段曾经用大写写过,而一次没有写过。所以名字是一样的,但有一点点区别(例如 isActive 与 IsActive)。

      这来自重构工作,我们使用了未更新字段名称的 VS 数据库发布。

      【讨论】:

      • 这就是我遇到问题的原因。
      【解决方案5】:

      您是否尝试过删除并重新创建源?当我得到这个时,我通常可以修改任何有错误但必须删除并重建它们之间的路径的对象,但有时我必须删除数据流中的所有内容并重新创建它。

      【讨论】:

      • 我尝试重新创建源代码,但当没有其他工作时,我最终重新创建了整个包,但它仍然失败,并显示“包执行失败。步骤失败了。消息。
      【解决方案6】:

      应在 SQL Server 代理下创建 SSIS 包执行的代理。然后,您应该将您的工作步骤(或多个步骤)更改为以您创建的代理身份运行。

      前段时间我遇到了同样的问题,代理解决了它。

      如果你已经尝试过了,请原谅我。

      【讨论】:

        【解决方案7】:

        当源文件中的 2 列被插入到表的同一字段中时,收到该消息是很常见的。

        我的文本文件有两次“neighborhood”(不同列的标签相同),我的表格有“neighborhood”和“neighborhoodb”(注意末尾的“b”)。导入将尝试将两个文本列导入到“neighborhood”字段并忽略“neighborhoodb”字段,它会失败并出现“VS_NEEDSNEWMETADATA”错误。

        【讨论】:

          【解决方案8】:

          重新创建工作对我有用。该作业的某些缓存版本可能导致了VS_NEEDSNEWMETADATA 错误。包正在正确执行,但在由代理作业执行时却失败了。

          【讨论】:

            【解决方案9】:

            这最终成为我的权限问题。 OLE DB 源正在使用从 SQL 视图中选择的存储过程。此视图连接到另一个数据库中的表,不幸的是,SQL 代理作业步骤在其下运行包的代理帐户对该数据库中的表没有 SELECT 权限。这就是为什么包在 Visual Studio 中运行良好,但在部署到服务器时不能从作业中运行的原因。我通过将 SELECT 语句从存储过程中取出并将其直接放在 OLE DB 源控件的源查询框中找到了错误的根本原因,这导致它最终返回“选择权限被拒绝”错误消息。由于代理帐户 DID 对存储过程具有执行权限,因此该错误显然对 SSIS 隐藏了。

            【讨论】:

              【解决方案10】:

              ValidateExternalMetadata 更改为false 后它对我有用。我正在将数据从 MSSQL 数据库传输到 MySQL 数据库。更改了“ADO NET 目标”。

              【讨论】:

              • 你是对的@Vega 感谢提醒。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多