6 Mayıs 2009 Çarşamba

MSSQL IP limit (access) koyma Windows IPsec kullanimi

Windowsda bulunan
IPSec servisi ile Ip bazlı filtreleme yapmak;






Adımlar ;



Temelde iki adım bulunmaktadır.
1. IPSec
filter listesini oluşturma
2. IPSec roller
tanımlama



  1. Başlat ->
    Çalıştır -> services.msc -> IPSEC
    Services çalıştırınız.


  2. Başlat ->
    Çalıştır -> secpol.msc


  3. IP
    Security Policies on Local Computer sağ tıklayıp /
    Manage IP Filtrer seçiniz.


  4. Manage
    IP Filter Lists tabında iken “Add” butonuna
    tıklayınız.











  1. Use Add Wizard
    unclick ediniz. Add butonuna basınız.
    Addressing
    tabinda ;




Source
IP Address : 66.135.40.45 (serv1)
Destination address : My Ip
Address

66.135.40.45 den bana gelen butun
istekler.


Protocol tabında;


Select
a protocol type : TCP

Set the IP protocol port:
From any
port click.

To this port: 1435

Herhangi bir portdan
1435 e gelen butun istekler.

Yukardakinin aynisini bu kez
engellenen baglanti istekleri olarak oluşturuyoruz;






Add
butonuna basarak Yeni liste ekleyiniz.
Bu listede engeleldiğiniz
ip leri yaziniz.



Herhangi
bir ip den yapilan butun istekleri kapsar.


1435
portu TCP baglantilari;












  1. “Manage
    IP Filter Actions” tabina geçiniz.




Use
Add wizard unclick edip “Add” butonuna basiniz.



  1. Security
    Methods tabinda Block secip “OK”
    basiniz.




    ------------------------------------------------------------------------------------------------------------------------------


  2. IP
    Security Policies on Local Computer sağ tıklayıp /
    Create IP Security Policy








Next
-> Finish.



  1. Daha once
    tanımladığımız listeleri hangi işlemde
    kullanacağımızı belirleyeceğiz.



    Add
    butonuna basınız.


    “İzin
    verilen baglanti istekleri” ni tıklayıp “Filter
    Action” tabına geçiniz.



    Bu
    listeye hangi yetki vermek istediğinizi seçin.



  2. Son olarak
    secpol.msc ekranında “1435 portune gelen istek yönetimi”
    sağ tıklayıp Assign ediyoruz.



    Policy
    Assinged Yes ve Name kismindaki resim kenari yeşil ise
    çalışıyor demektir.

    Düzgün göremiyorsanız : http://docs.google.com/Doc?id=dgndh2qr_77cdf2p3cr

    Kaynak:
    http://support.microsoft.com/kb/313190




JMeter


Apache JMeter







  1. Giriş




Apache JMeter Java
dilinde yazılmış bir uygulamadır.. Öncellikle
Web için tasarlanan bir test aracı olup, sonradan başka
test alanlarında da kullanılmıştır.



Apache
JMeter hem statik hem de dinamik kaynakları test etmek için
kullanılabilir. Örnek: Servlet, Perl script, Java nesnesi
(Java Object), veri tabanı sunucusu (DBMS),
FTP sunucusu v.b.



Bir
sunucu üzerinde birden fazla bağlantı açıp
aynı zamanda birçok bağlantı yapılıyormuş
gibi gösterebilmektedir. Bu sonuçları analiz etmek
içinde grafiksel raporlama imkanları
vardır.

Apache JMeter aşağıdaki
özellikleri taşır:




  1. -
    HTTP, FTP ve veri tabanı sunucuları
    (JDBC kullanarak) üzerine ağır yük (heavy
    load
    ) ve performans (performance) testleri yürütebilir



  2. -
    100% Java dilinde yazılmış olduğundan
    platformdan bağımsız, taşınabilir



  3. - Swing package’i
    kullanıyor (derlenmiş JAR javax.swing.* package’leri
    içeriyor)



  4. -
    Çok dizililiği (multithreading) kullandığından,
    koşut olarak birkaç işlev yapılabilir, çok
    kullanıcılı bir ortamı simule edebilir.



  5. -
    Kullanıcı arayüzü (GUI) kullanışlı
    olup, daha hızlı işlemekte ve daha doğru
    zamanlamayı (precise timing) sağlıyor.



  6. -
    Önbelleğe almayı (caching) kullanıp,
    sonuçları çevrim dışı (offline)
    olarak görme/analize etmeye olanak sağlıyor.



  7. -
    Genişleyebilir (Highly Extensible)






    1. *
      Takılabilir örnekleyiciler (pluggable samplers)
      ile sonsuz test olanakları sağlıyor



    2. *
      Takılabilir Zamanlayıcılar (pluggable timers)
      ile birkaç yük istatistiği (load statistics)
      seçilebilir



    3. *
      Veri analizi ve görselleştirme takılabilirler
      (visualization plugin) ile genişleyebilirliği
      (extendibility) ve kişiselleştirmeyi (personalization)
      sağlamakta



    4. *
      İşlevler (JavaScript’i içermekte) bir test
      için devingen (dynamic) girdi oluşturmakta
      kullanılabilir



    5. *
      Yazılı yönergeli örnekleyiciler (scriptable
      samplers
      )













  1. JMeter’i
    Çalıştırma

    JMeter’i kullanmak
    için
    http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
    adresinden son sürümüni indirmeliyiz. İndirdiğimiz
    dosyanın içinde “bin” klasöründe
    jmeterw.cmd (Windows için) veya jmeter (Linux için)
    çalıştırmalıyız.


  2. JMeter’in
    Kullanımı

    a. HTTP Çalışması



JMeteri
çalıştırmak için bir çalışma
planımızı “Thread Group” a ekliyoruz













Yukarda
ki ayarları istediğimiz şekilde değiştiriyoruz.


(Kullanıcı
sayısı , kaç kez tekrarlanacağı)
Number
Of Thread (users) :







Thread imize sağ
tıklayıp Add / Config Element /
HTTP Request Defaults
ekliyoruz.












Şimdi
Add / Sampler / HTTP Request’ten
HTTP isteklerimizi eklemeliyiz.







Burada
gerekli ayarları yapıyoruz.
HTTP Request Defaults ‘a
server bilgilerini girdiğsek buraya girmemize gerek yok.
(
post ve get için değişkenler girilebiliyor)





Raporlama
için Add / Listener/ View
Results Tree
(işlemleri
adım adım görmek için)









Sonuçları
gördüğümüz ekran;



























HTTP
Proxy Kullanımı


Thread
Group ekliyoruz. İçine HTTP Request Defaults.


WorkBench
e sağ tıklayıp Add / Non-Test Elements /HTTP Proxy
Server



















































Kabul
edilecek dosyalar



Kabul
edilmeyecekler







Tarayıcı
ayarları;










Bu
işlem sonrasında gezdiğimiz sayfalar JMeter tarafından
kayıt altına alınacaktır.






b.
Veritabanı Çalışması


JDBC
(
Java Database Connectivity )
kullanabilmek için
http://dev.mysql.com/downloads/connector/j/5.1.html


Sitesinden
connectoru indirip JMeter’in bulunduğu dizinde lib/ext
içine atıyoruz. Programı yeniden başlatınca
artık JDBC kullanılabilir.


Çalışmamıza
Thread ekliyoruz. Ardından buna sağ tıklayıp
Add
/ Sampler /
JDBC
Connection Configuration
ekliyoruz.


MySQL
için örnek bir bağlantı;







Ayarları
;


Variable
Name : MySQL


Database
URL :
jdbc:mysql://volkanmysql:3306/db


JDBC
Driver class :
com.mysql.jdbc.Driver


Username:
dbusername


Password:
dbpassword
Diğer veritabanları için bağlantı
örnekleri;


MySQL
com.mysql.jdbc.Driver jdbc:mysql://host[:port]/dbname PostgreSQL
org.postgresql.Driver jdbc:postgresql:{dbname} Oracle
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:user/pass@//host:port/service Ingres (2006)
ingres.jdbc.IngresDriver jdbc:ingres://host:port/db[;attr=value] SQL
Server (MS JDBC driver) com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://host:port;DatabaseName=dbname
Apache Derby
org.apache.derby.jdbc.ClientDriver
jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;...]]



http://jakarta.apache.org/jmeter/usermanual/component_reference.html#JDBC_Connection_Configuration






Sorgularımızı
yollamak icin ;


Add
/ Sampler /
JDBC
RequestVariable Name
yazan
yere JDBC Connection Configuration da yazdığımızın
aynısını yazıyoruz.













MSSQL
için;


Open
Source olan jtds connectörünü indirebilirsiniz.
http://jtds.sourceforge.net/


Driver
Class:
net.sourceforge.jtds.jdbc.Driver


Veya


http://www.microsoft.com/downloads/details.aspx?familyid=f914793a-6fb4-475f-9537-b8fcb776befd&displaylang=en


Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver










Kaynaklar


http://jakarta.apache.org/jmeter/usermanual/index.html


http://www.bilgidata.com




            Yayınlayan: http://volkanaltan.blogspot.com/


SSIS Paketi kullanma-

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-(AB)
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.







Control
Flow tabındayken ToolBox dan “Data Flow Task”
sürüklüyoruz.


Şimdi
“ToolBox” daki menü değişmiştir.


Data
Flow Souces,Data Flow Transformations ve Data Flow Destinations
olmak
üzere 3’e ayrılıyor. İşlevleri adından
anlaşılacağı gibidir








İlk
iş olarak veritabanı işlemlerinde kullanmak için
Data Sources” ler ekliyoruz. Böylelikle
ilerde sadece Data Source ları değiştirerek kolayca db
yönlendirmesi yapabiliriz.


Solution
da Data Sources e sağ tıklayıp Yeni Data Source ekle
deyin.




Açılan
penceren Tekrar New butonuna tıklayıp Bağlantı
tipi ve bilgilerini girin.












Ok ve Finish deyip
bitirin.






Aynı
bağlantının birde Remote olanını yapın.






Eğer “Data
Reader
” componentini kullanacaksak bunun için ayrı
bir bağlantı daha oluşturmalıyız. Ve
bağlantı tipinde .Net Provider \ Sql Client Data
Provider
seçmeliyiz.







Şimdide
Connection Managers”ı kullanarak
bağlantılarımızı hazırlayalım.


New
OLE DB Connection ı tıkladıktan sonra çıkan
penceren data soruce lerimizi göreceğiz. Bunları seçip
uygun bağlantıları oluşturuyoruz. Hem Local_db
hem Remote_db için bunu yapıyoruz.


Ayrıca
Eğer Data Reader kullanacaksak onun bağlantısını
da oluşturmalıyız. Connection manager da sağ
tıklayıp / New Connection from Data Source diyoruz ve
Ekrandan Sql Client adını verdiğimizi seçiyoruz.



Bağlantılarımızı
yaptığımıza göre şimdi işlemlere
geçebiliriz.



“Data
Flow” tabına geçip “Data Flow
Souces
/OLE DB Source
” sürükleyip
bırakıyoruz.





zOLE
Db üzerine sağ tıklayıp “Edit”
diyoruz.



Ok’ e basip çıktığımızda
üzerindeki kırmızı çarpı işareti
kayboluyorsa işlem doğru demektir.

Şimdi ikinci
Ole DB Data Sourcue mizi olusturup Remote Db seçiyoruz.






2
adet Data Flow Transformations/Sort u
sürükleyip ekrana bırakıyoruz.


Ole Db
Source Local ve Ole DB Remote dan çıkan yeşil okları
altındaki sortlara BAĞLIYORUZ.


Sort’
un üzerine sağ tıklayıp Edite basıyoruz.
Ekranda tablomuzdaki alanlar belirecektir.
Join atmak istediğimiz
alanları seçiyoruz.Seçili alan aşağıda
belirecektir. Sıralama tipini de değiştirebilriiz.
Eğer
tekrar eden kayıtlar varsa ve onlardan kurtulmak istiyorsak en
alttaki yazının karşısını
tıklıyoruz.
Ok’ butonuna basıp çıkıyoruz.


Diğer
sortuda yukardaki gibi yapıyoruz.


Data
Flow Transformations/
Merge Join Componentini

alıp ekrana bırakıyoruz.
Sortlardan çıkan
yeşil okları Merge’nin üzerine bırakın.
Oku bıraktığınız an size hangi inputu
aldığını sorar. (hangisi sağ hangisi
sol)Birini seçip Ok deyin. Diğerinde otomatikmen diğer
seçenek seçilir.

Merge Join comonentine sağ
tıklayıp Edit deyin.
Ekranda Sort componentinden gelen
datalar join olarak işaretli gözükecektir. Yanlarında
ki kutucukları işaretlerseniz onlarda çktı
olarak gözükücektir. En tepede “Join Type”
bulunmakta burdan birleştirme türünü seçeceğiz.
Bizim yaptığımız “Left Join” bu
nedenle uygun olanı seçiyoruz.




Şimdi
işlem sonrasında elde ettiğimiz datalar için
“WHERE” kısmımızı yazalım.Bunun
için


Data
Flow Transformations /Conditional Split Componentini

ekrana bırakıyoruz. Merge’den çıkan yeşil
oku buna bağlıyoruz. Üzerine sağ tıklayıp
Edite bastıktan sonra karşımıza çıkan
ekrandan ;







Ekran 3 parçaya
ayrılmış. Üst solda değişkenlerimiz
yani kolonlarımız sağda kullanabileceğimiz
methodlar mevcut. Aşağıda da kullanım alanı
ve koşullar.
Conditional Split
Componentini
tamamen koşul işlemleri için
yapılmıştır.
Configure Error Output butonu
ile koşul işlemi sonucunda hataları igone edebilir
veya açabiliriz.




Not:
Koşul işlemlerinde iki alan karışlaştırırken
alanlardan biri “null” olursa hata alırsınız
bunun için convert methodlarını kullanabilirsiniz
ama sorun çıkabiliyor. Bu yüzden null ları
durdurmak için OLE DB ile tablodaki dataları alırken
sql ile çağırıp null gelecek alanları ‘0’
a convert edebilirsiniz.
Örnek: se
select
ISNULL(ID,
'0') AS
ID,isnull(A1,'0')
as A1 From
A


Data Flow
Destinations/ OLE Db Destination Componenti



Burda
elde ettiğimiz datayı komple A nın tempine
aktarıyoruz.


Bu haliyle Paketimiz
çalışacaktır. Ekran görüntüsü
;



Aslında istesek
doğrudan Remote_db nin A tablosuan yazabilirdik ama burda maksat
SSIS araçlarını daha fazla kullanmak ve tanımak.


Şimdi INSERT
ettiğimiz dataları ait oldukları yere itmek gerekiyor.
Bunun içinde bir Sp yazıp paketimizde bu sp yi
çalıştıralım.




Sp ;


SET
ANSI_NULLS ON



GO


SET
QUOTED_IDENTIFIER ON



GO






CREATE
PROCEDURE [SSIS_INS_A]



as


INSERT
INTO A


(



PrID


)


Select


atmp.PrID


FROM
A_temp atmp(NOLOCK)


LEFT
OUTER JOIN
A (NOLOCK)
on atmp.PrID
= A.PrID


WHERE


A.ID
Is NULL






Bu Sp yi çalıştırmak
için ;


Control
Flow
tabına gelip “Execute SQL
Task
” Componentini ekliyoruz. Data Flow Task dan
çıkan oku buna ekliyoruz.



Sql Statement yazan
yere SP adını yazp Ok diyoruz.


Unutmamamız
gereken birşey var oda Bu işlem her gerçekleştiğinde
temp tablonun içinin boşaltılması gerektiği.
Bunun için Bir sql task editörüde en başa
ekliyoruz.


İçine :
TRUNCATE TABLE [A_temp] komutunu yazıyoruz.


Son olarak
yaptığımız işin olup olmadığının
email olarak gelmesini ve zamanını öğrenelim.


ToolBox’ dan
Send Mail Task” Componentini
sürükleyip bırakıyoruz. Ayarları yapmadan
önce ekranda boş bir yere gelip sağ tıklayın
;



Variables I tıklayıp
aılan penceren Add Variable diyerek yeni bir değişken
yaratıyoruz.


Tipini string seçip
üzerindeyken F4 e basın. Böylece Variables in Property
sine gireceksiniz.


EvaluateAsExpression
değerini True yapın.


Expression a
tıklayın;



Buraya aşağıdaki
değerleri girin ;


"\nBaslama
Saati : " + (DT_STR, 30, 1252) @[System::StartTime] +


" \nBitis Saati
: " + (DT_WSTR, 30) (DT_DATE) GETDATE()+


" \nToplam
Dakika: " + (DT_STR, 30, 1252) DATEDIFF( "mi",
@[System::StartTime],GETDATE() )


+ " \n"


Evaluate Expression
butonuna basıp yazıdğımızın çalışıp
çalışmadığını görebilirsiniz.


Böylece
değişken oluşturma işide tamamlanmış
oluyor. Şimdi sıra bu değerleri email ile yollamaya
geldi.


Componentin üzerine
sağ tıklayıp sırayla ilgili ayarları
yapıyoruz.






Değişkeni
mail içine gömmek için Expressions tabındaki
ayar kısmına tıklıyoruz açılan
penceren


Message Source
Propertysinin expressionuna tıklayıp içine
değişkenler listesine bizim daha önce kullandığımız
değişkeni ekliyoruz. Sürükle bırak
yapabilirsiniz.




Expression : "A
paketi basariyla calisti \n" + @[User::TotalExecutionTime]



Şimdi herşey
tamam ama email gitmiyorsa localda smtp serverini açıp şu
ayarı yapın ;


Access / Relay / Add
/ single Computer e ip yazin / Ok / Ok / Apply



Herşey güzel
olduda paketi başka bir yere taşıdığınızda
Güvenlik nedenleriyle çalışmayabilir.
O
yüzden paketinize şifre koyarsanız böyle
sorunlarla karşılaşmazsınız.



Şifre
koymak için ;
Paketin özelliklerinden Security tabında
/ Protection Level = EncryptAllWithPassword yapın.


Birde şifre
yazarsanız işlem tamam olacaktır. Paketin son hali ;








Volkan
Altan
Http://volkanaltan.blogspot.com






Uygulama Link: http://www.volkanaltan.com/Dokumanlar/ssis_kullanmak.zip

Güncelleme olursa :
http://docs.google.com/Doc?id=dgndh2qr_51f9t29tc7
Paket Şifresi : 123456