Recent comments

None


İçerik Ara











Yasal Uyarı
Bu sitede sunulan tüm bilgi ve dökümanlar Turgay Sahtiyan tarafından yazılmaktadır. Yazıların kaynak göstermek şartıyla kullanılması serbesttir.

© Copyright 2009-2013
Takvim
<<  Aralık 2017  >>
PaSaÇaPeCuCuPa
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567
Keywords

Merhaba arkadaşlar,

.Net ile yaptığımız projelerde sıkça kullandığımız Session nesnesi için default session time out 20 dakikadır. Projenin şekline göre bu değerde değişiklik yapmamız gerekebilir.

Bu işlemi yapabilmemiz için birden fazla yöntem bulunmaktadır.Bunlar;

1. web.config dosyası üzerinde session time out verebiliriz.

    <system.web>
        <sessionState timeout="60"/>
    	<!--
    		....
    		....
    	-->
    </system.web>


2. Direk IIS üzerinden session time out ayarlayabiliriz.

İngilizce windows için; Control Panel | Administrator Tools | Internet Information Services | Default Web Site | Properties | Home Directory | Configuration | Options | Enable Session State | Session timeout 20

Türkçe windows için; Denetim Masası | Yönetimsel Araçlar | Internet Hizmet Yöneticisi | Varsayılan Web Sitesi | Özellikler | Giriş Dizini | Yapılandırma | Uygulama Seçenekleri | Oturum Durumunu Etkinleştir | TimeOut ataması yap

 

3. Global.asax dosyasında Session_Start methodunda Session.Timeout=x dakika ataması yapılabilir.

 

4. Herhangi bir asp web sayfasında Session.Timeout=x dakika ataması yapılabilir.

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhabalar,

SQL Server 2000 de Service Manager üzerinden server ı start etmeye çalışırken “The service did not start due to a logon failure” hatası alınabilmekte.

Bu hata SQL Server start up account unun yada SQL Server Agent start up account unun kullanıcı adı veya şifresinin hatalı olduğunu göstermekte. Böyle bir şeyde account un şifresinin değiştirilmesine rağmen start up account unun şifresinin değişmediği durumlarda ortaya çıkmakta.

Problemi çözebilmek için start up accountlarda ki password bilgilerinin update edilmesi gerekmektedir.

Bunun içinde Control Panel/Administrative Tools/Services kısmına girilir.

Default instance için MSSQLServer, instance lar için ise MSSQL$InstanceAdi satırları bulunur.

Bulunan satıra çift tıklandıktan sonra gelen ekranda Log On sekmesine geçilip doğru password yazılır.

psw1

Bu işlemlerden sonra SQL Server problemsiz bir şekilde start olacaktır.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar,

Bu yazımda SQL Server 2008 Agent kullanarak SQL Server 2008’i otomatik olarak nasıl restart edebiliriz anlatmaya çalışacağım.

SQL Server stop ve start işlemlerini komut dosyası vasıtasıyla yapabilmekteyiz. Bunun için kullanmamız gereken kodlar aşağıdaki gibidir;

Default SQL Server instance ını stop etmek için komut dosyasında aşağıdaki komutu yazıp enter a basıyoruz.

net stop MSSQLSERVER

rst1

Start etmek için ise komut dosyasında aşağıdaki komutu yazıp enter a basıyoruz.

net start MSSQLSERVER

rst2


Şimdi bu işlemi SQL Server Agent a yaptırarak SQL Server ı her gece veya her hafta 1 gün otomatik olarak nasıl restart edebileceğimize bakalım.

Bunun için SQL Server Agent üzerinde yeni bir job tanımlamamız gerekiyor.

Management Studio/SQL Server Agent/Jobs kısmına gelip sağ tık ile New Job sekmesini seçiyoruz.

rst3

 

Açılan pencerede bu yeni job umuzun ayarlarını yapmamız gerekiyor. İlk olarak General/Name kısmına bir isim veriyoruz.

rst4


Daha sonra job umuzun yapacağı iş adımlarını belirtmek için Steps kısmına geçiyoruz. Bu kısımda new butonuna basarak yeni bir step tanımlama ekranını açıyoruz. Bir job da birden fazla step bulunabilmekte. Stepler yukarıdan aşağıya doğru sırayla işlenmektedir.

Açılan step tanımlama ekranında aşağıdaki resimdeki gibi değişiklikleri yapıyoruz.

rst5


Bu ekranla işimiz bittikten sonra kapatıyoruz ve tanımladığımız bu job un belirli periyotlarda (örneğin her gece belli bir saatte) çalışabilmesi için gerekli ayarları yapmak için schedule kısmına geçiyoruz.

Schedule kısmında new tuşuna basıyoruz ve gerekli ayarların yapılacağı ekranı açıyoruz. Biz bu örneğimizde SQL Server ı her gece 02.00 da restart ettirelim. Bu Schedule için gerekli ayarlamaları aşağıdaki resimdeki gibi yapıyoruz. (Siz işlemin doğruluğunu görebilmek açısından Schedule Type tan One Time ı seçip Date-Time kısmından da yakın bir saati seçip işlem sonucunu görebilirsiniz.)

rst6

 

Değişiklikleri yaptıktan sonra ekranları kapatıyoruz. Restart etme job u göreve hazırdır:)

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar

http://www.turgaysahtiyan.com/post/Sql-Server-2008-de-Network-Uzerinden-Baglantc4b1-%28Remote-Connection%29.aspx adresli yazımda SQL Server 2008 de Remote connection yapabilmek için hangi ayarların yapılmasını gerektiğini belirtmiştim.

Bu ayarların haricinde Express edition da bir ayar daha yapmak gerekiyor.

Bu ayarda gerekli protocol ü açmak ile ilgili.

Bunun için Programların altındaki SQL Server bölümünden SQL Server Configuration Manager i çalıştırıyoruz.

Sql Server Network Configuration ın altından server ımızı tıklıyoruz.

Yan tarafta protocol ler açılmış olması lazım. Sql Server 2008 Express edition da TCP/IP default olarak false gelmekte.

Burdan istediğimiz protocol lere sağ tıklayıp enable yapıyoruz.

rc1

Bu işlemden sonrada server i restart etmemiz gerekiyor. Bunun içinde aynı ekrandaki SQL Server Services kısmına geliyoruz ve server a sağ tıklayıp stop ve start yapıyoruz.

Kolay gelsin.

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba,

SQL Server 2008 in ücretsiz versiyonu olan Express edition da bildiğiniz gibi Management Studio yok. Bu yazımda Management Studio yu SQL Server 2008 Express e ekstradan nasıl yükleriz onu göreceğiz.

İlk olarak bu işleme başlamadan önce maninanızda .NET FrameWork 2.0 ve MSXML 6.0 Parser yüklü olması gerekmekte. Bunun için linklere gidip uygun dosyaları makinanıza yükleyiniz.

SQL Server 2008 Express Management Studio (SSMSE) yu bu adresten indirebilirsiniz.

İndirip kurmaya başladığınızda aşağıdaki gibi bir hata alabilirsiniz.

SSMSE

Bu hatayı giderebilmek için bu adresten Windows PowerShell 1.0 ı indirip yükleyiniz.

PowerShell yüklemesi bittikten sonra SSMSE kurulumunu tekrar yaparsanız Management Studio sorunsuz olarak yüklenecektir.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


turgay , 4. Eylül 2009, 15:50

Merhaba arkadaşlar,

Sql server da yaptığımız bazı işlemler sırasında kullandığımız tabloları kilitlememiz gerekebilir. Yada kilitli bir tablodan kilidin açılmasını beklemeden sorgu çekmek isteyebiliriz. Bu gibi durumlar için kullanabileceğimiz sql server locking hint leri aşağıdaki gibidir;


HOLDLOCK = Kilitlenme işleminin transaction bitimine kadar sürmesini sağlar. Tablock gibi bazı ifadeler sadece statement bazında kilitleme yapmaktadır. Bunların transaction bazında kilitleme yapması isteniyorsa HOLDLOCK ifadesiyle beraber kullanılması gerekmektedir. HOLDLOCK, SERIALIZABLE ile aynı işi yapmaktadır.

NOLOCK = Kilitli bir tablodan kilidin açılmasını beklemeden kayıt çekmeye yarar. Kirli kayıt (dirty read) alınması mümkündür. Kullanımı Select * from TableName WITH (NOLOCK) şeklindedir. NOLOCK, READUNCOMMITTED ile aynı işi yapmaktadır.

PAGELOCK =  Sayfa bazında kilitleme yapmak için kullanılır.

READCOMMITTED = Kilitli tabloları kullanabilmek için kilidinin açılmasını bekler. SQL Server default udur.

READUNCOMMITTED = NoLock ile aynı işi yapar.

ROWLOCK = Kayıt bazında kilitleme yapmak için kullanılır.

SERIALIZABLE = HoldLock ile aynı işi yapar.

TABLOCK = Tablock ile lock edilen tablolarda read işlemi yapılabilirken insert ve update işlemi yapılamamaktadır. Ayrıca transaction boyutunda çalışabilmesi için holdlock ifadesi ile beraber kullanılması gerekmektedir.

TABLOCKX = Tablockx in tablock dan farkı read işleminide izin vermemesidir. Ayrıca transaction bazında çalışabilmekte dolayısıyla ekstradan holdlock ifadesine gerek kalmamaktadır.

UPDLOCK = Updlock ile locklanmış tablo larda select ve insert işlemleri yapılabilirken, update işlemi yapılamamaktadır. Statement ve transaction bazında çalışır. Transaction bazında çalışması için ayrıca HOLDLOCK ifadesine gerek yoktur.

XLOCK = Tablockx gibidir. Farkı statement da ki bütün işlemlerin bitmesini bekler. En kapsamlı lock işlemidir.

 

Sistemde bulunan kilitli tablolar EXEC sp_lock komutuyla görüntülenebilir.

Burada çıkan kayıtlardan ObjID kısmı kullanılarak tablonun adına erişmek için SELECT object_name(ObjID) komutunu kullanılabilirsiniz.

Bir lock u kill etmek için ise KILL spid ifadesi kullanılabilir.

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Sql Server 2005 ile gelen TRY-CATCH bloğu sayesinde sql cümlesi hata vermesine rağmen işlemlere devam edebilmektedir. Basit olarak syntax ı şu şekildedir;

BEGIN TRY
  --sql işlemleri
END TRY
BEGIN CATCH
  --hatayı yakalama kısmı
END CATCH

Sql işlemleri kısmında bir hata olursa query catch bloğuna atlamakta ama devam etmektedir. Eğer bir hata oluşmazsa catch bloğu pas geçilmektedir.

Bir örnek verelim;

BEGIN TRY
  DECLARE @Sayi int = 5/0
END TRY
BEGIN CATCH
  SELECT
   ERROR_NUMBER()    AS ErrNumber,
   ERROR_SEVERITY()  AS ErrSeverity,
   ERROR_STATE()     AS ErrState,
   ERROR_PROCEDURE() AS ErrProc,
   ERROR_LINE()      AS ErrLine,
   ERROR_MESSAGE()   AS ErrMessage
END CATCH

Bu örnekte 5 sayısı 0 a bölünmeye çalışılıyor. Dolayısıyla 0 a bölme hatası alacağız ve catch bloğuna geçeceğiz. Ama query imiz devam edecektir. Eğer try-catch kullanmasaydık query imiz hata verdiği esnada sonlanacaktı. Yukarıdaki sql cümlesinin çıktısı;

er1

Try-Catch sadece çalışma anındaki hataları yakalamakta sql cümlesinin syntax ında vir hata varsa bunu yakalamamaktadır. Örneğin aşağıdaki sql cümlesinde olmayan bir table a select çekilmeye çalışılıyor. Bu durumda try-catch bloğu işe yaramayacaktır.

BEGIN TRY
   SELECT * FROM OlmayanTablo
END TRY
BEGIN CATCH
   PRINT 'Hata'
END CATCH

er2

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan


Merhaba arkadaşlar.

Bu yazımda SQL Server da bulunan ranking fonksiyonlarını inceleyeceğiz.

ROW_NUMBER() Fonksiyonu

Row number bir sql cümlesi sonucu dönen kayıt listesinde sıralama kolonu yapmak için kullanılır. Örneğin en çok satış yapılan müşterilere 1.2.3 tarzında kayıt numaraları atayabiliriz.

İlk örneğimize bakalım.

SELECT
SalesOrderID,
CustomerID
,ROW_NUMBER() OVER (ORDER BY SalesOrderID) AS RowNumber
FROM Sales.SalesOrderHeader

rn1

Bu sql cümlesi Satışları Satış id lerine göre dizip RowNumber adında bir sıralama kolonu oluşturmaktadır.

Görüldüğü gibi ekstra bir order by ifadesi kullanılmamasına rağmen kayıt listesi SalesOrderID ye göre sıralı gelmektedir.

Biz genede order by ifadesi kullanabiliriz. Bu durumda RowNumber gene kendi içinde SalesOrderID ye göre sıralı gelmekte ama dönen kayıt listesinde karışık görünmektedir. Örneğin;

SELECT
SalesOrderID,
CustomerID
,ROW_NUMBER() OVER (ORDER BY SalesOrderID) AS RowNumber
FROM Sales.SalesOrderHeader
order by CustomerID

rn2

Sql cümlelerinde GROUP BY ifadesi de kullanmamız mümkün. Örneğin En çok satış yapılan müşterileri görmek için aşağıdaki sql cümlesini kullanabiliriz.

SELECT
SalesOrderID,
CustomerID
,ROW_NUMBER() OVER (ORDER BY SalesOrderID) AS RowNumber
FROM Sales.SalesOrderHeader
order by CustomerID

rn3

Burada dikkat edilmesi gereken diğer bir ROW_NUMBER aynı olan değerlere farklı sıra numaraları vermektedir. Yani örneğin 2 müşterinin de toplam alım tutarı aynı olsada bunlara farklı sıra numaraları verilecekti. Aynı sıra numaralarının verilmesi ve daha sonraki kayıtların olması gereken sıra numarasından devam edilmesi isteniyorsa bunun için RANK fonksiyonu kullanılmalıdır.

RANK() Fonksiyonu

Yukarıda da söylediğim gibi RANK fonksiyonun ROW_NUMBER fonksiyonundan tek farkı aynı değerli kayıtlara aynı sıra numarasını vermesidir. Bir örnek üzerinden görecek olursak;

SELECT
SalesOrderID,
CustomerID,
RANK() OVER (ORDER BY CustomerID) AS Rank
FROM Sales.SalesOrderHeader

rn4

Görüldüğü gibi aynı değerleri satırlara aynı satır numaraları verilmiş ve daha sonraki kayıtlar olması gereken sıra numarasından devam etmiştir. Eğer numaraların kaldığı yerden devam edilmesi isteniyorsa bu durumda DENSE_RANK fonksiyonu kullanılmalıdır.

DENSE_RANK() Fonksiyonu

Yukarıda da söylediğim gibi DENSE_RANK fonksiyonunun RANK fonksiyonundan farkı sıra numaralarının olması gereken sıra numarasından değil kaldığı yerden devam etmesidir. Yukarıda RANK için kullandığımız örneği birde DENSE_RANK kullanarak bakalım.

SELECT
SalesOrderID,
CustomerID,
RANK() OVER (ORDER BY CustomerID) AS Rank
FROM Sales.SalesOrderHeader

rn5

NTILE() Fonksiyonu

NTILE fonksiyonu ile verilen numara son kaydın sıra numarası olmak kaydıyla sıralandırma yapılır. Yani örneğin NTILE(100) denirse ilk kaydın numarası 1 son kaydın numarası 100 ve aralardaki kayıtlarda buna göre bölüştürülür. Bir örnekle bakmak gerekirse;

SELECT
SalesOrderID,
CustomerID,
NTILE(100) OVER (ORDER BY CustomerID) AS NTile
FROM Sales.SalesOrderHeader

Şimdide bütün rank fonksiyonlarını tek bir sql cümlesinde kullanalım ve sonuca bakalım.

SELECT
SalesOrderID,
CustomerID,
NTILE(100) OVER (ORDER BY CustomerID) AS NTile
FROM Sales.SalesOrderHeader

rn6

PARTITION BY Kullanımı

Ranking fonksiyonlarında her grubu kendi içinde numaralandırmak istersek PARTITION BY kullanabiliriz. Örneğimize bakalım.

SELECT
SalesOrderID,
SalesPersonID,
OrderDate,
ROW_NUMBER() OVER (PARTITION BY SalesPersonID ORDER BY OrderDate) AS OrderRank
FROM Sales.SalesOrderHeader
WHERE SalesPersonID IS NOT NULL

Bu SQL cümlesi ile her SalesPersonID nin sonuçlarını kendi içerisinde sıralandırabiliriz.

 

Kolay gelsin

Turgay Sahtiyan

Not : Blog haricinde, faydali gördügüm yazilari ve linkleri twitter adresimden paylasiyorum. Beni twitter'da takip etmek için : twitter.com/turgaysahtiyan