8 Kasım 2008 Cumartesi

SSIS Paketi Kullanmak

SSIS Paketi Kullanmak;
Bu dökümanda sizlere basit bir ssis paketi yazmayı anlatacağım. Burda yaptıklarım aslında mantık olarak tamamen doğru olduğu için değil daha fazla araç kullanmak için yapılmıştır. Ne dediğimi dökümanı okudukça anlayacaksınız ;

Döküman : http://docs.google.com/View?docid=dgndh2qr_51f9t29tc7
Uygulama : http://www.volkanaltan.com/Dokumanlar/ssis_kullanmak.zip
Paket Şifresi : 123456

SSIS (SQL Server Integration Services)

SSIS bir veri kaynağından (Veritabanı,Dosya vs..) verilerin alınıp arada istenirse işlemlere tabi tutularak
başka bir veri kaynağına aktarılmasıdır. Biz bunu yaparken Visul Studio 2005 kullanacagiz.

Öncelikle konuyu iyi kavrayabilmek için bir senaryo yazalım. Onun üzerine projemizi yapalım.

Soru : İçindeki dataları aynı olan fakat bazen birinden fazla diğerinde eksik veya tersi durumların olduğu İki farklı veritabanı arasında tablo bazlı senkornizasyon işlemi nasıl yapılır ?

Öncelik soru biraz karışık gözüktüğü için tesbit yapalım.

Local_db ve Remote_db iki veritabanı. Bu veritabanlarının localde bir yerde olduğunu varsayıyoruz.
A1 ve B1 tabloları için mevcut datalar aşağıdaki gibidir.

Local_db .A1 Remote_db .A1
1 1
2 2
7 5
8
9

Bunların eşitenmesi için A1 deki fazla datanın B1’ e, B1 deki fazlaların (varsa) A1’e geçilmesi gerekiyor.
Burdaki veritabanları farklı serverlarda bulunuyor. Bunlara ulaşmak için Linked Server (Daha önce anlatmıştık.) kullanabiliriz. O zaman bu işlem için şu şekilde bir Sql cümleciği yazmamız gerekicekti.



Select Ldb.*,Rdb.* From local_db.dbo.A Ldb

left join remote_db.dbo.A Rdb ON Rdb.PrID = Ldb.PrID


Yukardaki sorgu bize şöyle bir sonuç verecektir.



Bizim istediğimiz ise Local db de olan fakat remote db de olmayan dataları Remote Db ’ ye girmek.
Bunun için Locale A Remote a B dersek. A-(A∩B) yapiyoruz. (A tablosundan A kesişim B yi çıkartıyoruz, sadece B’ de olan datalar bize kalıyor.)


Select Ldb.*,Rdb.* From local_db.dbo.A Ldb

left join remote_db.dbo.A Rdb ON Rdb.PrID = Ldb.PrID

WHEre Rdb.PrID is null




Görüldüğü üzere B ‘ ye girmemiz gereken datalar ortaya çıktı. Şimdi bunu tam işe yarar hale getiriyoruz.


INSERT INTO Remote_db.A (PrID)

Select Ldb.PrID From local_db.dbo.A Ldb

left join remote_db.dbo.A Rdb ON Rdb.PrID = Ldb.PrID

WHEre Rdb.PrID is null


Çalıştırınca “(3 row(s) affected)” yazısı çıkıyor. İşlem başarılı.

Şimdi bu yaptığımız işlemde yazdığımız Sql cümleciğini SSIS kullanarak yapacağız.


Önce proje oluşturuluyor.
....

2 yorum:

Sibel dedi ki...

Merhaba,
verdiğiniz bilgiler için çok teşekkür ederim.
elimde büyük bir veritabanı var
postregsql de tutulmuş.
bunu mssql e aktarmam gerekiyor sizin izlediğiniz yolu denedim müspet bir sonuç alamadım (provider ve datasource konularında)
yardımcı olursanız sevinirim.

Volkan dedi ki...

Merhaba Sibel,
Eğer herhangi bir değişiklik olmadan direkt aktaracaksan SQL Server Management Studio'da Data Import/Export u kullanabilirsin. Datayı buraya soktuktan sonra sql yazarak gerekli işlemleri yaparsın. Veya SSIS kullanacaksın. Ama sorunun tam olarak ne olduğunu anlayamadım. Detay verebilir misin ?