SSIS ile FTP Operasyonları

6. December 2010

Belli mi olur, bazı durumlarda alacağınız veri iktidarınız dahilinde olmayabilir. Genelde çok uluslu büyük firmalarda yoğun olarak kullanılan FTP teknolojisi ile veri aktarımını bir gün SSIS ile gerçekleştirmek zorunda kalabilirsiniz. FTP ile dosya transferi oldukça can sıkıcıdır aslında. Basit veri transferlerini sağlamak için SSIS'in kendi içerisinde bulunan FTP Task'ı rahatlıkla kullanabilirsiniz. Diğer durumlarda (ve hatta çoğu zaman) Script task ile ftp işlemlerini gerçekleştirmek zorunda kaldığımı itiraf etmek durumundayım. Dilerseniz öncelikle basit ftp işlemini ve FTP Task'ı birlikte gözde geçirelim, ardından da script örnekleri bulabileceğiniz sitelerin adreslerini vererek yazımızı sonlandıralım.

 

Hemen bir FTP task'ı sürükleyip bırakalım Control Flow içerisine.

Üzerine çift tıklayarak editörü açalım.

Burada üç adet sekme göreceğiz. Genel bilgileri tanımladığımız "General", yapılacak işlemleri belirlediğimiz "File Transfer" ve her SSIS Task'ın ortak özelliği olan dinamik "Expressions".

 

General sekmesi

FTPConnection: FTP bağlantı bilgilerimizi tanımlayacağımız bağlantıyı penceresini açar.

StopOnFailure: Herhangi bir hata ile karşılaştığımızda ftp operasyonun durmasını ya da devam etmesini belirlediğimiz özellik.

Name, Description: Adı ve açıklaması.

Dilerseniz hemen ftp bağlantı bilgilerimizi tanımlayalım. FTPConnection içerisinden "New Connection" diyerek FTP Connection Editor ekranın açılmasını sağlıyoruz:

Buradaki alanlar:

Server Name: Bağlantı kuracağınız ftp adresi. (Dikkat burada ftp://ftp.server.com şeklinde yazmadık)

Server Port: Bağlantı portu.

UserName, Password: Kullanıcı adı ve şifresi

Time-out (in Seconds): Saniye cinsinden bağlantı kurmaya çalışma süresi. 60sn: 1 dk boyunca bağlantı kurmaya çalışır. Eğer bağlanacağınız adres yoğun bir adres ise bu süreyi artırabilirsiniz. (Eğer sıfır girerseniz sonsuza kadar dener)

Use Passive Mode: Pasif Mod FTP kullanılıp kullanılmayacağını belirtir. (pek mantıklı Türkçe kaynak bulamadım nedir Pasif/aktif ftp diye o nedenle en mantıklısı: http://support.microsoft.com/kb/283679/tr bir de teknolojikadam.com adresinden şöyle bir bilgiye ulaştım: Eğer Passive Mode kullanırsanız: Sunucu üzerinde 21 ve üzerindeki portların açık olması gerekirken, istemci üzerinde herhangi bir port'un açık olmasına gerek yokmuş: http://www.teknolojikadam.com/index.php/ftpde-active-mode-ve-passive-mode-nedir.html )

Retries: Tekrar bağlantı kurma deneme sayısı. (Eğer sıfır girerseniz sürekli dener)

Chunk Size (in KB): Kaçlık parçalar halinde veriyi göndereceğinizi belirler.

 

File Transfer Sekmesi

Ftp Transferi aslında çok basit bir ifadeyle sunucunun bir klasöründeki dosyaları sizin makinanızdaki bir klasöre kopyalama işlemidir. Ancak sadece bununla sınırlı değildir. SSIS içerisinde bulunan FTP Task ile birlikte bir sürü işlemi de yapabilirsiniz. Bunlar aslında sırasıyla aşağıdaki gibidir:

Send Files: Dosya yollama
Receive Files: Dosya alma
Create Local Directory: Makinanızda klasör yaratma
Create Remote Directory: Sunucuda klasör yaratma
Remove Local Directory: Makinanızdaki Klasörü silme
Remove Remote Directory: Sunucudaki klasörü silme
Delete Local Files: Makinanızdaki dosyaları silme
Delete Remote Files: Sunucudaki dosyaları silme

Her bir opsiyon için FTP task içerisinde farklı ayarlar söz konusudur. Bu yazıda sadece önemli olanlardan bahsedeceğim.

Öncelikle genel senaryo olarak FTP ile bir dosyayı uzak sunucuya yollayalım.

Yollama işlemi için gerekli olan özellikler:

IsLocalPathVariable: Makinanızdaki dosyanın yolu bir değişkenden mi beslenmekte olduğunu belirttiğiniz yer. Burada dosya yolunu bir string dğeişken yaratarak tutabilir ve ftp task'ın kullanmasını sağlayabilirsiniz. Ben şimdilik harddisk'imde olan tek bir dosyayı seçtim.
Local Path: Dosya yolu
Operation: Send Files: Dosya yollama operasyonu
IsTransferASCII: ASCII moduyla verinin gönderilip gönderilmeyeceği belirlenir.
IsRemotePathVariable: Sunucudaki klasör yolunun bir değişkende saklanıp saklanmadığını gösterir.
Remote Path: Sunucudaji dosya yolu
OverwriteFileatDest: Eğer aynı isimli bir dosya ile karşılaşılırsa üzerine yeni gelen dosyanın yazılıp yazılmayacağını gösterir.

 

Çalıştırdığımızda sonuç:

 

Şimdi ikinci senaryomuz olarak uzaktaki dosyaları makinamıza indirelim.

Burada dikkat ettiyseniz Remote Path olarak /download/*.* yazdık. Yani upload ederken tek bir dosya ancak download ederken bir sürü dosyayı indirebiliyoruz. *.txt deseydik sadece txt uzantılı dosyaları indirecektik. Önemli olan diğer bir husus ise RemotePath olarak SSIS içerisinde seçmeye çalıştığımızda sadece tek dosyayı seçebiliyoruz aslında. Dosya seçmeden OK butonu aktive olmuyor. Buna alternatif olarak bir dosya seçtikten sonra dosya yolunu değiştirip *.* veya *.txt, *.xls gibi işlemlerle değiştiriyoruz. (Bir SSIS hilesi diyelim buna)

FTP task'ı çalıştırdığımızda sonuç:

Makinamdaki Masaüstünde dosyaları görebilmekteyim:

 

Not: Dosya indirme sırasında aşağıdaki gibi bir hata mesajı alıyorsanız, bu durumda klasör yerine dosya seçmelisiniz anlamına geliyor. Çünkü FTP task sadece tek bir dosya yollayabilirken bir sürü dosyayı indirebilir.

Validation error. FTP Task FTP Task: File usage type of connection "<FileConnection>" should be "FileExists" for operation "Send".

 

Son olarak, eğer normal fonksiyonalite ile gerçekleştiremediğiniz işlemleri script task ile gerçekleştirmek için ihtiyaç duyabileceğiniz örnekleri aşağıda bulabilirsiniz:

http://www.codeproject.com/KB/IP/FtpClient.aspx?fid=225949&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=201

http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/079fb811-3c55-4959-85c4-677e4b20bea3

http://database.itags.org/sql-server/324318/

 

 

 

Control Flow Tasks

Add comment




biuquote
  • Comment
  • Preview
Loading