12 Mayıs 2008 Pazartesi

"Operating system" hata kodlarının açıklaması

Diyelim ki, içinde "operating system error 3" geçen bir hata mesajı aldınız ve sayının yanında açıklaması da yok. İyi, güzel de, "3" burada ne anlama geliyor? İşte bu sayının açıklamasını görmek için Komut İstemcisini çalıştırıp şu kodu yazabilirsiniz: "NET HELPMSG 3" bunun sonucunda alacağınız açıklama mesajı da şudur: "The system cannot find the path specified".

"A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - A

HATA MESAJI:
"A connection was successfully established with the server, but then an error occurred during the login process. (provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine.) (Microsoft SQL Server, Error: 10053)"

AÇIKLAMA:
SQL Server Instance' ınıza bağlanmayı gerektirecek bir işlem yaptığınızda bu hata mesajı ile karşılaşabilirsiniz.

Sorun, aynı anda kurulabilecek en fazla bağlantı sayısına ulaşılmasından kaynaklanıyordur.

ÇÖZÜM:
Yapmanız gereken şey, aynı anda kurulabilecek en fazla bağlantı sayısını tekrar düzenlemektir.

Bunu da iki yolla yapabilirsiniz. Birincisi, SQL Server Management Studio' yu kullanarak, ikincisi de T-SQL komutlarıyla.

1. Yöntem:
- SQL Server Management Studio' yu başlatın.
- İlgili SQL Server Instance' ınıza bağlanın.
- Instance isminin üzerinde farenin sağ tuşuna tıklayın ve açılan menüden "Properties" öğesine tıklayın. Böylece "Server Properties" penceresi açılacaktır.
- "Server Properties" penceresinin sol tarafındaki "Select a page" listesinden "Connections" öğesini seçin.
- "Connections" sayfasındaki "Maximum number of concurrent connections (0 = unlimited)" seçeneğinin değerini, ihtiyaçlarınıza göre yükseltin.

2. Yöntem:
Bir kaç yolla aşağıdaki T-SQL kodunu çalıştırabilirsiniz. Meselâ SSMS ile bütünleştirilen "Query Editor" u veya SQLCMD' yi kullanabilirsiniz.

EXEC sys.sp_configure N'user connections', N'1'
GO
RECONFIGURE WITH OVERRIDE
GO

"'Agent XPs' component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Agent XPs' b

HATA MESAJI:
"'Agent XPs' component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Agent XPs' by using sp_configure. For more information about enabling 'Agent XPs', see "Surface Area Configuration" in SQL Server Books Online. (Microsoft.SqlServer.Management.MaintenancePlanWizard)"

AÇIKLAMA:
Maintanence Wizard' ı açmak istediğinizde bu hata ile karşılaşabilirsiniz.

Nedeni, hata mesajında da denildiği gibi "Agent XPs" nin etkin olmamasından kaynaklanmaktadır.

ÇÖZÜM:
Agent XPs (Agent Extended Stored Procedures) ni iki yolla etkinleştirebilirsiniz.

Birincisi: SQL Server Agent' ı başlatarak. SQL Server Agent servisini başlattığınızda, Agent XPs otomatik olarak etkinleştirilir.

İkincisi: Aşağıda vermiş olduğum T-SQL kodlarını kullanarak.
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Agent XPs', 1;
GO
RECONFIGURE
GO

Agent XP' leri etkinleştirilmeden önce, SQL Server Management Studio' daki SQL Server Agent düğümünün de genişlemediğini gözlemleyebilirsiniz.

"SQL Server Setup could not run. Another instance of SQL Server Setup is already running. The running instance must complete before you can run SQL Se

HATA MESAJI:
"SQL Server Setup could not run. Another instance of SQL Server Setup is already running. The running instance must complete before you can run SQL Server Setup again."

AÇIKLAMA:
SQL Server 2005 Setup dosyasını çalıştırdığınızda bu mesaj ile karşılaşabilirsiniz.

Nedeni ise, başka bir SQL Server 2005 Setup işleminin zaten çalışıyor olmasıdır.

ÇÖZÜM:
Bu hata mesajından kurtulup SQL Server 2005 Setup dosyasını çalıştırmak için aşağıdaki adımları uygulayabilirsiniz:

- SQL Server Configuration Manager veya Services.msc (Başlat\Çalıştır: Services.msc) kullanarak çalışan SQL Server servislerinizi geçici olarak durdurun.
- Ardından Görev Yöneticisini (Task Manager) açın. Eğer "İşlemler" isimli sekmedeki işlemler listesinde SQL Server Setup dosyasının adı varsa (genelde setup.exe' dir), bu işlemi sonlandırın. Bir veya birden fazla da olabilir; bu, bu dosyayı kaç kere art arda açmaya çalıştığınıza göre değişebilir. Tüm SQL Server Setup işlemlerini sonlandırdığınızdan emin olun.
- Şimdi SQL Server 2005 Setup dosyasını tekrar çalıştırmayı deneyin.

"System.Data.SqlClient.SqlError: Directory lookup for the file "C:\Program Files\Microsoft SQL Server1\MSSQL.3\MSSQL\DATA\Test.mdf" failed with the op

HATA MESAJI:
"System.Data.SqlClient.SqlError: Directory lookup for the file "C:\Program Files\Microsoft SQL Server1\MSSQL.3\MSSQL\DATA\Test.mdf" failed with the operating system error 3(error not found). (Microsoft.SqlServer.Smo)"

AÇIKLAMA:
Bir veritabanı yedeğini açmaya çalıştığınızda bu hata ile karşılaşabilirsiniz.

Bu hata, açılacak dosyalar için geçerli bir dosya yolu girilmediğinde alınır.

ÇÖZÜM:
Eğer veritabanı yedeği açma işlemini SQL Server Management Studio ile yapıyorsanız, o zaman "Restore Database" penceresindeki "General" sayfasında bir veritabanı adı ("To database" metin kutusu) ve yedek kaynağı ("Select the backup sets to restore" listesinde) belirttirkten sonra sol tarafta bulunan "Select a page" listesinden "Options" sayfasına tıklayın.

Bu sayfada bulunan "Restore the database files as" listesinde belirtilen dosya yollarının var olduğundan emin olun. Çünkü bu hata, geçerli bir dosya yolu girilmediğinde alınır.

Eğer bu hatayı yedeğinizi T-SQL komutuyla açmaya çalışırken alıyorsanız, o zaman aşağıdaki örnekteki gibi RESTORE komutu ile birlikte WITH MOVE komutunu da kullanın.

RESTORE DATABASE DenemeVeritabanim
FROM DenemeVeritabanim_Yedek
WITH NORECOVERY,
MOVE 'DenemeVeritabanim_Veri' TO
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\YeniDenemeVeritabanim.mdf',
MOVE 'DenemeVeritabanim_Kayit' TO
'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\YeniDenemeVeritabanim.ldf'

RESTORE LOG DenemeVeritabanim
FROM DenemeVeritabanim_Yedek
WITH RECOVERY

"Arithmetic overflow error converting IDENTITY to data type smallint. Arithmetic overflow occurred."

HATA MESAJI:
"Arithmetic overflow error converting IDENTITY to data type smallint. Arithmetic overflow occurred."

AÇIKLAMA:
IDENTITY özelliğini atadığınız ve veritipi SmallInt olan bir alana yeni bir satır kaydetmeye çalıştığınızda bu hata ile karşılaşabilirsiniz.

IDENTITY özelliğine sahip olan alanda 32,767 adet kayıt var demektir. SmallInt veritipinin atandığı sayısal bir alana en fazla 32,767 (maliyeti 2 Byte' tır) sayısı saklanabileceğinden, daha fazla sayı kaydedemezsiniz.

ÇÖZÜM:
Eğer bahsi geçen alana daha fazla sayı kaydetmek istiyorsanız, o zaman SmallInt veritipinin bir üst kademesi olan Integer veritipini kullanabilirsiniz. Bu veritipinde 2,147,483,647' ye kadar sayı kaydedebilirsiniz. Maliyeti ise 4 Byte' tır.

5 Mayıs 2008 Pazartesi

Your upgrade is blocked. For more information about upgrade support, see the "Version and Edition Upgrades" and "Hardware and Software Requirements" t

BİLGİ MESAJI:
Reason: Your upgrade is blocked. For more information about upgrade support, see the "Version and Edition Upgrades" and "Hardware and Software Requirements" topics in SQL Server 2005 Setup Help or SQL Server 2005 Books Online.

Build version check: Your upgrade is blocked because the existing component is a later version than the version you are trying to upgrade to. To modify an existing SQL Server component, go to Add or Remove Programs in Control Panel, select the component you would like to modify, and then click Change/Remove.

AÇIKLAMA:
Bu mesjı SQL Server 2005' i yüklerken alabilirsiniz. SQL Server 2005 Setup' ta, "Instance Name" isimli pencerede SQL Server için bir Instance şekli seçtikten sonra eğer önceden SQL Server ile ilgili yüklenmiş bileşenler varsa "Existing Components" (Varolan Bileşener) diye bir pencere daha çıkar.

Bu pencerede eğer işaretlenmemiş bir seçim kutusu görürseniz, anlayın ki o seçim kutusunun etiketinde yazan bileşen yüklenemeyecektir. İşte Mesaj Başlığında yazan bilgi mesajı da bu konu hakkındadır. Elbette başka nedenleri de olabilir, fakat bu yazımda ben bu neden hakkında yazıyorum.

Bu sorunla(?) ne gibi bir durumda karşılaşabileceğinizi daha iyi gösterebilmek için bir senaryo oluşturacağım (ki gerçek hayatta da birebir karşılaştığım bir senaryodur):

Senaryo:
İlk önce, bir SQL Server 2005 Express Edition (SP2) Instance' ını sisteminize yüklediğinizi varsayalım. "Database Engine" ile birlikte, "Workstation Components" ı da yüklediniz.

Ardından, bir de SQL Server 2005 Standard Edition (RTM) yüklemek istediniz. Yükleme esnasında Standard Edition' ın Workstation Components' ını da seçtiniz. Tabii SQL Server 2005 Express Edition ile birlikte SQL Server Management Studio gelmediği için, ama Standard Edition ile geldiği için bu sefer Client Tools' u da yüklemek istediniz, onu da seçtiniz.

Ama "Workstation Components" ı zaten Express Edition ile yüklemiştiniz, yani sistemde "Workstation Components" zaten yüklü görünüyor ve "Workstation Components" da SQL Server' ın Ortak Bileşenlerindendir. Yani her SQL Server sürümü için ayrı ayrı kurulmaz, bir kere kurulur ve tüm SQL Server versiyon ve sürümleri Ortak Bileşenleri kullanır. RTM (Release to Manufacturer "versiyon 1399"), SP2 (Service Pack 2 "versiyon 3159") den daha eski bir versiyon olduğu için, "Existing Components" sayfasında Mesaj Başlığında belirttiğim bu mesajlar ile karşılaşırsınız. Çünkü eski bir bileşen yeni bir bileşenin yerini alamaz.

Bu sorunu çözmek için Denetim Masasındaki Program Ekle\Kaldır' a gidip "Microsoft SQL Server 2005" öğesini seçip "Kaldır" düğmesine tıklamalısınız. Açılan penceredenin alttaki liste kutusundan "Workstation Components" ı seçip, kaldırma işlemini gerçekleştirmelisiniz.

Ardından da SQL Server 2005 Standard Edition (veya sizin durumunuzda neyse artık o sürümü) çalıştırıp, kurulumunuza devam etmelisiniz. Bu yüklemede "Workstation Components" ı seçtiğinizde, geçen seferki gibi "Existing Components" penceresiyle karşılaşmayacaksınız. Çünkü yüklü olan bir "Workstation Components" bileşeni olmayacak.

SQL Server 2005: Bağlantı Protokolleri

Not:
Bu yazının daha düzgün biçimlisine aşağıdaki adresten ulaşabilirsiniz:
http://www.ekremonsoy.net/makaleler/sql/protokoller/protokoller.aspx


Merhaba arkadaşlar,


Bir SQL Server veritabanı motoruna bağlanabilmeniz için, en az bir SQL Server protokolü kullanılabilir durumda olmalıdır. SQL Server' da, aynı anda birden fazla protokol kullanılabilir; ama istemciler SQL Server' a tek bir protokolü kullanarak bağlanırlar. Eğer istemcinin kullandığı program, SQL Server' ın hangi protokolü dinlediğini bilmiyorsa, o zaman çözüm olarak istemcinin sırayla değişik protokolleri denemesini sağlayabilirsiniz. SQL Server protokollerini kullanılabilir ve kullanılamaz yapmak için SQL Server Configuration Manager' ı kullanabilirsiniz. Aynı zamanda SQL Server 2005' te, SQL Server Surface Area Configuration aracını da kullanabilirsiniz. SQL Server 2005' te 4 adet protokol bulunmaktadır.

Bunlar: Shared Memory, TCP\IP, Named Pipes ve VIA protokolleridir. Size ilk önce bu protokollerden tek tek bahsedeceğim, son olarak da Named Pipes ve TCP\IP protokollerinin hangi şartlarda kullanılabileceğine dair genel bir öneride bulunacağım.


Shared Memory
Bu protokol en sade ve herhangi bir ayarı olmayan protokoldür. Bu protokolü, istemcilerinizin SQL Server' ınız ile bağlantı kurup bilgi alış-verişi yaptığı bir ortamda kullanamazsınız. Daha ziyade, testler için veya diğer protokollerde sorun yaşadığınızı düşündüğünüzde ve SQL Server' ınıza bağlanmanız gerektiğinde kullanabilirsiniz. Varsayılan olarak tüm SQL Server sürümlerinde kullanılabilir olarak gelen bir protokoldür.

Kullanımı iptal edilmediği sürece, SQL Server' ın üzerinde bulunduğunu sunucuya, o sunucudayken bağlanmak istediğinizde sistemin ilk deneyeceği protokol Shared Memory protokolüdür.


TCP\IP
TCP\IP, geniş çaplı olarak kullanılan bir protokoldür. Bu protokülü kullanarak, birbirine bağlı ağlar arası bilgisayarlar ile bağlantı kurmanız mümkündür. Birçok donanım tarafından desteklenen bir protokoldür. TCP\IP, ağ yönlendirme trafiği standartlarını ve gelişmiş güvenlik özelliklerini içerir. Bugünün piyasasında en çok kullanılan ve kabul gören protokoldür. TCP\IP protokolü, SQL Server 2005' in Express ve Developer Edition' ında varsayılan olarak kullanılamaz halde gelir. SQL Server 2005 Express Edition veya Developer Edition kurup, istemcilerinden SQL Server sunucularına bağlanmaya çalışıp bağlanamayan bir çok kullanıcı görüyorum her gün. Bu nedenle, bu yazıda bu noktayı da belirtmek istedim. Her protokol, her SQL Server sürümünde varsayılan olarak kullanılabilir veya kullanılamaz değildir. Her sürümde varsayılan ayarlar değişiyor.

Meselâ uygulamanızdan SQL Server' ınıza bu protokolü kullanarak bağlanmak istediğinizi varsayalım. İlk örneğimde bir varsayılan SQL Server portunu kullanarak (ki varsayılan port 1433' tür) bir Default Instance' a bağlandığınızı varsayacağım ve bu örneğe uygun bir Bağlantı Cümlesi (Connection String) yazacağım:

Örnek 1:
"Server = EKREM-PC; Database = Veritabanim; Integrated Security = Yes"

Eğer SQL Server Instance' ınız bir Named Instance ise ve farzedelim Instance adı "Yonetim" ve port numarası olarak da 10897 kullanılıyorsa, o zaman aşağıdaki Bağlantı Cümlesi kullanılabilir:

Örnek 2:
"Server = EKREM-PC\Yonetim, 10897; Database = Veritabanim; Integrated Security = Yes"

"Server" adı olarak IP de kullanabilirdiniz. O zaman da port numarasını virgül ile ayırarak yazmanız gerekirdi. Port numarasını kullanmak performans açısından daha yararlıdır. Aksi takdirde standart port numarası kullanılmadığı için, ilk önce Browser Servisi ile haberleşilmesi gerekirdi. Çünkü dinamik port kullanan SQL Server Instance' larının port numralarının alınabilmesi için istemci ilk önce Browser Servisiyle 1434UDP portundan haberleşir ve haberleşmek istediği SQL Server Insatnce' ının port numarasını alır ve bu bilgiye göre bağlantı kurar.


Named Pipes
Named Pipes LAN (Local Area Network)' lar için geliştirilmiş bir protokoldür. Hafızanın bir bölümü bir işlem tarafından veriyi diğer işleme aktarmak için kullanılır, bu sayede bir işlemin çıktısı, diğerinin girdisi olur. İkinci işlem yerel (İlk olduğu için aynı bilgisayarda) veya uzaktan (ağdaki bir bilgisayardan) olabilir.

Named Pipe protokolünü kullanarak SQL Server' ınıza bağlanmak için aşağıdaki Bağlantı Cümlesini kullanabilirsiniz (Default Instance için varsayılan değerler gözönüne alınarak yazıyorum):

Örnek 1:
\\.\pipe\sql\query

"." değeri, bağlantının yerel bir bağlantı olduğunu gösteriyor. "pipe" değeri, bağlantının bir Named Pipe bağlantısı olduğunu, "sql\query" değeri ise Pipe' ın adını gösteriyor.

Bir Named Instance için ise aşağıdaki Named Pipe adresi kullanılabilir:

Örnek 2:
\\\pipe\MSSQL$\sql\query.

SQL Server, iletişim için 445 numaralı portu kullanır. Bu nedenle Windows Güvenlik Duvarında bu portun izinli olmasına dikkat edin.


VIA
VIA (Virtual Interface Adapter) protokolü VIA donanımıyla birlikte çalışır. VIA hakkında daha fazla bilgi için, size VIA donanımını satan firma ile bağlantı kurmalısınız.


Pratik olarak Named Pipes mı yoksa TCP\IP mi?
TCP\IP, LAN, WAN ya da Çevirmeli Ağ (Dial-up) gibi yavaş ağ bağlantılarında tercih edilebilir, Named Pipes ise hızın sorun olmadığı ağ bağlantılarında daha iyi bir işlevsellik sunar, kullanımı ve yapılandırması daha kolaydır.

Hangisinin size daha uygun olduğunu anlamak için uygulanabilecek en iyi yöntem testtir. İki protokolü de ortamınızda test etmenizi tavsiye ederim. Hangisinden daha çok performans alırsanız, onu tercih edin.


Bir Protokolün Kullanımı
Uygulamanızın kullanması için seçtiğiniz SQL Server protokolünün çalışabilmesi için, seçtiğiniz protokolün sunucu tarafında da, istemci tarafında da kullanılabilir ve etkin olması gerekmektedir. Sunucu aynı anda birden çok protokolü dinleyebilir. İstemciler ise daha önceden de değindiğim gibi sadece bir tane protokolden sunucuya bağlanabilirler.



Ekrem Önsoy


Kaynak:
http://msdn.microsoft.com/en-us/library/ms187892.aspx

"Error: Action "LaunchLocalBootstrapAction" threw an exception during execution."

HATA MESAJI:
"Error: Action "LaunchLocalBootstrapAction" threw an exception during execution."

AÇIKLAMA:
Microsoft Cluster Services' in kurulu olduğu bir sistemde, bir SQL Server Instance' ı yüklerken bu hata ile karşılaşabilirsiniz.

Tecrübe ettiğim bu sorundaki hata nedeni, Cluster Services' te kullanılan bir Grup Adı (Group Name) in içerisinde "&" karakterinin bulunması idi.

ÇÖZÜM:
Küme (Cluster) Servislerinde "&" gibi karakterler yerine "ve" bağlacını veya başka uygun karakterler kullanın.

SQL Server Log dosyası çok mu şişti?

Burada bahsettiğim şey Transaction Log dosyası değil; SQL Server' ın, SQL Server Instance' ına karşı yapılan giriş çıkışları, hataları, uyarıları vs. tuttuğu kayıt dosyasıdır. Bazen SQL Server' ınızı uzun süre (bazen aylarca...) açık tutarsınız ve bu da Kayıt dosyasının şişmesine neden olur. Kayıt dosyasını yenilemek için "sp_cycle_errorlog" veya "DBCC ERRORLOG" komutlarını kullanabilirsiniz.

SQL Server için Service Paketi veya yama yüklemesi sırasında gereken izin nedir?

Bir SQL Server Instance' ının versiyonunu bir SQL Server Servis Paketi veya yamasıyla yükseltmek için, yükseltme işlemi esnasında kullanacağınız Login, System Administrator (sysadmin) rolünün bir üyesi olmalıdır.

SQL Server veritabanı, SQL Server' ın x64 veya x86 mimarisi olmasına göre değişir mi?

Hayır. SQL Server' ın 64Bit bir sürümünden ister yedek olarak alınmış, ister ise ilişkisi koparılarak alınmış (Detach) bir veritabanı, 32Bit bir SQL Server sunucusunda açılabilir (Restore) veya iliştirilebilir. Tabii bu işlemin tam tersi de olabilir, yani 32Bit bir SQL Server' dan 64Bit bir SQL Server' a da veritabanı aktarımı yapılabilir. Bu açıdan birbirlerine tamamen uyumludurlar.