2013-03-08 83 views
2

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

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

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,但没有成功。

回答

1

奇怪的是,它并没有说为什么它无法创建连接。我怀疑司机,因为如果它是一个登录问题,它会这么说。

您是否明确运行32位dtexec?这非常棘手,我问的原因是因为在安装了32位运行时的64位环境中手动执行软件包(双击)时,默认情况下会调用32位版本(即使您处于64位)。这是由于PATH环境变量中的路径:32位程序文件(%ProgramFiles(x86)%)的目录在64位程序文件(%ProgramFiles%)的目录路径之前列出。请记住,所有工具(BIDS和SSDT)都是32位应用程序;尽管它们可以在64位环境中使用,但它们使用的所有数据提供程序都是32位。要使SSIS包能够在64位环境中使用,您必须拥有适当的数据提供者版本;如果你不这样做;他们将不得不使用32位运行时间来执行。

+0

嗨迭戈,是在命令行我明确地使用32位版本的dtexec命令(在由dtexec.exe命令生成的第一行我可以读取“32位版本”)的完整路径。我认为这个问题与凭据有关,因为直接从SQL Server向导执行导入,它工作正常。我们仍然可以手动运行导入,但如果可能的话,我会更喜欢更“现代”/自动化的方法。 – Francesco 2013-03-11 08:32:52