30 Haziran 2009 Salı

"[Microsoft][SQL Native Client ]Unexpected EOF encountered in BCP data-file"

HATA MESAJI:
"[Microsoft][SQL Native Client ]Unexpected EOF encountered in BCP data-file"

AÇIKLAMA:
BCP aracı ile, CSV biçimindeki bir dosyadan veritabanınıza veri aktarmaya çalışırken böyle bir hata mesajı ile karşılaşabilirsiniz.

ÇÖZÜM:
Sorunun nedeni, CSV biçimindeki dosyanızda kullanılan ayraçların (delimiters), komutunuzdaki ayraçtan farklı olmasıdır.

Örneğin, CSV dosyanız içerisindeki ayraç eğer virgül ise ve siz BCP komutunuzda herhangi bir ayraç belirtmediyseniz bu hata ile karşılaşırsınız. Varsayılan ayraç ise sekmedir. Virgül ayracının kullanılmadığı komut örneği:

BCP Veritabanim.dbo.Tablom in c:\dosya.csv -T -c -S sunucu_adi\instance_adi

Görüldüğü gibi bu komutta ayraç olarak virgül belirtilmemiş. Virgül ayracının belirtilmesi için "-t" parametresinin kullanılması gerekiyor.

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