2009-02-12

SSIS'te Fuzzy Group Sorunu

Değerli Okuyucular,

Üzerinde SQL Server 2008'ın Standart Edition'ın kurulu olduğu bir sunucum vardı ve üzerinde SSIS paketlerini barındırıp istediğim yerden bu paketlere erişip çalıştırmak istiyordum. Paketi düzgünce SSIS üzerine deploy ettim. Başka sunucumdan bu paketi değişik konfigürasyonlarda denedim. Paketim düzgün çalışmadı ve sürekli hata aldım. Hata package load edememe ile ilgiliydi. Paketi Visual Studio üzerinden düzgün çalıştırabiliyordum. Demek ki server tarafında bir sorun vardı. Paketin içerisinde Fuzzy Group'ta yapılıyordu. Meğer Standart Edition Fuzzy Group'u desteklemiyormuş. Fuzzy Group için Enterprise Edition veya üstü bir sürümü istiyor. Standart Edition'ı Enterprise Edition'a Upgrade ettim sorunum çözüldü.

Bu arada Visual Studio 2005 ile hazırlanan SSIS paketlerin sadece SQL Server 2005 ile; Visual Studio 2008 ile hazırlanan paketlerin sadece SQL Server 2008 ile çalışabildiğini; benzer hatalar ile karşılaşan yada karşılaşacak değerli okuyucularıma hatırlatırım.

2009-02-02

Sysadmin Rolündeki Kullanıcıları Bulma

sysadmin rolündeki kullanıcıları aşağıdaki üç farklı sorgu ile bulabilirsiniz:

  1. SQL Server 2005  ve sonrası için:

    select name
    from sys.syslogins

    where sysadmin=1
    SQL Server 2000 için:

     select name
    from syslogins
    where sysadmin=1
  2. SQL Server 2005 ve sonrası için

    SELECT p.name AS [Name]
    FROM sys.server_principals r INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
    INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id
    WHERE ( r.type ='R' ) and (r.principal_id =3) 
  3.  EXEC sys.sp_helpsrvrolemember 'sysadmin'; -- SQL Server 2005 ve sonrasında çalışır

2009-01-14

2008 Yılı Günlük İstatistikleri

2008 yılında 36.671 tekil kişi günlüğümü ziyaret etti. Bu ziyaretçilerin 34.000'i yurt içinden 2.671'i ise yurt dışından(başta ABD, Almanya, Fransa, İngilitere ve diğer ülkelerden) ulaştı. Toplam 61.872 sayfa görüntülendi. Ziyaretçilerin %78,56'sı Internet Explorer, %19,31'i Firefox üzerinden ulaştı.

Günlüğüme 2008 yılında aşağıdaki adreslerden ulaşıldı:
SıraErişim KaynağıZiyaretYüzde
1.www.google.com/31.27575,92
2.www.mehmetguzel.net/ (direk)7.670 18,62
3.www.ceturk.com/6081,48
4.www.blogger.com/3280,80
5.whos.amung.us214 0,52
6.aydinunlu.blogspot.com700,17
7.2008.blogodulleri.com 680,17
8.www.memikyanik.com/630,15
9.www.search.com/57 0,14
10.www.facebook.com/510,12
11.www.5nk.org/500,12

İlk sırayı geçen sene olduğu gibi büyük bir farkla yine google çekiyor. Google'da bazı anahtar kelimelerle yapılan aramalarda günlüğümün ilk sıralarda gelmesi google'ın günlüğümü kayırması olsa gerek:)

Günlüğüme ziyaretçi gönderen tüm erişim kaynaklarına teşekkürlerimi iletiyorum.

2008-12-27

Bilgisayar Mühendisliği Bölümü Öğrencilerine Tavsiyeler

  • Hangi alanda çalışmak istediğinize karar verin
  • Yazılım geliştirmek istediğiniz platformu seçin
  • İhtiyacınız olan programlama dillerini ve veritabanlarını iyi öğrenin
  • Okul hayatı boyunca proje geliştirin
  • Stajlarınızı iyi şirketlerde yapın
  • Yazın muhakkak yazılım geliştiren şirketlerde ücretli/ücretsiz çalışın
  • Deneyim kazanmak için part-time çalışın.

Şimdilik benim aklıma gelenler bunlar. Yazdıklarıma eklemek isteyen arkadaşların Bilgisayar Mühendisliği bölümünde okuyan arkadaşlara katkılarını bekliyorum.

2008-11-01

NewSequentialID() ve NewID()

  • NewSequentialID() ve NewID() her ikisi de GUID oluşturur.
  • NewID() rastgele GUID oluşturur.
  • NewSequentialID() sıralı GUID oluşturur.
  • NewSequentialID() tabloda sadece default olarak kullanılabilir.
  • NewSequentialID() tahmin edilmesi daha kolaydır(sıralı gittiği için).
  • NewID() rastgele GUID oluşturduğu için güvenlik açısından daha tercih edilir.
  • Özellikle NewSequentialID() alanı clustered index içerisinde kullanılıyorsa NewID()'ye göre daha iyi performans gösterir. Çünkü NewID() rastgele GUID oluşturduğu için her seferinde yeni oluşturulan kayıt için clustered index yerleri değişecektir. Bu da INSERT zamanını uzatır. NewSequentialID() sıralı olduğu için index yeri ardışıl olarak devam edecektir.

2008-10-23

Transaction Blok İçerisindeki Lokal Değişkenlerin Durumu

Bana göre uzun sayılabilecek bir aradan sonra tekrardan sizlerleyiz efendim.

Bu sefer lokal değişkenlerin transaction yapısı içerisindeki durumunu hep birlikte inceleyeceğiz. Öncelikle hatırlayamanlar için transaction yapısını hatırlatalım:

BEGIN TRAN
--Ara işlemleriniz
COMMIT TRAN
--yada
ROLLBACK TRAN

Bu hatırlatmadan sonra asıl konumuz olan lokal değişkenlerin transaction yapısındaki durumuna dönelim. Bunun için birbirine çok benzer iki örnek üzerinde duralım:

Örnek-1:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
ROLLBACK TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Örnek-2:
DECLARE @OnlineZiyaretci INT
SET @OnlineZiyaretci = 10

PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 10

BEGIN TRAN
SET @OnlineZiyaretci = @OnlineZiyaretci + 1
PRINT @OnlineZiyaretci --OnlineZiyaretci değeri 11
COMMIT TRAN

PRINT @OnlineZiyaretci -- Burdaki değeri tahmin edin?
GO

Normal şartlarda bir kayıt yada kayıt kümesi için rollback olduğunda o kayıtlar eski haline döner; commit olduğunda ise transaction blok içerisinde aldığı son değerleri alır .
Eminim bir çoğunuz aynı mantıkla @OnlineZiyaretci değişkeninin örnek-1 için 10; örnek-2 için ise 11 alacağını tahmin etmişsinizdir. Kodu denerseniz tahminizde yanıldığınızı; her iki durumda da @OnlineZiyaretci değerinin 11 olduğunu göreceksiniz. Bunun nedeni lokal değişkenlerin Transaction yapısından etkilenmemeleri!

Bir sonraki yazıda görüşünceye dek bol SQL'li günler diliyorum.

2008-10-21

Yorum Farkı!

Yazının başlığına bakıp Mehmet Barlas ile Emre Kongar'ın sunduğu Yorum Farkı programına değineceğimi zanneden arkadaşları üzmek istemesemde bugün farklı bir Yorum Farkına değineceğim. Bugün daha önceleri almayı düşündüğüm fakat bir firma tarafından alınmış olan yorum.com domain name i satın almış olsaydım altında hangi sub domainleri barındıracağımı düşündüm. İşte kısa bir düşünmeden sonra aklıma gelen sub domainler:

1- ali.yorum.com (Alış, alıcı yorumları)
2- aci.yorum.com (Acıya, bibere dair yorumlar)
3- oku.yorum.com (Okuyucu, kitap yorumları)
4- ucu.yorum.com (Uçuş,uçak yorumları)
5- soru.yorum.com (Soru Merkezi)
6- baki.yorum.com (Bakıcı yorumları)
7- bulu.yorum.com (Arama Merkezi)
8- gulu.yorum.com (Gülmeye Dair)
9- suru.yorum.com (Sürüş, sürücü yorumları)
10-goru.yorum.com (Görmeye dair yorumlar)
11-gezi.yorum.com (Gezi yorumları)
12-kosu.yorum.com (Koşu yorumları)
13-gozlu.yorum.com (Göze dair, gözlüğe dair yorumlar)
14-oynu.yorum.com (Oyun yorumları)
15-sati.yorum.com (Satış, satıcı yorumları)
16-dusunu.yorum.com (Düşünceye dair yorumlar)
17-unutu.yorum.com (Unutkanlık üzerine yorumlar)
18-usutu.yorum.com (Soğuk algınlık ile ilgili yorumlar)
19-yuzu.yorum.com (Yüzmeye dair yorumlar)
20-bili.yorum.com (Bilgiye dair yorumlar)
21-calisi.yorum.com (Çalışma hayatına dair yorumlar)
22-odu.yorum.com (Ödemelere dair yorumlar)

Bakalım sizin aklınıza hangi varyasyonlar gelecek?

2008-09-26

Kadir Gecesi ve Ramazan Bayramı

Kadir Gecenizi ve Ramazan Bayramınızı tebrik ederek; bu mübarek gecenin ve bayramın hayırlara vesile olmasını gücü herşeye Kadir olan Cenab-ı Hak'tan niyaz ederim.

Ya Mütekebbir!
Ben acizim sen Kadir’sin
Ben fakirim sen Rahim’sin
Ben ölüyüm sen Hayy’sın
Ben çaresizim sen Ehad’sin
Ben muhtacım sen Samed’sin
Ben sağırım işiten sensin
Ben körüm gören sensin
Ben dilsizim konuşan sensin
Ben yaratılıyorum yaradan sensin
Ben yokum var eden sensin
Ben hiçim ama emellerim büyüktür
Ben yoksulum ama isteklerim çoktur
Ben isterim çünkü sen büyüksün
Şahit yaz büyüklüğüne bu küçük kalbimi!

2008-08-28

Temporary Table mı Table Variable mı Kullanmalıyız?

Aynı soru defalarca kez farklı yerlerden geldiği için sorunun cevabına değinme ihtiyacı hissettim.
  1. Eğer satır sayımız 100'ün altındaysa genellikle table variable'ı kullanırız. Satır sayısı 100 ün üzerindeyse temporary table kullanılmalıdır.
  2. Index oluşturma ihtiyacımız varsa kesinlikle temporary table kullanmalıyız.

Temporary table ile table variable arasındaki farklardan birisi temporary table sistem veritabanlarından birisi olan tempdb'de tutulur.Table variable ise sistem hafızasında(memory) yer alır.

Burdan hareketle her şeyi temporary table/table variable üzerinde tutup tempdb/memory ı şişirmeyin. Gerekli yerlerde gerektiği kadar kullanalım. Yazılım geliştirme ile uğraşan arkadaşların zamanı dar olduğu çoğunlukla bol temporary table kullanıp bu temporary table'lar üzerinde envai çeşit ekleme/çıkarma/güncelleme yaparlar.

Bir örnek vermek gerekirse: Maas tablosunu tamamını temporary table'a atıp personel maaşını %10 temp table üzerinde uygulayan bir arkadaş SQL kodunu aşağıdaki gibi yapacaktır:

SELECT Sicilno, Ad, Soyad, Ucret INTO #MaasTemp
FROM Maas

Update #MaasTemp
SET ucret=ucret*1.1

Bunun yerine Maas tablosundaki verileri temp tabloya atarken %10 zammı ekleyelim.

SELECT Sicilno, Ad, Soyad, Ucret*1.1 INTO #MaasTemp
FROM Maas

Temporary table için daha söylenecek çok şey var ama şimdilik benden bu kadar. SQL kodumuzu yazarken sistem performansına etkisini de gözönünde bulundurmayı unutmayalım.

Bol SQL'li günler diliyorum.

2008-08-07

SQL Server 2008 RTM Yayınlandı

Uzun bir süredir beklediğimiz SQL Server 2008 RTM sürümü nihayet yayınlandı. En son Şubat 2008'e yetişeceği bildirilmişti fakat Şubat 2008'e yetişemeyince ilerleyen dönemlerde Release olacağı söylenmişti. Bu bildiriden çoğu kişi SQL Server 2008 RTM'in Kasım 2008 gibi çıkacağını bekliyordu. Açıkçası SQL Server 2008 RTM'in çıkması beklediğimden erken oldu.

MSDN üyeliği bulunananlar SQL Server 2008 RTM'i aşağıdaki adresten indirebilir:
http://technet.microsoft.com/tr-tr/subscriptions/default(en-us).aspx

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.