Makale Özeti

Günümüzde birçok firma, verilerini yorumlamak, geçmişi raporlamak ve geleceğe ilişkin kararlar alabilmek için değişik formatlarda ve değişik lokasyonlarda sakladıklarını verilerini bir merkezde toplamak zorunda kalırlar. DTS (Data Transformation Services) bu ihtiyacı karşılamak için SQL Server ile beraber sunulan çok önemli bir servistir. DTS ile, değişik veri sistemlerindeki verileri tek bir merkezde toplayabilir, toplarken birbirine uyumlu hale getirebilirsiniz.

Makale

Dinamik DTS Paketleri Yaratmak

Günümüzde birçok firma, verilerini yorumlamak, geçmişi raporlamak ve geleceğe ilişkin kararlar alabilmek için değişik formatlarda ve değişik lokasyonlarda sakladıklarını verilerini bir merkezde toplamak zorunda kalırlar. DTS (Data Transformation Services) bu ihtiyacı karşılamak için SQL Server ile beraber sunulan çok önemli bir servistir. DTS ile, değişik veri sistemlerindeki verileri tek bir merkezde toplayabilir, toplarken birbirine uyumlu hale getirebilirsiniz.

DTS’in sağladığı araçları kullanarak grafik ortamda DTS paketlerinizi hazırlayabilirsiniz.

DTS Paketi Nedir?

DTS paketi, firmanızın hangi verileri, nereden, nereye ve nasıl  göndereceği, veriler gönderilirken ne gibi dönüşümlerden geçeceği ile ilgili gerekli görevleri kapsayan bir pakettir. DTS paketini çalıştırdığınızda, paket içine gömüşmüş görevler sizin verdiğiniz sıraya göre çalışırlar.

Dinamik DTS Paketleri

Hiç bir ortamda kullandığınız bir DTS paketini başka bir ortamda kullanmanız gerekti mi? Örneğin test ortamında kullandığınız bir DTS paketini üretim ortamındaki bir sunucuda çalıştırmanız gerektiğinde ne yaparsınız?

Genel olarak, test ortamındaki DTS paketinizi bir dosyaya kaydedersiniz, üretim ortamındaki sunucuya bağlanırsınız, paketi orada açarsınız, veritabanı bağlantısını değiştirirsiniz (daha önceki paket test ortamındaki veritabanı’e bağlanıp orada işlem yapmak için programlanmıştı) ve tekrar kayededersiniz.

Yukarıdaki senaryo bir ya da birkaç paketten bahsettiğimiz ve üretim ortamındaki veritabanı’e erişimimiz olduğunu varsaydığımız sürece işimizi görür. Peki ya birçok paketi birçok sunucuda çalıştırmanız gerektiğinde ne yaparsınız? Paket sayısı ve sunucu sayısı arttığnda işler zamanla oldukça sıkıcı olmaya başlar ve hata yapma oranınız artar.


 

Paketi Komut Satırından Çalıştırmak

Örneğin, aşağıdaki figürde görüldüğü gibi, veritabanınızdan bir sogunun sonucuna göre veri export eden bir paketi düşünelim.

Figür 1 : Connection 1 veritabanı bağlantısı kaynak, Connection 2 hedef, yukarıdaki örnekte hedef bir text dosyası.

Sorulacak ilk kritik soru : Bu paketi değişik sunucularada, kopyalamadan çalıştırabilir miyiz?

Cevap : Paketi bir dosya olarak kaydedebiliriz. Peki paketi dosya olarak kaydettikten sonra, paketi açmak için yine SQL Enterprise Manager’a ihtiyacımız yok mu? Hayır. Microsoft DTS paketlerini komut satırından çalıştırmanıza yarayan bir komut satırı programı sağlıyor : dtsrun.exe.

Dtsrun /F C:\pkg1.dts

Yukaridaki komutla C:\pkg1.dts olarak kaydettiğimiz paketimizi komut satırından çalıştırabiliriz.

Dtsrun komutu ile paketi çalıştırmak için sunucuya kopyalama ihtiyacımızı ortadan kaldırdık. Fakat hala bir problemimiz var. Bu paket sadece ilk yaratıldığı andaki sunucuya bağlantı kuruyor, bir şekilde Dtsrun komutunu çalıştırırken kullanacağı veritabanı bağlantısını da belirtmemiz gerekiyor.


 

Paketi Portable Hale Getirmek

DTS Editor’de “Dynamic Properties Task” denen bir görev var. Pakete bir Dynamic Properties Task eklediğinizde özellikler penceresi açılacaktır.

Figür 2 : Özellikler penceresinde ilk olarak açıklama yazın, örneğin olarak “data source ayalarla” gibi. Daha sonra “Add” butonuna klikleyin.

Figür 3 : Connections -> Connection 1 -> Data Source özelliğini seçin, aşağıdaki “Leave this dialog box open after adding a settin” özelliğinin yanındaki işaret kutusunu işaretleyin ve “Set” ‘e klikleyin.


 

Figür 4 : “Create Global Varibles” seçeneğini seçin.

Figür 5 : “Name” kısmına veritabanı için kullanacağınız değişkenin ismini yazın ve “Value” kısmına, varsayılan bir sunucu adı yazın, OK’e basın.

Figür 6 : Varible kısmından bir önceki adımda yarattığınız değişkeni seçin.

Yukarıdaki 6 adımda paketin çalışacağı sunucuyu belirleyen bir değişken atadık. Bu şekilde paket değişik sunucularda çalışacağı zaman dtsrun komutundan yarattığımız değişkenin değerini değiştirerek paketin çalışacağı sunucuyu değiştirebiliriz. Eğer paket farklı sunucularda farklı veritabanlarından veri aktaracaksa “initial catalog” değerini ya da sunucularda SQL authentication kullanıyorsanız ve farklı sunucuların farklı kullanıcı adı ve şifreleri varsa “user id and password” değerii de değişkene atıyabilirsiniz.

Figür 7 :Dynamic Properties Task’ı oluşturduktan sonra, oluşturduğunuz adımın pakette ilk çalışan adım olduğuna emin olun.

Paketi Enterprise Manager’dan çalıştırıp kontrol ettikten sona kaydedin.

Komut Satırından Değişkeni Ayarlamak

Komut satırında :

dtsrun /F C:\pkg1.dts /A”serveradi:8=SERVERC”

“/A” ile bir değişkene değer atayacağınızı belirtiyorsunuz, “ :8 ”  ile değişkenin veri tipinin “string” olduğunu belirtiyorsunuz.

Not : Değişken isimleri büyük-küçük harf duyarlıdır, ve eğer değişkeni yanlış yazarsanız herhangi bir hata döndürmez, değişkene varsayılan değeri atanarak komut çalışır.

DTS Paketimizi Script İle Çalıştıralım

Şimdi dts paketimizi çalıştırmak için basit bir batch file yazalım.  Batch file’ımızın adı “rundts.bat” olsun (ornegimizde sunucu dışında değişkenler de kullanılmıştır)

@ECHO Off

IF not exist %1.dts goto badfile

set myserver=devserver

set mydb=devdb

set extractdir=c:\Extracts

set outdir=.\output

CALL dtsrun /F%1 /N%1 /WTRUE /A”DB:8=%mydb%” /A”serveradi:8=%myserver%” /A”Outfile:8=%extractdir%\%~1.txt” > “%outdir%\%~1.txt”

IF /i %2==Y start notepad %outdir%\%~1.txt

IF /i %3==Y pause

goto end

:badfile

ECHO Please provide a filename without DTS extension, followed by Y to show output, and another Y to pause before returning

:end

TIME /T

ECHO %1 Completed

@ECHO ON

rundts.bat

Sunucu adı, veritabanı adı, export edilen datanın nereye kaydedileceği ve logun nereye kaydedileceği ile ilgili değişkenleri kendi ihtiyacınıza gore değiştirmeyi unutmayın.

Export ettiğiniz data’nın dosyası DTS paketi ile aynı ismi taşıyacak fakat uzantısı .txt olacak.

“CALL dtsrun” satırındaki/W flag’ını TRUE yaparak komutun çıktısını EVENT VIEWER’a atmasını sağlıyorsunuz.

Dynamic Properties kullanarak çalıştıracağınız DTS paketiyle beraber komut satırında değişkenler kullanarak paketi kullanacağınız serverlara kopyalayıp, orada açıp, değişiklik yapıp, tekrar kaydedip çalıştırmak zorunda kalmayacaksınız. Birden fazla paket ve birden fazla sunucu ile oldukça işinizi kolaylaştırdığını göreceksiniz.