使用SQL Server 2008 R2中的导入向导,我创建了一个dtsx包,用于将数据从Oracle数据库提取到SQL Server。在向导步骤中,我编辑了SQL Script命令,以便在迁移期间创建新表。
在向导步骤中,我在程序包保护级别区域中选择了“不保存敏感数据”。
生成的命令行为:
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(目标数据库),我们使用Windows身份验证登录数据库和Oracle的用户名/密码(源数据库)。
我也尝试使用32位版本的dtexec.exe,但没有成功。
答案 0 :(得分:1)
奇怪的是它没有说明为什么它无法创建连接。我怀疑司机,因为如果是登录问题,就会说。
你明确地运行了32位dtexec吗?这是非常棘手的,我问的原因是因为在安装了32位运行时的64位环境中手动执行(双击)包时,默认情况下将调用32位版本(即使你在64位)。这是因为PATH环境变量中的路径:32位程序文件的目录(%ProgramFiles(x86)%)列在64位程序文件的目录路径之前(%ProgramFiles%)。
请记住,所有工具(BIDS和SSDT)都是32位应用程序;虽然它们可以在64位环境中使用,但它们使用的所有数据提供程序都是32位。要使SSIS包能够在64位环境中使用,您必须拥有相应版本的数据提供程序;如果你不这样做;它们必须使用32位运行时执行。