2

通过 SQL Server 2008 R2 的导入向导,我创建了一个 dtsx 包,用于将数据从 Oracle 数据库提取到 SQL 服务器。在向导步骤中,我编辑了 SQL 脚本命令,以便在迁移期间创建新表。

在向导步骤中,我在包保护级别区域中选择了“不保存敏感数据”。
生成的命令行是:

dtexec.exe /FILE import_data.dtsx 
CONNECTION DestinationConnectionOLEDB; Data Source=source;Initial Catalog=TEST;
           Provider=SQLNCLI10; Integrated Security=SSPI;Auto Translate=false; 
CONNECTION SourceConnectionAdoNET;Data Source=Oracle;PASSWORD=XYZ;User ID=Ned;  
CHECKPOINTING OFF  
REPORTING EWCDI 

但是我总是遇到以下异常:

Error: 2013-03-08 09:54:55.65
Code: 0xC0047062
Source: Data Flow Task 1 Source - test_Table [1]

Description: Microsoft.SqlServer.Dts.Runtime.DtsCouldNotCreateManagedConnecti
onException: Could not create a managed connection manager.

at Microsoft.SqlServer.Dts.Runtime.ManagedHelper.GetManagedConnection(String
assemblyQualifiedName, String connStr, Object transaction)
at Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSConnectionManager100.AcquireCo
nnection(Object pTransaction)
at Microsoft.SqlServer.Dts.Pipeline.DataReaderSourceAdapter.AcquireConnections(Object    
transaction)
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostAcquireConnectio
ns(IDTSManagedComponentWrapper100 wrapper, Object transaction)
End Error

如果我让包从导入向导运行,通过选择“立即运行”复选框,它工作正常。这让我觉得可能连接字符串中缺少某些内容,从而阻止正确连接到数据库。

对于 SQL Server(目标 DB),我们使用 Windows 身份验证登录数据库,并使用 Oracle(源 DB)的用户名/密码。

我也尝试使用 32 位版本的 dtexec.exe,但没有成功。

4

1 回答 1

1

奇怪的是它没有说明为什么它无法创建连接。我怀疑驱动程序,因为如果这是登录问题,它会这么说。

您是否明确运行了 32 位 dtexec?这非常棘手,我问的原因是因为在安装了 32 位运行时的 64 位环境中手动执行包(双击)时,默认情况下会调用 32 位版本(即使您在64 位)。这是因为 PATH 环境变量中的路径:32 位程序文件的目录 (%ProgramFiles(x86)%) 列在 64 位程序文件的目录路径 (%ProgramFiles%) 之前。

请记住,所有工具(BIDS 和 SSDT)都是 32 位应用程序;尽管它们可以在 64 位环境中使用,但它们使用的所有数据提供程序都是 32 位的。要使 SSIS 包能够在 64 位环境中使用,您必须拥有相应版本的数据提供程序;如果你不这样做;它们必须使用 32 位运行时执行。

于 2013-03-08T14:20:22.160 回答