27 Mayıs 2009 Çarşamba

Anında Dosya Oluşturulması (Instant File Initialization)

Merhaba arkadaşlar,

Normalde, veritabanınıza ait veri (İng. data) ve kayıt (İng. transaction log) dosyaları, önceden silinmiş olan dosyalardan arta kalan alanların sıfırlarla doldurulmasıyla oluşturulur. Örnek olarak:

- Veritabanı oluşturulması,
- Varolan bir veritabanına veri veya kayıt dosyalarının eklenmesi,
- Varolan bir dosyanın boyutunun büyütülmesi (ki bu otomatik genişleme (İng. autogrowth) özelliğini de içerir),
- Bir veritabanının yedeğinin açılması (İng. restore).

Bununla birlikte, eğer dosyanın yazılacağı alan önceden hiçbir dosya tarafından kullanılmadıysa, o zaman diskino alanında oluşturulacak olan dosyanın sıfırlarla doldurulması gerekmez.

SQL Server' ın Instant File Initialization özelliğini kullandığınızda, dosyanın oluşturulması için sıfırlarla doldurulma işlemine gerek kalmadan veri dosyalarının oluşturulmasını sağlayabilirsiniz. Bu özellik sadece veri dosyaları için geçerlidir, kayıt dosyaları için değil.

Önemli Not: Instant File Initialization özelliği Windows XP Professional, Windows Server 2003 ve üzeri versiyonlar için geçerlidir.

Nasıl Kullanılır?

Bu özelliğin etkin olması için, SQL Server servisi için kullandığınız hesabın Yerel Güvenlik İlkesinde (İng. local group policy) "Birim bakım görevleri gerçekleştir" (İng. perform volume maintenance tasks) ilkesinin bir üyesi olması gerekiyor. Varsayılan olarak ise bu ilkenin tek üyesi Administrators Windows Grubu' dur. Bu bağlamda, bu özelliğin etkin olup olmadığı SQL Server servisi için hangi servis hesabını kullandığınız ile ilintilidir. Eğer SQL Server servisiniz için, sisteminizdeki Administrators Windows Grubu' na üye bir hesabı kullanacaksanız, o zaman Instant File Initialization özelliği zaten etkin olacaktır. Eğer SQL Server servisiniz için Administrators Windows Grubu' na üye olmayan bir hesap kullanmak istiyorsanız (ki doğrusu budur) o zaman o hesabı "Birim bakım görevleri gerçekleştir" ilkesinin bir üyesi yapmanız ve SQL Server servisinizi durdurup yeniden başlatmanız gerekiyor.

Örnek:

Instant File Initialization özelliği etkin değilken aşağıdaki kodu kullanarak oluşturduğum veritabanı tam 12 dakika 37 saniyede oluşturuldu.

CREATE DATABASE [IFI_Test]
ON PRIMARY ( NAME = N'IFI_Test', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ifi.mdf' , SIZE = 30720000KB , FILEGROWTH = 1024KB )
LOG ON ( NAME = N'IFI_Test_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\ifi_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO

Şimdi, bu oluşturduğumuz test veritabanını silin ve SQL Server' ın Instant File Initialization özelliğini önceden anlattığım şekilde etkinleştirin ve yine yukarıdaki kod ile aynı veritabanını tekrar oluşturun ve hız farkını görün... Instant File Initialization özelliğini etkinleştirdikten sonra aynı veritabanı benim dizüstü bilgisayarımda 3-5 saniyede oluşturuldu. Oldukça farkediyor değil mi?


Ekrem Önsoy

"Unable to open the physical file "xxx.mdf". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)". (Microsoft SQL Serv

HATA MESAJI:
"Unable to open the physical file "xxx.mdf". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)". (Microsoft SQL Server, Error: 5120)"

AÇIKLAMA:
SQL Server Management Studio (SSMS) kullanarak bir veritabanını iliştirmek (attach) istediğinizde böyle bir hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
Bu hatanın, UAC (User Access Control) özelliğinin etkin olduğu Windows Vista işletim sistemlerindeyken alındığını gördüm.

Bu hata mesajını almadan veritabanınızı SQL Server Instance' ınıza SSMS ile eklemek için SSMS' i açacağınız zaman SSMS simgesi üzerindeyken farenin sağ tuşuna tıklayıp "Yönetici olarak çalıştır" (Run as Administrator) öğesini seçerek açmanız gerekiyor.

Ya da, UAC özelliğini etkisiz (disable) hale getirirseniz, SSMS' i yönetici olarak çalıştırmadan da bu hata mesajından sıyrılabilirsiniz.

"System.Data.SqlClient.SqlError: The media set has 2 media families but only 1 are provided. All members must be provided. (Microsoft.SqlServer.Smo)"

HATA MESAJI:
"System.Data.SqlClient.SqlError: The media set has 2 media families but only 1 are provided. All members must be provided. (Microsoft.SqlServer.Smo)"

AÇIKLAMA:
Bir yedek dosyasını açmak (restore) istediğinizde böyle bir hata mesajıyla karşılaşabilirsiniz.

Bu hatayı almanızın sebebi, ilgili veritabanının yedeğini birden fazla dosyaya almanız, fakat yedeği açarken bu yedek dosyalarından sadece bir tanesini kullanmanızdır.

Örnek:
BACKUP DATABASE [veritabanım] TO DISK = N'C:\Test\Yedek1.bak', DISK = N'C:\Test\Yedek2.bak' WITH NOFORMAT, NOINIT, NAME = N'veritabanım-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO

ÇÖZÜM:
Eğer yedek dosyasını açarken, yedekleme yaparken kullandığınız tüm yedek dosyalarını kullanırsanız böyle bir hata ile karşılaşmazsınız.

Örnek (İlk örneğe göre):
RESTORE DATABASE [veritabanım] FROM DISK = N'C:\Test\Yedek1.bak', DISK = N'C:\Test\Yedek2.bak' WITH FILE = 1, MOVE N'veritabanım' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\veritabanım.mdf', MOVE N'veritabanım_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\veritabanım_1.ldf', NOUNLOAD, STATS = 10 GO

Not: Eğer bu açma işlemini SSMS arayüzünü kullanarak yapacaksanız, o zaman "Restore Database" penceresindeki "From device:" bölümünde şöyle bir metin görünmeli: "C:\Test\Yedek1.bak,C:\Test\Yedek2.bak". Yani tek bir tane yedek değil, yedeklerin tümü.

SQL Server 2008 Servis Paketi 1 Yayınlandı!

Merhaba Arkadaşlar!


Cumulative Update 3 ve diğer bazı FIX' lerin de içinde bulunduğu SQL Server 2008 Service Paketi 1 yayınlandı.

Servis Paketi 1' i indirmek için buraya tıklayın!


Ekrem Önsoy

[ipucu] Sorgu çalıştırma süresi

Bazen şöyle bir soru alıyorum: "Bir sorguyu Query Analyzer' da veya Query Editor' de çalıştırdığım zaman, çalışma süresi olarak en az saniyeyi görebiliyorum, süreyi milisaniye olarak nasıl görebilirim?" Eğer bir sorgunun çalışma süresi, çalışırken derlenme ve optimizasyon için ne kadar CPU zamanı harcadığı gibi bilgileri pratik olarak görmek için SET STATISTICS TIME ON komutunu kullanabilirsiniz. Ayrıca bu komut, SSMS' teki Tools\Options->Query Execution->SQL Server->Advanced bölümünden varsayılan hale de getirilebilir.

[İPUCU] SSMS: GO 'sayı'

Query Editor' de bir komutu bir döngüye sokmak için GO komutunu kullanabileceğinizi biliyor muydunuz? Misal: "SELECT GetDate() GO 1000" komutu, GetDate() fonksiyonunun 1000 kere çalışmasını sağlayacaktır.

"Component update returned a fatal error : 1603 Error Code: 0x80070643 (1603)"

HATA MESAJI:
"Component update returned a fatal error : 1603 Error Code: 0x80070643 (1603)"

AÇIKLAMASI:
SQL Server Setup' ı çalıştırdığınızda ve aşağıdaki bileşenlerin yükleneceği ilk pencerede böyle bir sorun ile karşılaşabilirsiniz.

- Microsoft SQL Server Setup Support Files
- .Net Framework 2.0
- Microsoft SQL Server Native Client

ÇÖZÜM:
Bu sorunun tam olarak neden kaynaklandığını bilemiyorum, fakat sorunu çözmek için SQL Server Setup' ı çalıştırmadan önce, .Net Framework 2.0' ı kendiniz kurarsanız SQL Server Setup' ı tekrar çalıştırdığınızda böyle bir hata mesajıyla karşılaşmazsınız. En azından ben bu sorunu böyle aşmıştım.

2009 Microsoft Most Valuable Professional Ödülü

Merhaba Arkadaşlar!


Microsoft SQL Server ürünü hakkındaki çalışmalarımdan dolayı Microsoft SQL Server dalında, 2009 Microsoft Most Valuable Professional (En Değerli Profesyonel) ödülünü kazandım.

Bundan böyle, bu ödülle birlikte SQL Server ile ilgili daha fazla bilgiye ulaşma şansım olacak. Bu sayede daha güzel paylaşımlar yapabilirim. Tabi bu paylaşımların da sınırları olması gerekiyor, çünkü NDA denilen bir anlaşma var ve bu anlaşma MVP ödülünü kazanan kişi ile doğrudan Microsoft arasında yapılıyor ve anlaşmayı çiğnemem benim için hiç de iyi olmaz; hukuki yaptırımları var.

Beni bu ödüle aday olarak gösteren Aaron Bertrand (SQL Server MVP), Alex Kuznetsov (SQL Server MVP) ve Baransel Doğan (MVP Lead) teşekkür ederim.

"I would like to thank to Aaron Bertrand (SQL Server MVP), Alex Kuznetsov (SQL Server MVP) and Baransel Dogan (MVP Lead) for nominating me for this award."

Ayrıca, çalışmalarımı desteklediği için eski patronum Hasan Aydın Şaşmaz' a da teşekkür ederim.

MVP Profilim:
https://mvp.support.microsoft.com/profile/Ekrem.Onsoy


Ekrem Önsoy