0

可能重复:
在 MS SQL 2008R2 环境中执行简单 ssis 包时生成异常 0x80040154

我正在尝试在 MS SQL 2008 R2 上执行一个简单的 SSIS 包。我正在读取一个平面源文件,根据 ID 对数据进行排序并将结果写入一个新的平面源文件目标。但是当我执行时,我得到以下异常:

TITLE: Microsoft Visual Studio

Failed to start project

ADDITIONAL INFORMATION:

Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) (Microsoft.DataTransformationServices.VsIntegration)

我该如何从这里开始?

很多论坛要求重新安装 MS SQL 环境,但我不确定这是否是摆脱异常的唯一方法。

有没有更好或替代的方法来摆脱这个异常?

谢谢。

4

1 回答 1

1

尝试这个:

出现此错误消息的最常见原因是在 64 位计算机上运行 32 位 dtExec。这篇文章将正确解释它 - 32 位和 64 位的快速参考 SSIS

编辑:文章的缓存 Google 链接: http ://webcache.googleusercontent.com/search?q=cache:FQN0QKQCleEJ:toddmcdermid.blogspot.com/2009/10/quick-reference-ssis-in-32-and-64 -bits.html+&cd=1&hl=en&ct=clnk&gl=au#!http://toddmcdermid.blogspot.com/2009/10/quick-reference-ssis-in-32-and-64-bits.html

关于 SQL Server 集成服务和 64 位,存在不少误解。我不得不在论坛中让不少人走上正确的道路——主要是在被误解的 SSIS 包中的一个特定设置上。当然,此信息仅适用于 64 位体系结构 - 如果您运行的是 Windows 32 位操作系统,则别无选择 - 您的包将始终以 32 位模式运行。
如果您有 64 位系统,为什么要在 32 位模式下运行?主要是司机。我指的不是硬件驱动程序,而是数据提供者。例如,Excel 和某些版本的 Oracle 没有 64 位提供程序。因此,对于不断增加的 64 位用户群,这里是在您选择的 64 位或 32 位模式下执行集成服务包的简要说明。背景 我可以设计的很好,为什么它不能运行?开始的一点背景。商业智能设计工作室 (BIDS) 是一个 32 位应用程序。当您设计您的软件包时,您使用的是 32 位设备 - 在这件事上别无选择。当您使用 DTExec 执行包时,您可以选择 32 位或 64 位操作 - 但 64 位安装的默认设置是使用 64 位模式(显然)。然而,SSIS 中的一些常用对象没有 64 位对应对象,因此会导致您的包失败。不幸的是,通常在这些消息中的任何地方都没有说明故障在于 32 位和 64 位。它通常类似于: 0x80040154 ... 未注册类对连接管理器 XXX 的 AcquireConnection 方法调用失败,错误代码为 0xC0202009 0xC00F9304 ... SSIS 错误代码 DTS_E_OLEDB_EXCEL_NOT_SUPPORTED OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”尚未已注册(我在此处包含这些示例错误,希望那些在网上搜索的人可以找到这篇文章!) 为什么我想要 32 位模式?在执行的 SSIS 包中需要 32 位模式的最常见原因是 Excel 提供程序。它目前不适用于 64 位,并且会导致你的包崩溃。(据报道,Office 14 (2010) 支持 64 位 - 尽管它不支持与 32 位并行。)这也适用于其他 Office 提供程序 - 特别是访问 - 以及其他几个方驱动程序和提供程序(如 Oracle)。它们根本无法在 64 位环境中工作(2010 年之前)。您可能还希望运行 Execute DTS 2000 Package Tasks - 这些也只能在 32 位模式下运行。这取决于您执行包的方式 执行 SSIS 包的方法有很多——这是决定您是在 64 位还是 32 位模式下运行它的主要决定因素。所以从下面的列表中选择你的执行环境,并阅读如何强制你想要的位数。在 Business Intelligence Development Studio (BIDS) 中选择 Bitness 如果您在 BIDS 中运行包,则设置很简单,除非您使用执行包任务或执行流程任务来运行子包。您当前打开的包将(默认情况下)以 64 位模式运行。控制它的设置是名为 Run64BitRuntime 的项目上的一个属性。要访问此属性,请在解决方案资源管理器中右键单击 Integration Services 项目并选择属性。然后在编辑器中选择 Debugging 节点。这里默认为“true”,表示该项目中的所有包都将运行在 64 位模式下。如果将此更改为“false”,则所有包都将以 32 位模式运行。特别说明:Execute Package Task 无论子包所属项目的 Run64BitRuntime 设置如何,无论 ExecuteOutOfProcess 的设置如何,通过 Execute Package Task 执行的任何子包都将以与父包相同的模式运行。这意味着即使您的子包在您设计它的项目中将 Run64BitRuntime 设置为 false,如果您的父包的 Run64BitRuntime 属性为 true,它将在 BIDS 中以 64 位模式执行。特别注意:执行进程任务 执行进程任务可以让您选择独立于父包中的设置的 32 位模式,代价是在另一个进程中运行子包。与后面介绍的 SQL 代理方法一样,您可以专门识别 32 位 DTExec 以在 32 位模式下运行 SSIS 子包(见下文)。使用 SQL 代理选择位数 在 Integration Services 2008 中,指示 SQL 代理您希望程序包在什么环境中运行很简单。SSIS 2005 让您跳过更多的障碍。Integration Services 2008 在代理作业步骤属性中,您将使用 SQL Server Integration Services 包类型的步骤。如果您转到“执行选项”选项卡,您会在底部看到“使用 32 位运行时”选项。Integration Services 2005 使用 SQL 2005,您不能使用 Integration Services 包类型的作业步骤在 32 位模式下运行 SSIS 包。您的办法是使用作业步骤的操作系统类型,并在您使用的命令行中专门引用 32 位版本的 DTExec,并手动指定 DTExec 的参数。障碍 #1 - 查找 32 位 DTExec 查找可执行文件应该不难。在标准 64 位安装中,32 位 DTExec.EXE 应位于“\Program Files (x86)\Microsoft SQL Server\90\DTS\Binn”文件夹中。它被简单地称为“DTExec.EXE”,并且不会以任何方式将自己标识为 32 位应用程序 - 您必须“知道”它位于 32 位文件夹中。(或者您可以尝试执行它并观看任务管理器。)如果您已将 SQL 安装到非标准位置,则可能需要进行一些搜索。如果你根本找不到它,你可能没有在你的 64 位机器上安装 32 位组件。在安装 SQL Server 的过程中,如果您只选择了“集成服务”而没有安装“ 已经在 GUI 的十个左右的其他选项卡上进行了选择。利用它!使用 GUI 设置您的包执行,然后从最后一页复制参数。预编译脚本 这只是 Integration Services 2005 中的一个问题 - 开发团队在 SSIS 2008 中完全修复了这个问题。脚本任务上有一个“预编译”选项,默认设置为“真”。如果以某种方式将其设置为“false”,则您的包可能无法在 64 位环境中执行。32 位 ODBC 驱动程序 在 Windows 中使用 32 位 ODBC 驱动程序还有另一个奇怪之处——至少在 Server 2003、2008、Vista 和 Windows 7 64 位操作系统中。使用这些驱动程序的第一步是设置一个 DSN 来处理存储服务器名称和其他详细信息。根据我的经验,自然的第一个开始是打开“ 位于您的 SYSWOW64 文件夹中的 exe。那个 ODBC 数据源管理员确实在 32 位进程中管理 32 位驱动程序。参考资料/资源 此信息的大部分(如果不是全部)也在 MSDN 文章中提炼出来:集成服务的 64 位注意事项。如果您在上面发现其他有用的文章、指针或错误,请发表评论。其他一些非常有用的文章:How To: Run a Package, MSDN 64-bit references within an SSIS Script Component by Michael Entin, Microsoft SSIS Dev。SQL Server 集成服务的 64 位注意事项,Microsoft SSIS 开发人员 Douglas Laudenschlager。我的 SSIS 的 app.config 在哪里?作者:Darren Green,SQL Server MVP。

于 2012-09-07T17:59:43.073 回答