31 Mart 2008 Pazartesi

Cannot truncate table because it is being referenced by a FOREIGN KEY constraint.

HATA MESAJI:
"Cannot truncate table because it is being referenced by a FOREIGN KEY constraint."

AÇIKLAMASI:
Bir başka tabloda FOREIGN KEY olarak referans gösterilen bir tablonun içeriğini TRUNCATE TABLE komutuyla silmeye kalkarsanız bu mesajı alırsınız.

ÇÖZÜM:
Eğer başka bir tablo tarafından FOREIGN KEY olarak referans gösterdiğiniz bir tablonun içeriğini silmek istiyorsanız o zaman DELETE FROM komutunu kullanabilirsiniz.

Alternatif olarak, FOREIGN KEY ilişkisini koparırsanız o zaman TRUNCATE TABLE komutunu kullanabilirsiniz.

Error: The @newname value 'test' is already in use as a OBJECT name and would cause a duplicate that is not permitted. (Microsoft SQL Server, Error: 1

HATA MESAJI:
"Error: The @newname value 'test' is already in use as a OBJECT name and would cause a duplicate that is not permitted. (Microsoft SQL Server, Error: 15335)"

AÇIKLAMASI:
Varolan bir nesnenin ("tablo" veya "view" gibi...) adını değiştirmeye çalıştığınızda, eğer zaten o isimde bir başka nesne varsa bu hata mesajını alırsınız.

ÇÖZÜM:
Eğer oluşturacağınız nesneyi illa da aynı isimlerde oluşturmak istiyorsanız, o zaman bu nesneler için farklı "Schema" lar kullanmanız gerekir.

Bir "Schema" veya bir "kullanıcı" aynı anda aynı isimli iki nesneye sahip olamaz.

System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCr

HATA MESAJI:
"System.Data.SqlClient.SqlError: The operating system returned the error '5(Access is denied.)' while attempting 'RestoreContainer::ValidateTargetForCreation' on 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\xxx.mdf'. (Microsoft.SqlServer.Smo)"

AÇIKLAMASI:
Bir yedek dosyasını bir SQL Server Instance' ına açmaya çalıştığınızda, eğer SQL Server Servisinizin, yedeği açmaya çalıştığınız klasör için gerekli izinleri yoksa bu hata mesajıyla karşılaşırsınız.

ÇÖZÜM:
Veritabanı yedeklerinin açma işlemini SQL Server servisi gerçekleştirir. Yedek dosyasının açılması demek, SQL Server servisinin, veritabanınızın dosyalarını yedek dosyasından hedef klasöre açması demektir. Yani SQL Server servis hesabınızın, veritabanı dosyalarının oluşturulacağı hedef klasörde yazma izinlerinin olması gerekiyor.

Bu işlem için SQL Server servisine, hedef klasör üstünde vermeniz gereken yetki ise Yazma (Write) yetkisidir.

System.Data.SqlClient.SqlError: This backup cannot be restored using WITH STANDBY because a database upgrade is needed. Reissue the RESTORE without W

HATA MESAJI:
"System.Data.SqlClient.SqlError: This backup cannot be restored using WITH STANDBY because a database upgrade is needed. Reissue the RESTORE without WITH STANDBY."

AÇIKLAMASI:
Bu hata mesajını, SQL Server 2000 \ 2005 gibi SQL Server 2008' den daha eski SQL Server Instance' larında oluşturulmuş bir veritabanını, "WITH STANDBY..." komutu ile birlikte açmaya (Restore) çalışırken alabilirsiniz.

ÇÖZÜM:
Kullandığınız SQL Server Instance' ından daha eski bir SQL Server versiyonundan alınan veritabanı yedeğinizi ilk önce "WITH RECOVERY" komutuyla açmalısınız. Eğer daha sonra bu veritabanının tekrar yedeğini alıp "WITH STANDBY" seçeneğiyle açmak istiyorsanız, o zaman bu veritabanının Uyum Düzeyini ("Compatibility Level") Veritabanı Özelliklerinden yükseltmelisiniz.

18 Mart 2008 Salı

SQL Server 2008: Sertifikasyon

Merhaba arkadaşlar,


SQL Server ile yakından ilgilenenler biliyordur, SQL Server 2008 bu senenin üçüncü çeyreğinde piyasada sürülecek. Aslında bazıları daha erken sürüleceğini düşünüyordu, fakat Ocak ayında Berlin' de katıldığım MCT Summit 2008' de Redmond' dan bir Microsoft çalışanıyla konuşma şansım oldu ve bana ürünün Ağustos' ta piyasaya sürüleceğini söylüyordu. Artık Microsoft da resmen bunu doğruluyor.

Yeni ürünle birlikte, elbette bu yeni ürün için sınavlar da gelecek. Bu yazımda sizlerle bu sınavlar hakkında edindiğim bilgileri paylaşmak istiyorum. Microsoft' un yeni nesil sınav sistemini bildiğinizi varsayıyorum, eğer sizin için aksi bir durum söz konusuysa ve bu konuda bilgi almak istiyorsanız buraya tıklayarak Microsoft' un yeni nesil sertifika sistemi konusundaki başka bir makalemi okuyabilirsiniz.

SQL Server 2005 sınavlarını araştıranlar ve konuyla ilgililer bilir, SQL Server 2005 Database Administrator ve Database Developer için 70-431:TS kodlu tek bir sınav vardı. SQL Server 2008 ile birlikte Microsoft, Database Administrator ve Database Developer Technology Specialist sınavını ikiye ayırmış. MCTS, MCITP ve MCA yapısı değişmedi. Ama dediğim gibi, SQL Server 2008 için SQL Server 2005' teki gibi 2 tane değil, 3 tane MCTS sınavı olacak. MCTS sınavlarının açıklamaları ve kodları şöyle:

70-432:TS:SQL Server 2008, Implementation and Maintenance
- Installing and configuring
- Maintaining sql instances
- Managing security
- Maintaining a database
- Data management
- Tasks monitoring and troubleshooting
- Optimizing implementing high availability

Haziran-Ağustos 2008 gibi sınava girilebilir olacak.

70-433:TS: SQL Server 2008, Database Development
- Design
- T-SQL
- Connecting to datasources

Eylül 2008 gibi sınava girilebilir olacak.

Tabi bir de bildiğiniz gibi BI sınavı var, onun da kodu şöyle:

70-448:TS: SQL Server 2008 Business Intelligence Development and Maintenance
Configuring, deploying, maintaining and implementing:
- SSIS
- SSRS
- SSAS


Haziran-Ağustos 2008 gibi sınava girilebilir olacak.

SQL Server 2005 MCITP sertifikasına sahipseniz, tek yükseltme sınavı ile SQL Server 2008 MCTS ve MCITP sertifikalarını kazanabileceksiniz. Eğer henüz MCITP sertifikanız yoksa, fakat MCTS sertifikanız varsa ve MCITP sertifikasını kazanmak istiyorsanız, o zaman SQL Server 2005 MCITP sınavlarına girmeye devam edip bu sertifikayı kazanmanızı ve ardından da SQL Server 2008 MCITP sınavı girilebilir olduğunda tek yükseltme sınavıyla SQL Server 2008 MCITP sertifika sınavına girmenizi tavsiye ederim.

SQL Server 2000 MCDBA sertifikanız varsa, o zaman doğrudan SQL Server 2008' e yükseltme şansınız olmayacağını bilmelisiniz. Eğer bu durumdaysanız ve sertifikanızı güncellemek istiyorsanız izleyebileceğiniz yol, MCDBA -> SQL Server 2005 MCITP sertifikasına yükseltme sınavıyla sahip olup, tek yükseltme sınavıyla da SQL Server 2008 MCITP sertifikasına yükseltme yapmaktır. Ya da, SQL Server 2005 sertifika sınavlarına girmeden SQL Server 2008 sınavlarına baştan başlayıp girebilirsiniz.

MCDBA sınavları Mart 2009' da geçerliliğini yitirecek. Bu nedenle Microsoft, artık MCDBA sınavlarına girilmesini tavsiye etmiyor.

Not:
Bazı arkadaşlar, MCDBA sertifika sınavını tüm SQL Server sürümleri için geçerli bir sınav zannediyor ve kafaları karışabiliyor. MCDBA sertifika sınavları sadece SQL Server 2000' i kapsamaktadır. SQL Server 2005 için MCDBA sertifikası alınamaz. SQL Server 2005 için ilk önce ilgilendiğiniz SQL Server alanının MCTS sertifika sınavına (ki tek sınavdan oluşuyor), daha sonra da iki sınavdan oluşan MCITP sınavına girmeniz gerekir. Bu yapı, SQL Server 2008 ile birlikte de korunmaktadır.


Ekrem Önsoy

Disk Kullanımını İzlemek

Merhaba arkadaşlar,


Veritabanı yöneticileri olarak bizlerin sırtındaki en ağır yüklerden biri de performansın her zaman mümkün olduğunda en iyi şekilde kalmasını sağlamaktır. Bu nedenle sürekli sistemi gözlemlemeli, gerekli analizleri yapmalı ve geleceğe yönelik tespitlerde bulunmalıyız. Bu sayede, ileride iş yükünün artmasıyla birlikte karşılaşacağımız sorunları önceden görmüş oluruz ve buna göre tedbirler almış oluruz.

Gerçek hayat öyküsü
Büyük bir şirket, SQL Server Failover Cluster ve Active Directory + Exchange Server sistemlerini kurmamız için bize başvurdu. Tahmin edeceğiniz gibi işin SQL Server tarafı bana aitti. Projeyi bitirdik, teslim ettik. Bu arada analizler yaptım, şimdiki ve önlerindeki bir kaç aya dair bir de sonuç raporu çıkartarak kendilerine teslim ettim. Öngördüğüm tüm sorunlarla da karşılaştılar. Çünkü bu kaçınılmazdı. Önceden kendilerine yaşayacakları sorunları gösterdiğim halde herhangi bir önlem almadılar. Sonucunda da gene yanlış kararlar verip, yanlış yatırımlar yaptıklarını öğrendim. Ama maalesef, bazı şirketler hâlâ profesyonelce çalışmamakta diretiyor ve uğradıkları zararlar, alacakları önlemler için yapacakları yatırımdan daha maliyetli oluyor...

Giriş
Makale başlığında da belirttiğim gibi, bu makalede size diskinizde gelişen etkinlikleri nasıl izleyeceğiniz hakkında bilgi vereceğim. İşlemci ve Hafıza konularındaki makaleleri de başka başlıklar altında bulabileceksiniz.

SQL Server, diskinizdeki okuma ve yazma işlemleri için Windows işletim sisteminin giriş\çıkış çağrılarını uygular. Bu giriş\çıkış işlemlerinin yönetim tarafını SQL Server halleder, fakat işi Windows yapar. Bir sistemde yaşayacağınız performans sorunu büyük ihtimalle giriş\çıkış işlemlerinden kaynaklanıyor olacaktır. Peki nedir bu giriş\çıkış işlemleri? Şunlardır: Sistem Yolu (System Bus), Disk Kontrol Kartları (Disk Controller Cards), Diskler, Teyp Sürücüleri, CD-ROM sürücüleri ve diğer giriş\çıkış işlemi yapan aygıtlar.

Sisteminizde gelişen bu olayları ise System Monitor adı verilen ve Windows işletim sistemi ile birlikte gelen araç ile izleyebilirsiniz. Bu araç SQL Server ile birlikte kurulmaz, fakat SQL Server kurulurken System Monitor ile birlikte kullanabileceğimiz yeni sayaçlar da ekler. Bahsini ettiğim sayaçlar ve konumuzla ilgisi olmayan diğerleri bu makalede konu dışı olduğu için onlara değinmeyeceğim.

Disklerimizde gerçekleşen etkinlikleri iki ana dala ayırabiliriz:


- Disk giriş\çıkışını izlemek ve fazla sayfalamayı (paging) algılamak
- SQL Server' ın neden olduğu disk etkinliklerini ayıklamak

Disk giriş\çıkışını izlemek ve fazla sayfalamayı (paging) algılamak
Disk etkinliğini izlemek için aşağıdaki iki sayacı kullanabilirsiniz.

- PhysicalDisk: % Disk Time
- PhysicalDisk: Avg. Disk Queue Length

"PhysicalDisk: % Disk Time" sayacı, diskin okuma\yazma ile meşgul olma yüzdesini verir. Eğer "PhysicalDisk: % Disk Time" sayacı yüksekse (%90' dan fazla), o zaman kaç tane sistem isteğinin sırada beklediğini görmek için "PhysicalDisk: Avg. Disk Queue Length" sayacını kontrol edin. Girdi\çıktı isteklerinin sayısı (diskteki mil sayısı başına) 1.5 - 2' yi geçmemelidir. Çoğu diskin bir mili vardır, fakat RAID cihazlarının genellikle birden fazla mili vardır. bir RAID cihazı System Monitor' de tek bir fiziksel disk olarak görünür. Yazılımla yapılan RAID cihazları System Monitor' de çoklu olarak görünür.

Sisteminizdeki disk sistemleriyle ilgili performans sorunlarını belirlemek için "% Disk Time" ve "Current Disk Queue Length" sayaçlarının verdikleri değerleri kullanın. Eğer bu değerler sürekli yüksekse o zaman disk sistemiyle ilgili bir performans sorunu yaşıyorsunuz demektir. Bu durumda ise, aşağıdaki çözümlerden birini uygulamayı düşünebilirsiniz:

- Daha hızlı bir disk sürücü kullanmak
- Bazı dosyaları başka fiziksel sürücülere veya sunucuya taşımak
- Eğer RAID kullanıyorsanız, RAID dizisine yeni diskler eklemek

Eğer RAID cihazını kullanıyorsanız "% Disk Time" sayacı %100' den fazla bir değer gösterebilir. Eğer böyle bir şey olursa o zaman ortalama kaç sistem isteği olduğunu görmek için "PhysicalDisk: Avg. Disk Queue Length" sayacını kullanın.

Giriş\çıkış işlemleri ağırlıklı olan uygulamalar ve sistemler disklerinizi sürekli meşgul edebilirler.

Disk işlemlerinin sayfalamadan (paging) kaynaklanmadığından emin olmak için de "Memory: Page Faults/sec" sayacını kullanabilirsiniz.

Windows' ta, sayfalama aşağıdaki nedenlerden kaynaklanabilir:

- Çok fazla hafıza kullanmak için yapılandırılan işlemler
- Dosya sistemi etkinlikleri

Eğer aynı sabit diskte birden fazla mantıksal bölüm varsa, "Physical Disk" sayaçlarının yerine "Logical Disk" sayaçlarını kullanın. Hangi dosyaların daha sık kullanıldığını belirlemeye yardımcı olması için mantıksal disk sayaçlarına bakın. Büyük ölçüde okuma\yazma işlemlerinin yapıldığı diskleri bulduktan sonra, her mantıksal sürücüdeki yoğun etkinliğin okumadan mı yoksa yazmadan mı kaynaklandığını öğrenmek için okumaya ve yazmaya yönelik sayaçları kullanın. Meselâ "Logical Disk: Disk Write Bytes/sec." gibi. Bu sayaç ile seçtiğiniz mantıksal sürücüde her saniyede gerçekleşen diske yazma işleminin değerlerini alabilirsiniz.


SQL Server' ın neden olduğu disk etkinliklerini ayıklamak
SQL Server bileşenlerinin neden olduğu giriş\çıkış işlemlerinin miktarını aşağıdaki iki sayaç ile izleyebilirsiniz:

- SQL Server: Buffer Manager: Page reads/sec
- SQL Server: Buffer Manager: Page writes/sec
Eğer bu sayaçların verdikleri değerler donanımsal olarak giriş\çıkış işlemlerinin kapasite sınırına yaklaşırsa, giriş\çıkış işlemlerini azaltmayı denemek için uygulamanızı ve veritabanınızı gözden geçirin. Meselâ daha iyi Index' ler veya Normalizasyon kullanabilirsiniz, disk donanımınızın giriş\çıkış kapasitesini arttırabilir veya da daha fazla hafıza ekleyebilirsiniz. Veritabanınız hakkında bir analiz yapmak için SQL Server 2005 Standard ve Enterprise Edition ile birlikte gelen Database Tuning Advisor' ı kullanabilirsiniz.

RAID' ler
RAID sistemlere de çok özetle değinmeden geçemeyeceğim, çünkü bu konuda habergruplarından çok soru geliyor. RAID' lerin yapılarını anlatmayacağım, ama genel kurallardan bahsedeceğim. Kullanacağınız RAID sistemi de giriş\çıkış işlemlerini doğrudan etkiler. Bazı arkadaşlar şuna benzer sorular soruyor: "5 tane diskimiz var, hangi RAID' i kursak daha iyi olur?".

Maalesef buna cevap vermek çok zor, çünkü önce RAID kurulmaz. Önce sistem incelenir, hangi işlemler daha ağırlıklı, okuma mı yoksa yazma mı. Yeterli disk var mı? Eğer varsa ve güçlü bir SQL Server gerekiyorsa, o zaman ideal olanı veritabanına ait veri ve kayıt dosyalarını ayırmaktır. Kayıt (Transaction Log) dosyalarına daha ziyade yazma işlemi yapılır. Yazma işlemleri için en uygun RAID ise RAID1' dir. Böylece hem otomatik yedeklemeniz olur, hem de bir diskinizin bozulması sisteminizin çökmesine neden olmaz.

Veri dosyaları için ise duruma göre RAID-5 veya RAID-10 önerilir. Neden "duruma göre" dedim? Çünkü bunun duruma göre değiştiğini gördüm. RAID-5 okuma için iyidir, RAID-10 ise yazma\okuma işlemlerinin karışık yapıldığı ortamlara en uygun RAID' tir. İki RAID' le de sisteminiz yedekli ve güvenilir çalışır (Redundancy).

Bunlar genel kanıdır, genelde de doğrudur. Fakat doğru olmadıkları yerleri de gördüm. Farklı kişilerin farklı ortamlarda yaptıkları analiz raporlarında, bazı donanımlarda RAID-5 ile daha iyi sonuç alındığına şahit oldum. Bu nedenle düz mantık kararlar vermeden önce, eğer imkânınız varsa donanımlarınızda RAID testleri yapmanızı tavsiye ederim.

Özet
System Monitor' de, bu makalede söz ettiğimden çok çok daha fazla sayaç bulunmaktadır. Bu sayaçları çeşitli amaçlar için kullanabilirsiniz. Sistem Monitor içerisinde her sayaca ait kısa bir açıklama da bulunmaktadır. Sayaçları kurcalamanızı tavsiye ederim. Çok yararlı bir araç, sisteminizde performans sıkıntısı yaşadığınızda ilk başvuracağınız temel araçlardandır.

RAID' leri daha iyi anlayabilmek için doğrudan RAID' ler hakkında yazılan makaleleri okumanızı öneririm. Böylece, RAID' lerin yapıları hakkında daha fazla bilgi edinmiş olursunuz. Tabi RAID için kullanılan donanımlar hakkında da fikirler edinirsiniz.



Ekrem Önsoy

Yardımcı Kaynak: BOL

SQL Server does not exist or access denied. ConnectionOpen (Connect())..

BİLGİ:
SQL Server does not exist or access denied. ConnectionOpen (Connect())..

Windows Event ID:
"Event ID: 17052 SQL Server evaluation period has expired."

AÇIKLAMA:
Enterprise Manager' ı açarak SQL Server 2000 Instance' ınıza bağlanmaya çalıştığınızda böyle bir mesaj alabilirsiniz.

Windows Olay Günlüğünü açtığınızda da bahsi geçen bilgi mesajını görebilirsiniz.

Bu, SQL Server Evaluation Edition' ınınızın 180 günlük deneme süresinin sona erdiği anlamına gelmektedir.

"Cannot find the principal 'test', because it does not exist or you do not have permission. (Microsoft SQL Server, Error: 15151)"

HATA MESAJI:
"Cannot find the principal 'test', because it does not exist or you do not have permission. (Microsoft SQL Server, Error: 15151)"

AÇIKLAMA:
Bu hata mesajını, SQL Server Management Studio kullanarak bir bir veritabanını bir SQL Server Instance' ına iliştirmeye çalışırken alabilirsiniz.

Nedeni ise, SSMS' te, veritabanınızı iliştirmek için açmış olduğunuz "Attach Databases" penceresindeki "Databases to Attach" bölümünde bulunan "Owner" seçeneğinde geçersiz bir "Login" hesabının bulunmasıdır.

ÇÖZÜM:
Sorunu çözmek için, "Attach Databases" penceresindeki "Databases to Attach" bölümünde bulunan "Owner" seçeneğinde, SQL Server Instance' ınızdaki geçerli ve yeterli haklara sahip bir "Login" hesabını seçtiğinizden emin olun.

7 Mart 2008 Cuma

Microsoft 2008 Sunucu ve Yazılım Platformu Lansmanı

Merhaba Arkadaşlar,


Microsoft Türkiye, aşağıda ayrıntılarını verdiğim tarihte yeni sunucu ve yazılım ortamlarının tanıtımlarını yapacaktır. Temel olarak konular Windows Server 2008, SQL Server 2008 ve Visual Studio 2008' i kapsayacaktır.

Lansmana ben de katılacağım, sizlerle de tanışmayı isterim.

Lansman tarihi ve yeri bilgileri:
12 Mart 2008 Çarşamba 09:00 - 12 Mart 2008 Çarşamba 16:00 İstanbul

Lütfi Kırdar Kongre ve Sergi Sarayı

Harbiye
İstanbul 34267
Türkiye

Etkinliğe kayıt olmak için tıklayın!

Görüşmek dileğiyle
Ekrem Önsoy

"SQLVDI: Loc=CVDS::Cleanup. Desc=Release(ClientAliveMutex). ErrorCode=(288)Attempt to release mutex not owned by caller."

HATA MESAJI:
"SQLVDI: Loc=CVDS::Cleanup. Desc=Release(ClientAliveMutex). ErrorCode=(288)Attempt to release mutex not owned by caller."

ÇÖZÜMÜ:
Bu sorun için bir FIX mevcuttur:

http://support.microsoft.com/kb/934396/en-us