我目前正在使用Visual Studio 2015(在BIDS 2008中制作)更新所有ETL,并将它们重新部署到在SQL Server 2016上运行的新报表服务器(最初为2008R2)。
在更新其中一个ETL并尝试在新服务器上运行时,我收到此错误:
包执行失败。步骤失败了。
有时它也会产生此错误:
来源:加载事实表SSIS.Pipeline描述:“复制到事实 表“验证失败并返回验证状态 “VS_NEEDSNEWMETADATA”。
我尝试删除并重新添加OLEDB Destination,连接字符串并打开列映射以刷新元数据。我还重新创建了整个数据流任务,但我仍然遇到同样的错误。
该软件包在我的本地计算机上运行良好。
更新
我开始拆开包装并仅运行它们以尝试缩小哪个部分失败。它似乎没有加载到临时表中,但我找不到原因。
我最终决定尝试重新创造整个事物。重新创建整个包后,仍然没有运气。下图来自服务器本身的事件查看器,但它没有给我任何新信息。
答案 0 :(得分:10)
我终于找到了问题,而且我是如何做到的。
因为我从SSMS获得的错误信息并不是非常有见地,所以我首先打开了我的远程桌面并登录到服务器。然后我转到管理工具>事件查看器,然后是Windows日志>应用程序,看看失败的事件是否会提供更多细节。
我采取的下一步是运行包from the command line,因为消息应该更详细。打开cmd,将目录更改为我的包中的目录,然后......
DTEXEC /FILE YourPackageName.dtsx
最后,此处的错误消息显示程序包尝试写入的表中缺少列。我添加了那些列,瞧!
答案 1 :(得分:5)
我已经尝试了上面和其他站点提供的所有解决方案。什么都没用。
我从我的朋友那里得到了一个建议。
以下是步骤:
试试运气。这是一个可悲的问题,让我无知了两天。
答案 2 :(得分:2)
如评论中所述,
如果它在您的开发环境中运行正常,那么问题不在于包,而在于服务器上的预定作业。尝试重新创建。
如果不起作用,
看起来服务器有一个它正在使用的包的缓存实例而不是更新的包。尝试重命名您的包并使用新包名创建一个新作业,看看是否有效。
如果不起作用, 那时我所能推荐的就是将包裹向下切割直至成功,然后添加下一步失败。
从您的解决方案中听起来,开发环境比部署的解决方案更能容忍架构更新。很高兴你能够解决,消除杂乱的帮助。
答案 3 :(得分:1)
这最终成为我的权限问题。 OLE DB 源正在使用从 SQL 视图中选择的存储过程。此视图已加入另一个数据库中的表,但不幸的是,SQL 代理作业步骤在其下运行包的代理帐户没有对该数据库中表的 SELECT 权限。这就是为什么包在 Visual Studio 中运行良好,但在部署到服务器时不能从作业中运行。我通过从存储过程中取出 SELECT 语句并将其直接放在 OLE DB 源控件的源查询框中找到了错误的根本原因,这导致它最终返回“SELECT 权限被拒绝”错误消息。此错误显然对 SSIS 隐藏,因为代理帐户 DID 对存储过程具有执行权限。
答案 4 :(得分:0)
您是否尝试删除并重新创建源代码?当我得到这个时,我通常可以修改任何有错误的对象,但必须删除并重建它们之间的路径,但有时我必须删除数据流中的所有内容并重新创建它。
答案 5 :(得分:0)
应在SQL Server代理下创建SSIS包执行的代理。然后,您应该将作业步骤(或步骤)更改为“运行”作为您已创建的代理。
前段时间我遇到了同样的问题,代理修复了它。
如果你已经尝试过,请原谅我。
答案 6 :(得分:0)
我遇到了同样的问题,我的问题是两个环境之间存在差异,同一个表中的同一个字段曾用大写字母写过,有一次没用。所以这个名字是相同的,但是这个差别很小(例如isActive vs IsActive)。
这来自重构工作,我们使用VS数据库发布没有更新字段名称。
答案 7 :(得分:0)
将源文件中的两列插入表的同一字段中时,通常会收到该消息。
即
我的文本文件有两次“ neighborhood”(不同列使用相同的标签),我的表具有“ neighborhood”和“ neighborhoodb”(请注意末尾的“ b”)。导入将尝试将两个文本列都导入字段“ neighborhood”,而忽略“ neighborhoodb”字段,它将失败,并显示“ VS_NEEDSNEWMETADATA”错误。
答案 8 :(得分:0)
重新创建工作对我有用。作业的某些缓存版本可能导致class ShopViewSet(ModelViewSet):
queryset = Shop.objects.all()
serializer_class = ShopSerializer
lookup_field = 'slug'
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.initial_data['user'] = request.user.id
serializer.initial_data['slug'] = slugify(request.data['name'])
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
错误。程序包已正确执行,但是在由代理作业执行时失败。