10 Aralık 2006 Pazar

Şaşılacak bir şey değil tabii, Office 2007'de artık word, excel dosyalarınız bile xml olarak kaydediliyor.
 
SQL Server 2005'de de artık execution planları sqlplan uzantısıyla xml olarak kaydetmek mümkün. Böylelikle mesela bu xml dosyasını tartışmak üzere bir arkadaşınıza mail atabilir, ya da bir indexten önceki ve sonraki execution planları arşivleyebilirsiniz. sqlplan uzantılı bu dosyaları SQL Server Management Studio'da istediğiniz zaman açıp -sorgu içinde geçen tablolara ya da veritabanına ihtiyaç olmaksızın- inceleyebilirsiniz.
 
Ne diyim, güzel olmuş! : )
 
Not: Üstelik bilgi zenginliği açısından xml olarak alınan planlar, en iyileri. Örneğin, planın büyüklüğünü (CachedPlanSize), planın hangi parametre değerleri için optimize edildiği (!) (ParameterList) gibi bilgileri sadece xml olarak alınan planlar veriyor. (SET SHOWPLAN_XML ON, SET STATISTICS XML ON... İlki tahmin, ikincisi gerçekleşeni almak için.)
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com
 
Şaşılacak bir şey değil tabii, Office 2007'de artık word, excel dosyalarınız bile xml olarak kaydediliyor.
 
SQL Server 2005'de de artık execution planları sqlplan uzantısıyla xml olarak kaydetmek mümkün. Böylelikle mesela bu xml dosyasını tartışmak üzere bir arkadaşınıza mail atabilir, ya da bir indexten önceki ve sonraki execution planları arşivleyebilirsiniz. sqlplan uzantılı bu dosyaları SQL Server Management Studio'da istediğiniz zaman açıp -sorgu içinde geçen tablolara ya da veritabanına ihtiyaç olmaksızın- inceleyebilirsiniz.
 
Ne diyim, güzel olmuş! : )
 
Not: Üstelik bilgi zenginliği açısından xml olarak alınan planlar, en iyileri. Örneğin, planın büyüklüğünü (CachedPlanSize), planın hangi parametre değerleri için optimize edildiği (!) (ParameterList) gibi bilgileri sadece xml olarak alınan planlar veriyor. (SET SHOWPLAN_XML ON, SET STATISTICS XML ON... İlki tahmin, ikincisi gerçekleşeni almak için.)
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com
 
Elinizin altında bir AdventureWorks veritabanı varsa, aşağıdaki iki sorgudan oluşan scripti çalıştırın. Ama çalıştırmadan önce, SQL Server Management Studio'nun sorgu ekranında "include actual execution plan" düğmesini tıklayın. Böylece sorgu sonucunuzun yanısıra bir sekmede execution plan görüntülenecektir. İşte script:
 

use AdventureWorks

SELECT C.CustomerID, COUNT(O.SalesOrderID) AS NumOrders

FROM Sales.Customer AS C

LEFT OUTER JOIN Sales.SalesOrderHeader AS O

ON C.CustomerID = O.CustomerID

WHERE C.Territoryid = 10

GROUP BY C.CustomerID

HAVING COUNT(O.SalesOrderID) > 5

ORDER BY NumOrders;

 

use AdventureWorks

SELECT C.CustomerID, COUNT(O.SalesOrderID) AS NumOrders

FROM Sales.Customer AS C

LEFT OUTER JOIN Sales.SalesOrderHeader AS O

ON C.CustomerID = O.CustomerID

WHERE C.Territoryid = 10 and (O.SalesOrderID > 0 or O.SalesOrderID <= 0)

GROUP BY C.CustomerID

HAVING COUNT(O.SalesOrderID) > 5

ORDER BY NumOrders;

İki sorgu, where satırındaki and (O.SalesOrderID > 0 or O.SalesOrderID <= 0) koşulu hariç tamamen aynı.

Execution planları incelediniz mi? Aralarındaki en önemli fark, ilk sorguda outer join yapılırken ikincide inner join yapılmış olması.

Where'e eklediğiniz koşul, sağ tablodan null değer dönmesini engelliyor. Left outer join'le inner joinin tek farkı ise, sağ tabloda karşığılı null olan satırların da sonuca dahil olmasıdır. Yani ikinci sorguda siz outer yazsanız da, pratikte bir inner join istemiş oluyorsunuz. Siz bunun farkında değilken, SQL Server fark edip gerekli optimizasyonu yapıyor.

Aferin sana zeki şey! : )

Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com

 
Veritabanı ile uğraşıyorsanız ve küme bazlı işlemlerle satır bazlı işlemler üzerine (ya da set based operations vs cursors) kafanız karışmışsa, olayı gözünüzde tam canlandıramıyorsanız, elinizin altındaki bir veritabanında şu sorguyu çalıştırın, hatta çalıştırmadan önce düşünün ne olacağını, tahminde bulunun, sonra çalıştırıp görün:
 

Create table islemlerKumeli (TId int identity(1,1), Turkce char(5), English char(5))

insert into islemlerKumeli (Turkce, English) values ('bir', 'one')

insert into islemlerKumeli (Turkce, English) values ('iki', 'two')

insert into islemlerKumeli (Turkce, English) values ('üç', 'three')

select * from islemlerKumeli

update islemlerKumeli set Turkce = English, English = Turkce

select * from islemlerKumeli

 

Nasıl? İlginç, değil mi?

 

Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com

 

Diyelim ki işlemleri tuttuğunuz bir tablonuz var SQL Server'da. Bir sorguyla her yılın işlem sayısının toplamını, bu işlemlerin gerçekleştiği yılı ve vergilendirilecekleri yılı vermeniz gerekiyor. Vergilendirme yılı da her zaman işlem yılını takip eden yıl.

Bu durumda, şu sorgu işinizi görecektir:

SELECT Count(*), year(transactiondate) as [İşlem Yılı], year(transactiondate) + 1 as [vergilendirme Yılı]

from production.transactionhistory

group by year(transactiondate)

Ama eğer SQL Server 2005 kullanıyorsanız! SQL Server 2000, gruplanmış bir kolon üzerinde işlem yapmanıza izin vermez. [year(transactiondate) + 1]

Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com

 
Bir veritabanı tasarlıyorsanız, değerini bilemediğiniz hücrelerin nasıl davranacağına da kafa yormanız gerekir.
 
Normalde yazılımda, bir mantık ifadesinin karşılığı True ya da False'tur. Oysa veritabanında durum böyle olmaz. True, False yanısıra bir de Unknown durumu vardır. Doğru, yanlış, bilinmeyen...
 
Bir sınıftaki öğrencilerin boy bilgilerini tutan basit bir tablo düşünün. Öğrencilerin boylarını ölçüp tabloya giriyorsunuz ama ölçümü yaptığınız gün iki öğrenci yoktu. Bu durumda boylarına 0 girerseniz, olmaz. Bir değer giremeyeceğiniz için bu kolonda NULL'e izin vermeniz gerekecek. Yani bilinmiyor demiş olacaksınız.
 
Ne yapmış oluyorsunuz?
 
Bu iki kaçak öğrenciden birinin boyunu sınıftan bir başkasıyla karşılaştırırsanız, sonuç NULL döner. (Veritabanı ANSI opsiyonlarında değişiklik yapılmışsa geri dönüşünde farklılıklar olabilir, hata vermek ya da NULL dönmek gibi.)
 
Peki kaçak iki öğrencinin boyunu birbirleriyle karşılaştırırsanız? Yine NULL döner. Bu da beklenen bir şey. Ama ya boyu 170'den fazla olanları, bir de 170 ya da altı olanları iki ayrı sorguda sorgularsanız ne olacak? İki kaçak öğrencimizin sonucu her iki sorguda da yer almaz. Sadece boyu bilinenleri esas alır iki sorgunuz. Çünkü NULL hiçbir şeyden büyük de değildir, küçük de değildir, hiçbir şeye eşit de değildir.
 
Peki, kolonda bir CHECK kısıtınız varsa ne olacak? Bu durumda da (eğer kolonda NULL'e izin verdiyseniz) NULL'le karşılaştırma doğru dönecek.
 
Kaçak iki öğrencinin boylarının birbirine eşitliğini bir WHERE koşulunda test edersek, bilinmez değil FALSE gibi işlem görür. Oysa boy kolonunda bir unique index oluşturursanız, bu sefer de NULL bir değermiş ve iki satırda NULL olması birbirlerine eşitmiş gibi yorumlanır ve birden fazla NULL değere izin verilmez.
 
Kafanız karıştı değil mi? Amaç buydu zaten. NULL karışık bir konudur. Kurallarını öğrenirsiniz, biraz alışınca bunlar doğal da gelir, ama gerçek hayatta durum asıl karışıklığıyla ortaya çıkar. Milyonlarca satırınız varsa, bunlarla ilgili binlerce satır TSQL kodunuz çeşitli yerlerde çalışıyorsa, NULL'leri nerede nasıl ele aldığınızı hatırlamak ve takip etmek son derece zorlaşabilir.
 
NULL'lere dikkat edin! Dikkat etmezseniz, ısırırlar!
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com
 

1991?de dünyanın en ?süper bilgisayarı? 40 milyon dolarlık bir maliyete sahipti. 7 yıl geçip 1998?e geldiğimizde aynı performansı 1 milyon dolarlık bir süper bilgisayarla elde edebiliyordunuz. 2005?te ise, 4 düğümlü bir clusterla aynı performansı 4 bin doların altına satın alabiliyordunuz.

Donanım yeteneklerinin gelişmesi ve ucuzlamasıyla birlikte kullanılan araçların ucuzlaşıp yaygınlaşması ve iş zekası alanındaki bilgi birikiminin artmasıyla, iş zekası uygulamaları artamaya başladı. Öyle görünüyor ki, çok yaygınlaşması için aşması gereken kritik eşik de yakınlarda. Gartner, yaptığı araştırmaların sonucunda, geçen seneye kadar en fazla yatırımı güvenlik alanına yapan IT yöneticilerinin bu seneden itibaren en çok İş Zekası uygulamalarına yatırım yapacaklarını belirttiklerini açıkladı.

Bir iş zekası çözümünü hayata geçirebilmek, standart bir veritabanı uygulamasını kullanıma almaktan çok daha zor. Kurumun en üst seviyelerinden destek görmeyen iş zekası uygulamaları büyük sıkıntılar yaşıyorlar. Ama öte yandan bütüncül bir şekilde iş zekası kullanmaya başlayan kurumların ve sektörlerin maliyetleri düşüyor, satış olasılıkları artıyor. Perakende, ulaşım, telekomünikasyon gibi öncü alanlarda, iş zekası uygulamalarını hayata geçiren kurumlar, günlük yaşantımızı değiştiren gelişmeler sağlıyorlar. 

İyi haber, Microsoft?un İş Zekası alanında yapmaya başladığı atılımlarla, orta ölçekli kurumların da bu teknolojinin nimetlerinden makul yatırımlarla yararlanmaya başlayabileceği.

Bir iş zekası çözümü oluşturmak için kullanılması gereken temel hizmetlerden olan OLAP sistemi ve ELT sistemi, Microsoft SQL Server?la birlikte ücretsiz olarak sunuluyor Microsoft tarafından. OLAP için Microsoft SQL Server Analysis Services ve ELT (Extract Transform Load) için SQL Server Integration Services. 

SQL Server 2000?de bile OLAP pazarında önemli bir pazar payı yakalayan Microsoft, bu alanda büyümeye devam ediyor. Hem Gartner hem de International Data Corporation?a (IDC) göre, Microsoft İş Zekası alanında rakiplerinden çok daha hızlı büyüyor. Gartner?a göre 2005?de Microsoft?un sağladığı büyüme % 35.9. Üstelik Microsoft?un çok iddialı ürünü SQL Server 2005 Aralık?a kadar piyasaya sürülmemişti. IDC?nin verilerine göre aynı dönemde Microsoft?un bu alandaki büyüme oranı % 25.5. Endüstrinin genel büyüme oranı ise % 11.5.

Microsoft?un bu alanda iddialı olduğunun bir başka göstergesi ise, istemci uygulamalarında önde gelen iş ortağı ProClarity?yi satın almış olması. Yakın zamanda istemci tarafıyla ilgili olarak da kendi ürünüyle piyasada olacak Microsoft. Excel ise zaten Microsoft?un OLAP küplerine bağlanarak analiz yapmada çok yoğun olarak kullanılan bir aracı.

Microsoft şu an sektörde dördüncü. Onun önünde yer alan üç kurum ise, Business Objects, SAS ve Cognos.

Microsoft seçeneğinin en önemli iki avantajı var:

-         Lisans ücretlerinin ve ileride muhtemelen iş yapabilir nitelikte uzmanların daha uygun maliyette olması.

-         Son derece kullanıcı dostu araçları olması ve bunların altyapıda yer alan SQL Server ve diğer Microsoft araçları ile birlikte iyi çalışması.

Bu araçlardan birisi olan SQL Server Integration Services?tan biraz bahsedelim. SSIS, SQL 2000?de kullanılan DTS?in yerine yazılmış bir bileşen. Yeni versiyonu diyemiyorum çünkü gerçekten baştan inşa edilmiş.

DTS, SQL Server kullanıcılarının % 70?i tarafından kullanılan bir araçtı. SSIS ise DTS?den çok daha başarılı.

En önemli özelliklerinden birisi, SSIS?in bellek kullanımının çok iyileştirilmiş olması. Pek çok işlemi, bellekte, data transformasyon işlemlerini ard arda değil bir akış şeklinde gerçekleştiriyor. Üstelik daha önce kolay yapılamayan pek çok şey, artık hazır bileşenler halinde sunuluyor. DTS kullanırken script yazarak yaptığınız pek çok şeyi, artık sadece görsel bileşenler kullanıp bunların özelliklerini ayarlayarak kotarabiliyorsunuz.

SSIS?le geliştiribileceğiniz çözümlerle büyük işler yapabilirsiniz. Biz çok karmaşık konulara girmeden, sadece hazır gelen bileşenlerle neleri kolayca yapabileceğinize birkaç örnek verelim.

Audit görevini kullanarak, veri akışınıza yaygın olarak eklediğiniz bazı bilgileri kolayca ekleyebilirsiniz.

Conditional split görevini kullanarak, bellekteki bir veri akışını, belirlediğiniz bir koşula göre farklı akışlara kolaylıkla bölebilirsiniz. Bunun için kod yazmanıza gerek yok. Sadece bölmenin mantığını ifade eden deyimi yazmanız gerekecek.

Import column ve export column görevlerini kullanarak dosyalarınızı, resimlerinizi kolaylıkla dosya sisteminden veritabanına ya da veritabanından dosya sistemine aktarabilirsiniz.

Fuzzy Lookup görevini kullanarak mesela il isimlerini koyduğunuz referans bir tablo yardımıyla, milyonlarca satırlık bir akışınızdaki il alanında girilmiş değerleri otomatik kontrol ettirebilirsiniz. İzmir yerine yazılmış Izmir?leri, İzmır?leri, Izmır?leri, İsmir?leri sizin için ayıklamak gibi, konuyla uğraşmış olanların kulağına inanılmaz tatlı gelecek bir işi kolaylıkla yapabilirsiniz.

Fuzzy Grouping görevini kullanarak tanımadığınız bir veri akışındaki bir kolonun olası değer seçeneklerinin neler olduğunu gruplatabilirsiniz. Basit bir distinct sorgusundan öte, birbirine yakın olan yanlış girilmiş ifadeleri sizin için gruplayıp öneride bulunacaktır.

Pivot ve unpivot görevlerini kullanarak denormalize edilmiş verileri normalize edebilir, ya da normalize edilmiş verileri denormalize edebilirsiniz.

Lookup görevini kullanarak, referans tablolarına bağlantı kurup buradan ilgili bir ya da birkaç kolonu veri akışınıza katabilirsiniz.

Sort görevini kullanarak bellekte sıralama yaptırabilirsiniz. 

Slowly Changing Dimension görevini ve sihirbazını kullanarak, tarihçesini tutmanız gereken verileri yönetebilirsiniz.

Üstelik tüm bunlar, seçeneklerden sadece bazıları...

SQL Server lisansınız varsa, SSIS bileşenini inceleyin. Kesin bir işinize yarayacaktır.

DTS paketleriniz varsa, SSIS?in temel yaklaşımını öğrendikten sonra, bunları SSIS?te yeniden planlayın. Paketlerinizin ne kadar basitleştiğini ve hızlandığını görüp şaşıracaksınız.

Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com

 
Bazı kitapların tercümelerini okumak çok zor oluyor. İngilizcesinden okusam daha iyi anlayacağım kitaplar var.
 
Tabii ki bunun böyle olmaması gerekir. Ama kitabın ilgili olduğu konuyu çevirmenden daha iyi biliyorsanız, çevirmenin yaptığı iş en azından konuyla ilgili bir editörün elinden geçmediyse, bazı kitapları okumak acı verici olabiliyor. Robert Slater'ın yazdığı Microsoft'un Yeniden Doğuşu'nu okurken de bunları hissettim. Büyük Mavi'yi Kurtarırken adlı kitabını, Türkçe çevirisinden çok beğenerek okumuştum. Slater'ın tarzının çok akıcı olduğunu biliyorum. Üstelik bu yeni kitabının konusu da benim için son derece ilgi çekiciydi. Çok yakından ilgili olduğum bir kurum olan Microsoft'un tekelleşme odaklı davası sürecinde ve sonrasında yaşananları anlatıyordu. Ama ah o kelimeler...
 
Kod yazmak, şifrelemek olarak çevrilemez. İngilizce'deki code ve coding, Türkçe'de kod ve kod yazmak olarak çevrilebilir. Türkçe'de kod kelimesinin kazanmış olduğu şifreyi çağrıştıran anlam yüzünden, Bill Gates'in en son 1983'te şifreleme yaptığını yazan bir cümle kuruyorsanız, siz bu alanda çeviri yapacak yeterlilikte değilsiniz demektir. Ya da en azından çevirinizin konunun uzmanı birinin elinden geçmesi gerekir.
 
Kitap çok güzel, çeviri berbat! Çeviriyi yapan kişini hakkını yemeyeyim. Bence burada asıl sorumlu yayınevi... Ya da editörlük kurumunun yurdumuzda yeterince gelişmemiş olması.
 
Bu kitapta geçmese de bağlantılı ve yaygın olarak kullanılan bir başka hatalı kelime geldi aklıma: Parola yerine şifre. Yazılımdaki kod yerine şifre kullanımı hatası gibi, kullanıcı ismi ve paroladaki parola yerine de şifre kullanılıyordu bir dönem. Sanırım bu yanlışlık artık bir hayli azaldı.
 
Öldük size kaldı herşey başlıklı bir şiirim vardı, henüz yayınlamadım. Orada iki mısra şöyle:
"Kelimeler, kelimeler hele de ah illa kelimeler
Öldük size kaldı herşey"
 
Kelimelerimiz olmasa naparız? Onların böyle yanlış şekillerde, yakışmayan biçimlerde, kafaları gözleri yarılmış olarak kullanılmalarını görmek ne kadar acı!
 
Öte yandan ne güzel bir nehir gibi akan cümleler içinde onların sesini dinlemek.
 
Sizi seviyorum kelimelerim. Ve ey dilim, Türkçem, belki en çok da seni!
 
Kelimeler, kelimeler, hele de ah illa kelimeler...
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com
 
İş zekası çözümleri içinde belki en az anlaşılanı veri madenciliği. Çokça kişinin dilinde olan ama öyle çok fazla da anlaşılmayan bir konu.
 
Temel zorluklarından birisi, farklı disiplinlerle ilgili yönleri bulunması.
 
Veri madenciliğini gerçek anlamda yapabilmek için devasa veri havuzlarını değerlendirebilecek işleme ve saklama kapasiteleri gerekiyor. Bu tür kapasiteler yeni yeni yaygınlaşabilecek fiyat seviyelerine inmiş durumda.
 
Öte yandan çalışacak uygulamaların gerekli yetenekleri kazanması da zamanla mümkün oluyor.
 
Hem araç gereç hem de teknik donanımın yeni yeni yaygınlaşmaya başlaması yüzünden, veri madenciliğiyle ilgililenme lüksüne yakın zamana kadar çok az kişi sahip oldu.
 
Ama araç gereç ve imkan bolluğu da veri madenciliği için yeterli değil. İş zekasını kurgulamak zor bir iş olsa da veri madenciliğine göre nispeten daha kolay. Çünkü veri madenciliğinde teknik yeterlilikten başka yaratıcı ve bilimsel disipline sahip zeka da gerekiyor. Devasa veri havuzlarında desenler tespit edebilmek için, kaba güç analizlerine başvurmak akıllıca bir yöntem değil. Bunun yerine, daha küçük analizlerle hipotezler geliştirmek ve bu hipotezleri test etmek gerekiyor.
 
Yaratıcı veri madenciliğine örnekler açısından Malcolm Gladwell'in 'Blink' adlı kitabını okuyabilirsiniz. İşin ilginci, bu kitapta temel yaklaşım, anlık karar verebilme yeteneği üzerine kurgulanmış. Kitapta anlatılan pekçok vaka temelde veri madenciliğinin başarılı örnekleri olarak da okunabilir. Ama bu paralel okuma, yazarın asıl vurgulamak istediği kanal değil. İş zekası konusuna özel ilgim olduğu halde, ben de okurken veri madenciliği örnekleri okuyor olduğumu algılayamadım aslında. Ama kitabı bitirdikten birkaç hafta sonra, arka planda bilinç altım bu ilişkiyi kurdu.
 
Göğüs ağrılarından şikayetçi bir hastanın, kalp krizi geçiriyor ya da geçirmek üzere olduğunun anlaşılmasına ilişkin geliştirilmiş bir test mekanizmasını anlatıyor bir bölüm. Onlarca yıllık deneyime sahip doktorların birinci elden teşhislerine göre daha başarılı sonuçlar vermesi çok ilginç. Çok az veriyi inceleyen bu test mekanizması, tam da bahsettiğimiz gibi çarpıcı bir zekanın oluşturduğu bir hipotezin uzunca süre denenmesi sonucu ortaya çıkmış. Yani az veri ile önce bir hipotez geliştirilmiş, sonra da bu hipotez daha geniş veri havuzunda uzunca süre çalıştırılarak geçerliliği ispatlanmış.
 
Bir diğer örnek de, 20 dakikalık sıradan konular üzerinde eşler arasında yapılan konuşmaların analizi ile, evliliklerinin geleceğinin tahmin edilmesine ilişkin. Burada da görece kısacık bir süre değerlendiriliyor ama arkada yıllara dayanan bir veri madenciliği çalışması ve bunun sonucunda oluşturulmuş bir desen analizi var.
 
Veri madenciliği ile ilgileniyorsanız, bu kitabı okuyun. Ama yazara kaptırmayın kendinizi (çok akıcı bir kitap yazmış), veri madenciliği bakış açısıyla hareket ettiğinizi unutmadan okuyun.
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com
 
Oracle kökenli olup şimdi SQL Server yöneten ya da SQL Server da yöneten DBA'ler SQL Server 2005'le gelen bu iki özelliğe bayılacak.
 
READ_COMMITTED_SNAPSHOT bir veritabanı opsiyonu. Seçilince tüm veritabanında geçerli oluyor. Veritabanında çalışan SELECT'lerin paylaşılan kilit koymamasını, bunun yerine çalıştırıldıkları andaki satır bilgilerini satır versiyonlarına güvenerek okumasını sağlıyor.
 
SELECT'ler paylaşılan kilit koymadıkları için UPDATE'ler onları beklemek zorunda kalmıyor. SELECT'ler de okudukları datanın tutarlı olması için değiştirilmiş satırların kendileri başladığı handaki orijinal halini okuyorlar. Performans açısından hoş, ama bence daha önemlisi, Oracle kökenli DBA ya da programcıların alışık olduğu bir davranış modelini SQL Server tarafında gerçeklemesi.
 
SNAPSHOT ISOLATION da aynı çalışma şeklini transaction bazında getiriyor. Transaction isolation levelını böyle seçerseniz, ilgili transaction içinde SELECT'lerin davranışı tarif ettiğim şekilde gerçekleşiyor.
 
Oracle kökenliler konuyu hemen anlamıştır. SQL Server kökenli olup konuyu karışık bulanlar daha detaylı açıklama isterlerse yorum ekleyerek sorularını sorabilirler.
 
Not: SNAPSHOT ISOLATION kullandığınızda, SELECT'lerin gördüğü veri versiyonu kendilerinin çalıştırıldıkları an değil, transactionın ilk başladığı andır.
 
Kategori bazlı olarak tüm yazılarımı içeren blog'um için:
http://mustafaacungil.spaces.live.com