日期:2014-05-18  浏览次数:20370 次

用SQL2005的SSIS,如何做FTP???
给个示例参考,或者具体步骤,注意项(比如说端口设多少)谢谢!


------解决方案--------------------
http://www.diybl.com/course/7_databases/database_other/20090822/169716.html
------解决方案--------------------
SQL code
在SSIS包中使用FTP控件,从FTP服务器上读取文件,本来是一件很简单的事情,在BIDS中也很容易地调试通过,可是发布到SSIS服务器后,用SQL Agent去定时运行,却怎么也不能成功。错误消息如下:

OnError,XXXX,XXXX\appsuser,Pkg_XXXx,{DE4F22C0-649A-4CF3-BAE4-AD6B645D8D9E},{8DFB2020-24FB-4231-821B-0440E9FD3FE6},12/21/2007 12:30:02 PM,12/21/2007 12:30:02 PM,-1073573489,0x,Unable to connect to FTP server using "FTP Connection Manager".

这是因为Windows Agent Service或SSIS Service运行的用户和开发SSIS包的用户不同,默认,SSIS使用Network Service这个系统用户启动的,而Agent是用Local System这个用户启动的。而默认的SSIS包的package protection level是 EncryptSensitiveWithUserKey。

如果是数据库的Connection,一般使用包配置文件,然后在配置文件中手动填入密码,可解决这个问题,但是对于FTP的connection, 配置文件也不管用,解决这个问题的方法如下:

1)把SSIS包的protection level设置成EncryptSensitiveWithPassword,然后设置包的密码;

2)然后配置包,生成包的配置文件,把包的PackagePassword放在配置文件中(注意,生成配置文件后,配置文件并不包含密码,需要手动打开配置文件,填写密码)

3)发布包;

这样,包就可以在Agent下运行了。

特别注意网上有多种解决方法,比如1)修改windows service的用户 2)修改包的Protection Level为DontSaveSensitivePassword等

但是最后都不管用,只有以上方法可用。

另外想说一下第二步,如果创建Job直接调用加密包,据说直接在创建Job时输入密码就可以了,不用配置文件,(这个本人没有测试过),但是如果出现PackageA调用PackageB的,而PackageB是加密包,Agent调用的是packageA, 那么在创建Job时就不会提示用户数据密码,这时候就必须使用包配置文件,把PackagePassword放在配置文件中。