2012-06-05 127 views
6

我正在使用SSIS与VS2010(外壳)和数据库从SQL Server 2005(32位)到SQL Server 2012(64位)。我直接在目标服务器上开发(不是最优的,但它工作)。SSIS传输数据库任务隐蔽错误消息0x80131500

当我尝试使用传输数据库任务,它给了我一个错误信息如下: “错误:在传输数据时返回错误代码0x80131500(出错任务的执行方法,请参阅内部异常。详细信息)。Execute方法必须成功,并使用“out”参数指示结果。“ Error message

这是问题......我如何查看“内部异常”?它是一个无法通过代码的GUI界面!我甚至试过setting up logging - 它只记录相同的无用的错误信息。

Microsoft在其参考文档中没有关于此错误代码的信息(我可以找到)。

在googleing错误代码之后,我看到其他人有这个错误代码以及与用户,角色和创建它们有关的消息。

  • 我双重检查,我有两个服务器上的系统管理员权限,并在两个
    登录。
  • 我试图从每个 服务器到它自己(更改数据库名称)和相同的传输数据库任务,工作 自己罚款。
  • 我尝试了DatabaseOnline和DatabaseOffline选项。 (同样的错误,两种方式)
  • 我在做传输数据库任务之前,尝试做一个“传输登录”任务,该任务工作,但不是传输数据库任务。然后它开始抛出错误,指出数据库不存在 - 这意味着我需要在传输数据库之后传输登录信息。

这里是我的设置:enter image description here

我在做什么错? 如何获取“内部异常”信息?

而且,按照我的职位,以微软的论坛,在这里: http://social.technet.microsoft.com/Forums/en-US/sqlintegrationservices/thread/cda53c80-8da6-4ed1-898a-9f3ff8464ae2

+0

转移登录后,你可以删除这些并给它一个镜头吗?这会有什么帮助吗? – rvphx

+0

删除什么?我刚刚转移的登录信息? – Watki02

+0

您记录的所有事件是什么?只是OnError和OnTaskFailed?抓住OnInformation和OnWarning,因为他们可能会指出还有什么问题。另一个选项可能是[DTLoggedExec](http://dtloggedexec.codeplex.com/)从来没有玩过这个任务,所以我不能说你遇到的错误的详细信息 – billinkc

回答

6

这个答案让我生病,我的胃...我希望我拯救别人这个麻烦。问题是这样的:

  1. 首先和最重要的是:错误信息是不够描述。该错误应该交给界面。
  2. 在“传输数据库”任务的“编辑”下,目标文件路径将与源数据库的文件路径“自动填充”。他们第一眼看起来很正确(第二,第三......)粗略的一瞥。在进一步检查文件路径错误。这是合理的,如果你正在从版本到版本 - 文件夹根据版本(MSSQL.1MSSQL11.<instanceName>)细微的差异命名。

总之,错误是由于路径设置错误导致文件夹不存在。我想象这样的其他低级异常也会被带有相同隐蔽错误信息的接口所使用。

+0

你能相信我遇到了完全相同的场景和我有完全相同的错误?但我的文件路径是正确的...任何建议? – Diego

+0

正如我答案的最后一行所表明的那样,它可能是一个低级别异常,例如不良路径名称。检查数据库权限,文件系统权限,双重检查路径......任何可能通常会抛出一个简单的描述性错误消息框并且有帮助的东西。还可以通过SQL Server Management Studio尝试任何您的任务(例如SSMS中的“传输数据库”==“复制数据库”),这可能会泄露您的错误代码(因此SSIS/SSDT悲惨地进入)。 – Watki02

0

"which implies that I need to transfer logins AFTER I transfer databases."

不是真的,登录上一台服务器(实例)水平,所以您可以传输登录,然后数据库。您将需要担心用户以后,当然

在这里的一点,我不认为SSIS将准备转移2005年 - > 2012年。我的意思是,“跳过”一个版本是没​​有意义的。你说你正在使用VS 2012,所以它会是SSIS 2012.它认为它只能读取2008年的数据库。你在同一台服务器上测试过的事实也证明了这一点。

+0

我正在使用(visual studio)2010,而不是2012.它还独立于** BOTH **服务器(SQL 2005 _AND_ SQL 2012),但不能从一个到另一个。我会更新我的帖子,使其更清晰 - 谢谢!这就是说,这仍然可能是答案......是否必须是SQL 2008的完整版本?或者我可以使用Express版本? – Watki02

+0

是的,这是一个错字,我打算写VS2010,SSIS 2012。 关于该版本,你应该没问题与快递 – Diego

+0

我刚刚尝试过SQL 2008 Express,它失败了。请参阅我的更深入的解释:http://social.technet.microsoft.com/Forums/en-US/sqlintegrationservices/thread/cda53c80-8da6-4ed1-898a-9f3ff8464ae2 – Watki02

1

我们遇到过这种情况,有人告诉我们MySQL数据库中的列中总会有一个有效的日期,我们后来发现有像'0000-00-00 00:00:00''0001-01-01 00:00:00'这样的日期。

我们处理它,使用一个case语句的坏日期转换为日期SSIS可以用在提取数据查询:

CASE WHEN Product.PurchaseDate < '1900-01-01 00:00:00' THEN '1900-01-01 00:00:00' ELSE Product.PurchaseDate END AS PurchaseDate 

当然,你可以将其设置为null也,你选择。

+0

这解决了我的问题。谢谢! – Jondlm

1

我也有这个相同的问题,它原来是一个访问问题。尝试提供这些访问文件夹的mdf和ldf文件将登陆:NT Service \ MSSQLSERVER,所有者创建者,系统

0

这是旧的,但我碰到了与SSMS 17.2相同的神秘消息。我试过并检查了上面的所有建议都无济于事。 在我的情况下,问题与Visual Studio 2017中SSIS项目的TargetServerVersion属性有关。默认情况下,它被设置为SQL Server 2017,而本地服务器是SQL Server 2014 - 一旦更改为相同版本,一切都很顺利。

相关问题