5 Aralık 2008 Cuma

Rastgele Veri Seçimi (TABLESAMPLE)

Bir tablodan rastgele veri seçmek için FROM' dan sonra TABLESAMPLE komutunun kullanılabileceğini biliyor muydunuz?

Örneğin:
SELECT * FROM Sales.SalesOrderDetail TABLESAMPLE SYSTEM (2 PERCENT)

şeklinde kullanabilirsiniz. Yalnız şunu hemen belirteyim ki bu komut oldukça istikrarsızdır. Yani siz, tablodaki kayıtların %2' sini getirmesini belirtirsiniz, ama dönecek kayıtların sayısı oldukça değişken olacaktır. Bu komutu şu şekilde de kullanabilirsiniz:

SELECT * FROM Sales.SalesOrderDetail TABLESAMPLE SYSTEM (500 rows)

ama kesinlikle net olarak 500 kayıt döndürmeyecek, 800 ile 300 arası kayıt döndürecektir.

Bir başka kullanılışı ise şöyle:

SELECT * FROM Sales.SalesOrderDetail TABLESAMPLE SYSTEM (500 rows) REPEATABLE (123456)


Bu kullanımda REPEATABLE seçeneğinde bir "bigint" değeri belirtip, her seferinde aynı sonucun dönmesini sağlayabilirsiniz, ta ki veri değişmediği sürece.

Eğer bir INSERT, UPDATE, DELETE veya Index Rebuilding gibi işlemler yapılırsa, REPEATABLE' da verdiğiniz değer aynı bile olsa farklı bir set dönecektir.

"Performance counter registry hive consistency"

HATA MESAJI:
"Performance counter registry hive consistency"

AÇIKLAMA:
SQL Server 2008 Setup' ında böyle bir mesaj alabilirsiniz.

ÇÖZÜM:
Bu sorun, bazı Kayıt Defteri (Registry) değerlerinin tutarsızlığından kaynaklanıyor. Sorunun çözümünü aşağıda adresini verdiğim sayfada bulabilirsiniz:

http://www.ferventcoder.com/archive/2008/08/10/possible-performance-counter-corruption-or-performance-counters-are-just-disabled.aspx

"The query uses non-ANSI outer join operators ("*=" or "=*"). To run this query without modification, please set the compatibility level for current d

HATA MESAJI:
"The query uses non-ANSI outer join operators ("*=" or "=*"). To run this query without modification, please set the compatibility level for current database to 80 or lower, using stored procedure sp_dbcmptlevel. It is strongly recommended to rewrite the query using ANSI outer join operators (LEFT OUTER JOIN, RIGHT OUTER JOIN). In the future versions of SQL Server, non-ANSI join operators will not be supported even in backward-compatibility modes."

AÇIKLAMA:
SQL Server 2005 veya daha üst versiyonlarında böyle bir hata mesajı ile karşılaşabilirsiniz.

Aslında hata mesajı, hatanın nedenini ve çözümünü açıklayıcıdır. Fakat İngilizce ile sorunu olan arkadaşlar için yine de bu hatayı belgelemek istedim.

Sorun, "*=" ve "=*" operatörlerinin SQL Server 2005 ve daha üstü versiyonlarda artık desteklenmediğinden kaynaklanmaktadır. Bu desteğin çekileceği uzun zaman boyunca uzmanlar ve Microsoft tarafından belirtilmişti.

ÇÖZÜM:
Şayet SQL Server 2000 ve daha öncesinden gelen View, Stored Procedure veya diğer kodlarınızın içinde bulunan bu JOIN operatörlerini değiştirmediyseniz, aşağıda belirtildiği gibi değişiklik yapmanız sorunu çözecektir.

"*=" JOIN operatörü yerine "LEFT JOIN",
"=*" JOIN operatörü yerine de "RIGHT JOIN" komutlarını kullanabilirsiniz.

Eskisi:
USE AdventureWorks
GO
SELECT * FROM Sales.salesPerson AS salesPerson, Sales.salesTerritory AS salesTerritory
WHERE salesPerson.territoryId *= salesTerritory.territoryId

Yenisi:
SELECT * FROM Sales.salesPerson AS salesPerson
LEFT OUTER JOIN sales.salesTerritory AS salesTerritory
ON salesPerson.territoryId = salesTerritory.territoryId

"Can't find Registry key : SOFTWARE\Microsoft\MSDTC"

HATA MESAJI:
"Can't find Registry key : SOFTWARE\Microsoft\MSDTC"

AÇIKLAMA:
SQL Server 2005 Setup' ında böyle bir hata mesajıyla karşılaşabilirsiniz.

Bir SQL Server 2008 Instance' ı yüklerken bu hata ile karşılaşabilirsiniz. Sorunun nedeni ise, hata mesajında da belirtildiği gibi MSDTC anahtarının Kayıt Defterinde (Registry) bulunmamasıdır.

ÇÖZÜM:
Bu eksikliklerin giderilmesi veya MSDTC' nin yüklenmesi için Komut İstemcisinde aşağdaki komutları sırasıyla ve tek tek çalıştırın.

net stop msdtc
msdtc -uninstall
msdtc -install
net start msdtc

"Increment the Counter Registry Key for Setup in SQL Server 2005"

HATA MESAJI:
"Increment the Counter Registry Key for Setup in SQL Server 2005"

AÇIKLAMA:
SQL Server 2005 Setup' ında böyle bir hata mesajıyla karşılaşabilirsiniz.

ÇÖZÜM:
Bu sorunun çözülmesi için Komut İstemcisinden aşağıdaki komutu çalıştırın.

lodctr /R:PerfStringBackup.INI

"See Object Explorer Details for objects in this folder"

BİLGİ:
"See Object Explorer Details for objects in this folder"

AÇIKLAMA:
SQL Server 2008' in SQL Server Management Studio aracını kullanarak, Object Explorer' daki 2500' den fazla öğe içeren herhangi bir düğümü\klasörü genişlettiğinizde bu mesaj ile karşılaşabilirsiniz.

Aslında bu bir hata değil, tasarımdan kaynaklanan bir sınırlama. Bu sınırlamanın nedeni ise Windows XP ve Windows Server 2003' teki Tree View kontrolündeki bir hata (BUG).

Bu sınırlamayı kaldıran herhangi bir yama veya çözüm şu anda yok.

Bununla birlikte, alternatif olarak (ilgili mesajda da belirtildiği üzere) Object Explorer yerine Object Explorer Details penceresini kullanabilirsiniz veya ilgilendiğiniz öğelerin listelenmesi için süzgeci kullanabilirsiniz.

Süzgeci kullanabilmek için, genişlettiğiniz düğümün üzerinde (misal olarak eğer tabloları genişletmek istiyorsanız bu düğümün adı "Tables" olacaktır) farenin sağ tuşuna tıklayın ve açılan menüden "Filter -> Filter Settins" öğesini seçin. Açılan süzgeç ayarları penceresinde ilgili süzme ayarlarını yapıp (2500 öğeyi geçmeyecek kadar) sadece ilgilendiğiniz öğeleri listeleyebilirsiniz.

Konuyla ilgili geribildirimi ve bu geribildirime Microsoft' tan gelen cevabı okumak için şu bağlantıyı takip edin:
https://connect.microsoft.com/SQLServer/feedback/Viewfeedback.aspx?FeedbackID=362453