SQL Server'da bir rolün üyelerini aşağıdaki T-SQL ile bulabilirsiniz:
#DBA #SQL #Server #Performance #Tuning
2011-09-28
2011-09-27
Performance Tuning Webcast Videosu
14 Eylül 2011 saat 21:00'de yapmış olduğum SQL Server - Performance Tuning webcast'ini kaçıranlar yada tekrardan izlemek isteyenler Çözümpark'tan videosuna ulaşabilirler.
2011-09-19
Şema Adını Değiştirme (Change Schema Name)
SQL Server'da herhangi bir nesnenin şema adını aşağıdaki kod ile değiştirebilirsiniz:
ALTER SCHEMA [SchemaName_New] TRANSFER [SchemaName_Old].[ObjectName]
Not: Şeması değiştirilen nesneye ait tüm yetkiler uçacağından şemayı değiştirmeden yetkilere ait scriptleri çıkarmanızı tavsiye ederim.
ALTER SCHEMA [SchemaName_New] TRANSFER [SchemaName_Old].[ObjectName]
Not: Şeması değiştirilen nesneye ait tüm yetkiler uçacağından şemayı değiştirmeden yetkilere ait scriptleri çıkarmanızı tavsiye ederim.
2011-09-07
SQL Server 2008 SP2 Kurulum Hatası ve Çözümü
Bugün sanal ortamdaki stand-alone bir SQL Server 2008 sunucumuza SP2 yüklemesi yaparken yüklemenin normalden fazla uzaması beni şüphelendirdi. Hemen Windows Event loglarına baktım. Kurulum yaptığım andan itibaren alınan hata ve uyarıları inceledim. Aşağıdaki iki hata dikkatimi çekti:
Hata-1:
"Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online."
Hata-2:
"Script level upgrade for database 'master' failed because upgrade step 'sqlagent100_msdb_upgrade.sql' encountered error 598, state 1, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion."
Hatalar ile ilgili web'de araştırma yaptım fakat master veritabanını rebuild etmek dışında pek işe yarar ve dişe dokunur bir bilgiye rastlamadım ve bu bahsedilen işlem benim en son uygulayacağım yöntemlerimin arasındaydı(Her yöntem yerinde ve zamanında uygulanmalı). Geri dönüş için senaryomun ilk adımında sanal sunucunun snapshot'ı bulunuyordu. İkinci sırada ise tüm veritabanların full backup'larını bulunduruyordum(Tüm sistem veritabanları, resource veritabanı da dahil).
Sunucu sadece mesai saatlerinde kullanıldığı için zamanım genişti. SP2 kurulumunun hatalı da olsa bitmesini beklemek istedim. Normalde ortalama 5 dakikada yaptığım kurulum için tam tamına 1 saat 15 dakika bekledim fakat kurulum takıldığı noktadan bir adım bile ilerlemedi. SP2 kurulumunu Task Manager üzerinden hiç istemesem de manuel olarak sonlandırmak zorunda kaldım. SQL Server'a ağlanmaya çalışıldığında "script update oluyor" hatasını verip yeni bağlantı kabul etmiyordu. SP2 yeniden başlattığımda ise SP2 zaten yüklenmiş uyarısını veriyordu. Bu tür durumlarda olacak en kötü şey bu tür kararsız bir durumun oluşmasıdır.
Sistemi snapshot'tan geri döndürtüp; hataya neden olabilecek durumları incelemeye başladım. Birkaç durumdan sonra "Database Default Location" da Data ve Log dizinlerinin sistem üzerinde mevcut olmadığını keşfettim. "Database Default Location" ları mevcut olan bir dizin olarak değiştirdim ve SP2 setup'ını tekrardan çalıştırdım. SP2 kurulumu 5 dakika içerisinde başarılı bir şekilde tamamlandı(Bu arada sorun esnasında Microsoft case'ı açacak mailim hazırdı fakat sorunu kendim çözdüğüm için ihtiyaç kalmadı).
Hem SQL Server 2008'ın "Database Default Location"'ı olmayan bir dizin olarak kabul etmesi hem de SP2'nin olmayan bir dizinden dolayı bir türlü bitmemesi ayrı ayrı birer bug. Bu bugları en kısa zamanda Microsoft'a feedback olarak bildireceğim.
Bu tür bir sorunla karşılaşmamak için SP2 kurulumunda "Database Default Location" ın geçerli bir adres olup olmadığını SP geçişinin ilk adımına eklemenizi tavsiye ederim.
Hata-1:
"Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online."
Hata-2:
"Script level upgrade for database 'master' failed because upgrade step 'sqlagent100_msdb_upgrade.sql' encountered error 598, state 1, severity 25. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion."
Hatalar ile ilgili web'de araştırma yaptım fakat master veritabanını rebuild etmek dışında pek işe yarar ve dişe dokunur bir bilgiye rastlamadım ve bu bahsedilen işlem benim en son uygulayacağım yöntemlerimin arasındaydı(Her yöntem yerinde ve zamanında uygulanmalı). Geri dönüş için senaryomun ilk adımında sanal sunucunun snapshot'ı bulunuyordu. İkinci sırada ise tüm veritabanların full backup'larını bulunduruyordum(Tüm sistem veritabanları, resource veritabanı da dahil).
Sunucu sadece mesai saatlerinde kullanıldığı için zamanım genişti. SP2 kurulumunun hatalı da olsa bitmesini beklemek istedim. Normalde ortalama 5 dakikada yaptığım kurulum için tam tamına 1 saat 15 dakika bekledim fakat kurulum takıldığı noktadan bir adım bile ilerlemedi. SP2 kurulumunu Task Manager üzerinden hiç istemesem de manuel olarak sonlandırmak zorunda kaldım. SQL Server'a ağlanmaya çalışıldığında "script update oluyor" hatasını verip yeni bağlantı kabul etmiyordu. SP2 yeniden başlattığımda ise SP2 zaten yüklenmiş uyarısını veriyordu. Bu tür durumlarda olacak en kötü şey bu tür kararsız bir durumun oluşmasıdır.
Sistemi snapshot'tan geri döndürtüp; hataya neden olabilecek durumları incelemeye başladım. Birkaç durumdan sonra "Database Default Location" da Data ve Log dizinlerinin sistem üzerinde mevcut olmadığını keşfettim. "Database Default Location" ları mevcut olan bir dizin olarak değiştirdim ve SP2 setup'ını tekrardan çalıştırdım. SP2 kurulumu 5 dakika içerisinde başarılı bir şekilde tamamlandı(Bu arada sorun esnasında Microsoft case'ı açacak mailim hazırdı fakat sorunu kendim çözdüğüm için ihtiyaç kalmadı).
Hem SQL Server 2008'ın "Database Default Location"'ı olmayan bir dizin olarak kabul etmesi hem de SP2'nin olmayan bir dizinden dolayı bir türlü bitmemesi ayrı ayrı birer bug. Bu bugları en kısa zamanda Microsoft'a feedback olarak bildireceğim.
Bu tür bir sorunla karşılaşmamak için SP2 kurulumunda "Database Default Location" ın geçerli bir adres olup olmadığını SP geçişinin ilk adımına eklemenizi tavsiye ederim.
2011-09-06
Kurumunuzdaki En Büyük Veritabanı Anketi
"Kurumunuzdaki En Büyük Veritabanının Boyutu Kaç GB?" diye sormuştum. Ankete katılanların %27'sinin kurumlarındaki en büyük veritabanın boyutunun 1 TB - 5 TB arasında olduğunu görüyoruz. Evet, anket sonucundaki 10 TB'dan büyük kurumların oranı da azımsanacak gibi değil.
Kurumların veri boyutları hızlı bir şekilde büyüyor. Bir zamanlar Gigabyte boyutundaki veriler bizim için hayalken şu an bırakın kurumları kişişel olarak Terabyte'lık resim, müzik, video vs dosyalarımız oluyor. Şu an 1-5 TB boyutunda olan veritabanı büyüklükleri 5 yıl sonra 10-20 TB; 10 yıl sonra ise 50 TB boyutunu geçecektir. Veri boyutundaki bu değişimleri iyi analiz edip ona göre depolama alanları, veritabanı stratejileri, backup alma stratejilerini geliştirmek gerekir.
Düzenlediğim ankete katılan herkese teşekkür ederim. Yeni anketlerde görüşmek dileğiyle...
Kurumların veri boyutları hızlı bir şekilde büyüyor. Bir zamanlar Gigabyte boyutundaki veriler bizim için hayalken şu an bırakın kurumları kişişel olarak Terabyte'lık resim, müzik, video vs dosyalarımız oluyor. Şu an 1-5 TB boyutunda olan veritabanı büyüklükleri 5 yıl sonra 10-20 TB; 10 yıl sonra ise 50 TB boyutunu geçecektir. Veri boyutundaki bu değişimleri iyi analiz edip ona göre depolama alanları, veritabanı stratejileri, backup alma stratejilerini geliştirmek gerekir.
Düzenlediğim ankete katılan herkese teşekkür ederim. Yeni anketlerde görüşmek dileğiyle...
2011-09-04
Webcast: SQL Server - Performance Tuning
14 Eylül Çarşamba günü 21:00-22:00 saatleri arasında "SQL Server - Performance Tuning" konulu webcast'i sunuyor olacağım. Webcast'e SQL Server'daki Performace Tuning'in Query Tuning tarafına ağırlık verilecektir.
Aşağıdaki bağlantıyı kullanarak vereceğim webcast'e erişebilirsiniz:
https://www.livemeeting.com/cc/mvp/join?id=2W2SHJ&role=attend&pw=2NM%7E%60JK%7Bt
Ajanda aşağıdaki gibi olacak:
Aşağıdaki bağlantıyı kullanarak vereceğim webcast'e erişebilirsiniz:
https://www.livemeeting.com/cc/mvp/join?id=2W2SHJ&role=attend&pw=2NM%7E%60JK%7Bt
Ajanda aşağıdaki gibi olacak:
- Performance Tuning için neleri kullanıyoruz?
- İyi performans için neleri kullanmalıyız?
- Kötü performans için nelerden kaçınmalıyız?
- Table Hint kullanımında nelere dikkat etmeliyiz?
- Temp Table, Table Variable kullanırken nelere dikkat etmeliyiz?
- Soru-Cevap
2011-08-24
SQL Server 2008 Service Pack 3 CTP Versiyonu Görücüye Çıktı
Microsoft, SQL Server 2008 Service Pack 3'ün CTP versiyonu yayınladı. SP3 CTP; SP2'den sonra çıkan Cumulative Updates 1, 2, 3 ve 4'ü içeriyor.
SQL Server 2008 SP3 CTP versiyonuna http://www.microsoft.com/download/en/details.aspx?id=27150 adresinden ulaşıp indirebilirsiniz. SQL Server 2008 SP3 CTP versiyonu ile düzeltilen hataların listesine http://support.microsoft.com/kb/2546945 adresinden ulaşbilirsiniz.
SQL Server 2008 SP3 CTP versiyonuna http://www.microsoft.com/download/en/details.aspx?id=27150 adresinden ulaşıp indirebilirsiniz. SQL Server 2008 SP3 CTP versiyonu ile düzeltilen hataların listesine http://support.microsoft.com/kb/2546945 adresinden ulaşbilirsiniz.
2011-08-18
Veritabanı Adını Değiştirme - Change Database Name
Bir çok yerde ismi değiştirilecek veritabanı önce single_user mode alınıp ardından isim değişikliği yapacak T-SQL kodlar paylaşılıyor. Evet, ismi değiştirilecek veritabanı adını single_user mode alıp değiştirebilirsiniz hatta SQL Server ile ilgili bir çok kaynakta Master veritabanını seçtirerek single_user moda alma şeklinde yapılmış. Fakat sakın ola master veritabanı seçili iken ismini değiştireceğiniz veritabanını single_user moda almayın; aşağıdaki gibi hata mesajları alırsınız:
Hata Mesajı-1:
“Msg 5064, Level 16, State 1, Line 1
Changes to the state or options of database 'databasename' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.”
Hata Mesajı-2:
"Msg 1205, Level 13, State 68, Line 1
Transaction (Process ID XXX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed."
Bu durumda ilgili veritabanına tüm erişimleri kesmeden veritabanı ismini değiştirip multi_user moda alamazsınız. Önce single_user moda alıp veritabanını ismini değiştirecekseniz ilgili scriptinizi ismini değiştirmek istediğiniz veritabanını seçerek(USE) single_user mode alınız. Bu durumda single_user sizin mevcut bağlantınız olur. Bu tür sorunları ve sistem kesintisine mahal vermemek için aşağıdaki iki scripten dilediğinizi kullanıp uygulayabilirsiniz:
Script-1:
use [master]
go
-- set database to restricted_user mode
alter database [databasename] set restricted_user with rollback immediate
-- rename database name
alter database [databasename] modify name = [databasename_new]
--set database to multi-user mode
alter database [databasename] set multi_user with rollback immediate
Script-2:
use [databasename]
go
-- set database to restricted_user mode
alter database [databasename] set single_user with rollback immediate
-- rename database name
alter database [databasename] modify name = [databasename_new]
--set database to multi-user mode
alter database [databasename] set multi_user with rollback immediate
Not: İlgili veritabanını kullanmaya çalışan session'ları aşağıdaki kod ile sonlandırabilirsiniz:
declare @tsql varchar(max)=''
select distinct @tsql = @tsql + 'kill ' + cast(request_session_id as varchar(16)) +';
'
from sys.dm_tran_locks
where resource_database_id=db_id('databasename')
group by request_session_id
exec(@tsql)
Hata Mesajı-1:
“Msg 5064, Level 16, State 1, Line 1
Changes to the state or options of database 'databasename' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.”
Hata Mesajı-2:
"Msg 1205, Level 13, State 68, Line 1
Transaction (Process ID XXX) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed."
Bu durumda ilgili veritabanına tüm erişimleri kesmeden veritabanı ismini değiştirip multi_user moda alamazsınız. Önce single_user moda alıp veritabanını ismini değiştirecekseniz ilgili scriptinizi ismini değiştirmek istediğiniz veritabanını seçerek(USE) single_user mode alınız. Bu durumda single_user sizin mevcut bağlantınız olur. Bu tür sorunları ve sistem kesintisine mahal vermemek için aşağıdaki iki scripten dilediğinizi kullanıp uygulayabilirsiniz:
Script-1:
use [master]
go
-- set database to restricted_user mode
alter database [databasename] set restricted_user with rollback immediate
-- rename database name
alter database [databasename] modify name = [databasename_new]
--set database to multi-user mode
alter database [databasename] set multi_user with rollback immediate
Script-2:
use [databasename]
go
-- set database to restricted_user mode
alter database [databasename] set single_user with rollback immediate
-- rename database name
alter database [databasename] modify name = [databasename_new]
--set database to multi-user mode
alter database [databasename] set multi_user with rollback immediate
Not: İlgili veritabanını kullanmaya çalışan session'ları aşağıdaki kod ile sonlandırabilirsiniz:
declare @tsql varchar(max)=''
select distinct @tsql = @tsql + 'kill ' + cast(request_session_id as varchar(16)) +';
'
from sys.dm_tran_locks
where resource_database_id=db_id('databasename')
group by request_session_id
exec(@tsql)
2011-08-12
Dedicated Administrator Connection (DAC)
Dedicated Administrator Connection (DAC) SQL Server 2005 ile birlikte gelen güzel, kullanışlı ve çoğu zaman hayat kurtarıcı bir özelliktir(Bir DBA için DAC, zorda kaldığında kullanabileceği bir arka kapıdır.).
SQL Server veritabanı sisteminiz bir şekilde kaynak yetersizliğinden dolayı cevap veremez halde iken(veritabanı sistemi yeni bir bağlantı kabul etmiyorken ) Dedicated Administrator Connection (DAC) ile SQL Server'a erişebilirsiniz. Bu tür durumlarda DAC, çoğu zaman sorunu çözmek için hayat kurtarıcı olur. DAC a default olarak ilgili veritabanı sunucusu üzerinden erişilebilir. DAC a uzaktan erişmek için ise sp_configure' da "remote admin connections" özelliğini aşağıdaki gibi açmak gerekir:
sp_configure 'remote admin connections',1
reconfigure;
SQL Server'a DAC ile iki şekilde ulaşabilirsiniz:
SQL Server veritabanı sisteminiz bir şekilde kaynak yetersizliğinden dolayı cevap veremez halde iken(veritabanı sistemi yeni bir bağlantı kabul etmiyorken ) Dedicated Administrator Connection (DAC) ile SQL Server'a erişebilirsiniz. Bu tür durumlarda DAC, çoğu zaman sorunu çözmek için hayat kurtarıcı olur. DAC a default olarak ilgili veritabanı sunucusu üzerinden erişilebilir. DAC a uzaktan erişmek için ise sp_configure' da "remote admin connections" özelliğini aşağıdaki gibi açmak gerekir:
sp_configure 'remote admin connections',1
reconfigure;
SQL Server'a DAC ile iki şekilde ulaşabilirsiniz:
- Query ekranında Change Connection ile Server name alanına ADMIN:ServerName şeklinde bilgileri girip erilebilirsiniz.
- DOS komut satırında SQLCMD ile -A (Administrator) parametresini vererek erişebilirsiniz.
Örnek : sqlcmd -S ServerName -U UserName -P Password -A
DAC ile ilgili bilinmesi gerekenler:
- Her bir SQL Server instance'ı için aynı anda sadece bir adet DAC erişimi yapılabilir.
- DAC ile erişecek kullanıcının sysadmin rolüne sahip olması gerekir.
- DAC ile kullanabileceğiniz komutlar sınırlıdır. Örneğin DAC ile RESTORE, BACKUP komutlarını kullanamazsınız.
- DAC default 1434 nolu portu kullanır. DAC'ın hangi portu kullandığını SQL Server Error Log'undan öğrenebilirsiniz. SQL Server servisi başlatıldığında DAC ile ilgili olarak error log'a aşağıdaki gibi mesajı yazar:
Dedicated admin connection support was established for listening locally on port 1434. - Express sürümünde 7806 nolu trace flag'ı kullanmadan DAC ı kullanamazsınız.
2011-08-11
Bir Tablodaki Kümülatif Satır Toplamını Bulma
Yazılım geliştiren bir arkadaşın "Bir tablodaki kümülatif satır toplamı belli değerin altında olan kayıtları nasıl bulabilirim?" sorusuna cevap bulmak için aşağıdaki gibi bir test tablosu oluşturdum:
create table [dbo].[TableCumulative](
[id] [int] identity(1,1) not null,
[urunkodu] [varchar](16) null,
[adet] [int] null
) on [primary]
Oluşturduğumuz tablomuzdaki verilerimiz aşağıdaki gibi olsun:
TableCumulative tablosundaki adet alanının kümülatif satır toplamlarını aşağıdaki SQL kodu ile bulabiliriz:
select id,
urunkodu,
adet,
select sum(x.adet) from tablecumulative as x where x.id <= s.id and x.urunkodu=s.urunkodu) as cumulativesum
from tablecumulative as s
order by id
Sorgu Sonucu:
select *
from(
select id,
urunkodu,
adet,
(select sum(x.adet) from tablecumulative as x where x.id <= s.id and x.urunkodu=s.urunkodu) as cumulativesum
from tablecumulative as s
)drv
where cumulativesum <=7
Sorgu Sonucu:
create table [dbo].[TableCumulative](
[id] [int] identity(1,1) not null,
[urunkodu] [varchar](16) null,
[adet] [int] null
) on [primary]
Oluşturduğumuz tablomuzdaki verilerimiz aşağıdaki gibi olsun:
TableCumulative tablosundaki adet alanının kümülatif satır toplamlarını aşağıdaki SQL kodu ile bulabiliriz:
select id,
urunkodu,
adet,
select sum(x.adet) from tablecumulative as x where x.id <= s.id and x.urunkodu=s.urunkodu) as cumulativesum
from tablecumulative as s
order by id
Sorgu Sonucu:
Kümülatif satır toplamları 7'den küçük olan kayıtları bulalım:
from(
select id,
urunkodu,
adet,
(select sum(x.adet) from tablecumulative as x where x.id <= s.id and x.urunkodu=s.urunkodu) as cumulativesum
from tablecumulative as s
)drv
where cumulativesum <=7
Sorgu Sonucu:
Habersiz
Günde bir taş-ı bina-yı ömrümün düşdi yire
Can yatar gafil binası oldı viran bi-haber
Dil bekası Hak fenası istedi mülk-i tenim
Bir devasız derde düştüm ah ki Lokman bi-haber
Bir ticaret kılamadım nakd-i ömür oldı heba
Yola geldum lakin göçmüş cümle karban bi-haber
Kös-i rihlet çaldı mevt amma henüz can bi-haber
Asker-i azaya lerze düşdi sultan bi-haber
Ağlayıp nalan edip düştün yola tenha garib
Dide giryan sine püryan akıl hayran bi-haber
Azığum yok yazığum çok,yolda dürlü korku var
Yolımu alursa n'ola ger div ü şeytan bi-haber
Yol erü yolda gerekdür çağ-u çıplak aç-u tok
Mısri'ye gel didi sana çünkü canan bi-haber
Niyazi Mısri
Can yatar gafil binası oldı viran bi-haber
Dil bekası Hak fenası istedi mülk-i tenim
Bir devasız derde düştüm ah ki Lokman bi-haber
Bir ticaret kılamadım nakd-i ömür oldı heba
Yola geldum lakin göçmüş cümle karban bi-haber
Kös-i rihlet çaldı mevt amma henüz can bi-haber
Asker-i azaya lerze düşdi sultan bi-haber
Ağlayıp nalan edip düştün yola tenha garib
Dide giryan sine püryan akıl hayran bi-haber
Azığum yok yazığum çok,yolda dürlü korku var
Yolımu alursa n'ola ger div ü şeytan bi-haber
Yol erü yolda gerekdür çağ-u çıplak aç-u tok
Mısri'ye gel didi sana çünkü canan bi-haber
Niyazi Mısri
Kaydol:
Kayıtlar (Atom)
.::YASAL UYARI::.
©2004-2024 Mehmet GÜZEL, www.mehmetguzel.net
Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.
Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.