7 Nisan 2009 Salı

SSMS: Connect to Server - Sunucu Listesi

Merhaba arkadaşlar,

SQL Server Management Studio 2005 ve 2008' i ilk açtığınızda "Connect to Server" başlıklı bir pencere açılır ve bu pencerede, önceden bağlantı yaptığımız sunuculara ait bilgiler vardır. İşte bu bilgiler, bir dosyada tutulur ve SSMS açılırken bu dosya okunur ve yüklenir. Bazen, "Connect to Server" penceresindeli sunucu listesinde bulunan bazı sunucuları listeden çıkarmak isteyebilirsiniz; fakat bu mümkün değil, en azından henüz benim bildiğim bir yöntem yok.

Ama bu, listeyi sıfırlayamayacağınız anlamına da gelmiyor. Yani ya hep ya hiç... Eğer listedeki tüm sunucu bilgilerini silmek isterseniz, o zaman SSMS versiyonuna göre aşağıdaki yöntemleri kullanın.

Not:
Burada anlattıklarım Microsoft tarafından dokümante edilmiş bilgiler değildir. Henüz herhangi bir zararını görmesem de uyarmak isterim ki, bu dosyalarda yapılacak değişikliklerin beklenmedik sonuçları olabilir.

SQL Server Management Studio 2008 için:

"C:\Users\\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell" klasöründeki "SqlStudio.bin" isimli dosyanın ismini değiştirin. Silmeyin, sadece ismini değiştirin; çünkü herhangi bir nedenden dolayı bu dosyaya veya içindeki bilgilere daha sonra tekrar gereksinim duyabilirsiniz. SSMS 2008, tekrar açıldığında bu dosyayı sıfırdan otomatik olarak oluşturacaktır.

SQL Server Management Studio 2005 için:

"C:\Users\\AppData\Roaming\Microsoft\Microsoft SQL Server\90\Tools\Shell" klasöründeki "mru.dat" dosyası için da aynen "SqlStudio.bin" dosyası için yaptıklarınızı yapıp, SSMS 2005 için aynı sonucu alabilirsiniz.

Not:
Burada verdiğim yollar Windows Vista için geçerlidir, kullandığınız işletim sistemine göre yollar farklılıklar gösterebilir; fakat dosya isimleri aynı olacaktır. Yapacağınız değişiklikleri bu doğrultuda yapmanızı öneririm.


Ekrem Önsoy

Windows XP SP3: MSXML Sorunu

Merhaba arkadaşlar,

Windows XP SP3 yükledikten sonra, SQL Server yüklerken MSXML ile ilgili bazı sorunlarla karşılaşabilirsiniz. Bu konuda çok kişinin sorun yaşadığını gördüğüm için, bu sorunu ve geçici çözümünü kayıt altına aldım. "Geçici" diyorum, çünkü henüz bu konuda Microsoft' tan yayınlanmış bir yama veya FIX yok; bununla birlikte, bildiğim kadarıyla konu üstünde çalışılıyor.

Sorun özetle, Windows takımının, MSXML dosyalarını Windows' un korunan sistem dosyaları kategorisine sokmalarından kaynaklanıyor. Windows XP' ye SP3 yüklendikten sonra MSXML' in versiyonu 6.0 olarak yükseltiliyor, fakat SQL Server 2005 kurmaya çalıştığınızda ise yüklenmeye çalışılan MSXML versiyonu 4.0. Windows XP SP3 yüklendikten sonra MSXML dosyaları da koruma altına alındığı için SQL Server 2005' in yüklenmesi sırasında MSXML ile ilgili sorunlarla karşılaşılıyor.

Bu sorundan kurtulmak için aşağıdaki yöntemleri uygulayabilirsiniz:

- Windows Installer Cleanup Wizard' ı indirin,
- Uygulamayı çalıştırdıktan sonra, listeden MSXML 6' yı bulun ve kaldırın,
- SQL Server 2005 (veya daha üstü bir versiyonu) yüklemeyi tekrar deneyin.

Daha sonra MSXML 6.0' ı Microsoft Download sitesinden indirip tekrar kurmanız iyi olacaktır.


Ekrem Önsoy
HATA MESAJI:
"The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON."

AÇIKLAMA:
Bir Login ile SQL Server Instance' ınıza giriş yaparken şifrenizin zamanının dolduğu ve değiştirilmesi hakkında bir mesaj alabilirsiniz. Eğer böyle bir uyarı mesajı alıyorsanız, o zaman bu, ilgili Login' in "CHECK_EXPIRATION" özelliğinin etkin olduğu anlamına gelir.

Şifrenizin süresi dolduğunda ise, şifre muhakkak güncellenmelidir. Eğer şifreyi güncellemeden gidip de Login' in özelliklerinden "CHECK_EXPIRATION" özelliğini iptal etmek isterseniz yukarıdaki hata mesajıyla karşılaşırsınız.

ÇÖZÜM:
Öncelikle, ilgili Login' in şifresi değiştirilmelidir. Bu işlemi SSMS arayüzünü veya T-SQL komutlarını kullanarak yapabilirsiniz.

SSMS:
- SSMS' i açın -> Security -> Logins ve ardından ilgili Login' i bulduktan sonra üzerinde farenin sağ tuşuna tıklayın ve Properties penceresini açın.
- Login' in şifresini değiştirin ve "User must change password at next login" seçeneğinin işaretini kaldırın. OK' düğmesine tıklayıp pencereyi kapatın.
- Eğer Password Policy ve Password Expiration kurallarının bu Login için tekrar uygulanmasını istemiyorsanız, Login' in Properties penceresini tekrar açıp ve "Enforce password expiration" seçeneğinin işaretini de artık kaldırabilirsiniz. Bu işlemi daha önce yapamazdık, çünkü öncelikle bir önceki adımın tamamlanması gerekiyor.

T-SQL:
Aşağıdaki komutu kullanarak ilgili Login' in şifresini değiştirin.

ALTER LOGIN [Login_adı] WITH PASSWORD=N'xxx'

Daha sonra aşağıdaki komutu kullanarak CHECK_EXPIRATION ve CHECK_POLICY özelliklerini de kapatabilirsiniz.

ALTER LOGIN [Login_adı] WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
HATA MESAJI:
"Executing the query "ALTER INDEX [index_adı] ON [dbo].[tablo_adı] REORGANIZE WITH ( LOB_COMPACTION = ON ) " failed with the following error: "The index "index_adı" (partition 1) on table "tablo_adı" cannot be reorganized because page level locking is disabled.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly."

AÇIKLAMA:
Bir veritabanındaki Index' ler için Index Reorganization işlemi yaptığınızda böyle bir hata mesajıyla karşılaşabilirsiniz.

ÇÖZÜM:
Bu hatayı almanızın nedeni, ilgili Index' in ALLOW_PAGE_LOCKS özelliğinin kapalı olmasıdır.

Veritabanınızda bulunan tüm Index' lerin hangilerinin ALLOW_PAGE_LOCKS özelliğinin kapalı olup olmadığını görmek için şu sorguyu çalıştırabilirsiniz:

SELECT A.Name AS InName,ob.Name AS DBName FROM sys.indexes A LEFT OUTER JOIN sys.objects ob ON ob.object_id = A.object_id WHERE ALLOW_PAGE_LOCKS = 0 AND ob.type = 'U'

Bir Index' in ALLOW_PAGE_LOCKS özelliğini etkinleştirmeyi SSMS arayüzünden de yapabilirsiniz, T-SQL ile de:

- SSMS: İlgili tablodaki Index üzerinde farenin sağ tuşuna tıklayın, açılan menüden "Properties" öğesini seçin ve açılan penceredeki Options bölümünde bulunan "Use page locks when accessing the index" seçeneğini işaretleyip OK düğmesine tıklayarak Index Properties penceresini kapatın.

- T-SQL: İlgili Index' a ait bilgileri kullanarak aşağıdaki komutu çalıştırın:
ALTER INDEX ON SET (ALLOW_PAGE_LOCKS = ON)

"Cannot drop the database 'veritabanı_adı' because it is being used for replication. (Microsoft SQL Server, Error: 3724)"

HATA MESAJI:
"Cannot drop the database 'veritabanı_adı' because it is being used for replication. (Microsoft SQL Server, Error: 3724)"

AÇIKLAMA:
Bir veritabanını silmek istediğinizde böyle bir hata mesajıyla karşılaşabilirsiniz.

ÇÖZÜM:
Bu hata mesajını alıyorsanız öncelikle bu veritabanının herhangi bir Replication topolojisiyle ilişkisi olmadığından emin olun. Bu veritabanıyla ilgili herhangi bir Publication olmadığını da kontrol edin.

Eğer yine de bu hata mesajını alıyorsanız, o zaman tahminimce bu, zaten Replication' da kullanılan bir veritabanının örneği\kopyasıdır ve muhtemelen BACKUP\RESTORE ile bir SQL Server Instance' ından diğerine taşınmıştır.

Böyle bir durumda, veritabanının içinde bulunan Replication ile ilgili ayarları temizlemek için aşağıdaki Stored Procedure' ü çalıştırabilirsiniz:

sp_removedbreplication

Bu komut hakkında daha fazla bilgi için: http://msdn.microsoft.com/en-us/library/ms188734.aspx