SQL Server 2008 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
SQL Server 2008 etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

2011-10-07

SQL Server 2008 Service Pack 3 (SP3) Çıktı!

Microsoft SQL Server 2008 Service Pack 3 (SP3) i http://www.microsoft.com/download/en/details.aspx?id=27594 adresinden indirebilirsiniz.

SQL Server 2008 SP3 ile giderilen hataların listesine http://support.microsoft.com/?kbid=2546951 adresinden ulaşabilirsiniz.


SQL Server 2008 SP3 ile ilgili Microsoft'un açıklaması aşağıdadır:

2011-10-02

Windows Authentication Olarak Bağlanan Kullanıcının Security Grubunu Bulma

SQL Server veritabanı sistemine windows authentication olarak bağlanan bir kullanıcının security grubunu iki farklı şekilde bulabilirsiniz.

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-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.

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.

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)

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:

  1. Query ekranında Change Connection ile Server name alanına ADMIN:ServerName şeklinde bilgileri girip erilebilirsiniz.
  2. 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-07-29

Security Vulnerabilities of Any Database Platform


NIST(National Institute of Standards and Technology)'nin, 2002 ile Haziran 2010 döneminde veritabanı teknolojisi üzerinde toparladığı istatistikler doğrultusunda SQL Server en güvenli veri tabanı olarak ortaya çıkıyor.

Konu ile ilgili kaynak makaleler:
Kaynak: Microsoft TechNet Aylık BT E-Bülteni - Temmuz 2011 Sayısı‏





Microsoft, SQL Server 2000'den bu yana veritabanı tarafında çok büyük gelişmeler kaydetti. Bana göre SQL Server, SQL Server 2005 ile tam bir enterprise ürün haline geldi. SQL Server 2008 ve SQL Server 2008 R2 ile birlikte kullanışlı ve ihtiyaç olan yeni özellikler eklendi(SQL Server 2008 İle Birlikte Gelen Yenilikler'i ilgili yazımdan okuyabilirsiniz. Bu sene sonunda yada 2012 başında çıkması beklenen ve kod adı Denali olan yeni sürümde daha kullanışlı ve işe yarar yeni özellikler gelecek). Bu gelişmelere paralel olarak zaman içerisinde rüştünü ispat eden SQL Server KOBI'lerden tutun da büyük şirketlere kadar hatta bankalarda kullanım alanı buldu. Halihazırda bildiğim kadarıyla ülkemizdeki 4 banka ana bankacılık veritabanı sistemlerini SQL Server üzerinde koşturuyor.

2011-07-19

SQL Server 2008 SP1 & SP2 için CU Çıktı!

SQL Server 2008 SP1 ve  SP2 için yeni CU'ler yayınladı. SQL Server 2008 SP1 için CU15; SQL Server 2008 SP2 için CU5 yayınlandı. CU'ler ile ilgili makalelere aşağıdaki bağlantılardan ulaşabilirsiniz:

KB #2555406 : Cumulative update package 15 for SQL Server 2008 Service Pack 1

KB #2555408 : Cumulative update package 5 for SQL Server 2008 Service Pack 2

2011-07-07

SQL Server Kurulu Sunucularda Antivirus Kurmak

Veritabanı sunucunuza bir virüsün musallat olup sisteminizi işleyemez hale getirmesi, sizin için en kötü senaryolardan birisi olsa gerek. Veritabanı sisteminiz çalışmadığı zaman kurumda hayat durur. Çünkü kurumdaki tüm uygulamaların can damarı veritabanıdır. Can damarından vurulmuş bir kurumun iş sürekliliği yada disaster'ı yoksa toparlanması çok zor olabilir. Veritabanı sistemi ayakta olmayan bir kurum ayakta değildir! Bu yüzden veritabanı sisteminizi olası virüs saldırılarına karşı korumanız gerekir. SQL Server kurulu veritabanı sunucularına antivirüs kurmaya çoğu DBA soğuk bakar. Soğuk bakmasının temel sebepleri: antivirüs programının ne zaman ne yapacağının tam olarak kestirilememesi, veritabanı sistemine ait bir bileşenin antivirüs tarafından blocklanabilme ihtimali, veritabanı sistem performansının düşme riski vb. gibi risklerdir. Bu riskleri minimize etmek için antivirüs programlarında çeşitli ayarların yapılması gerekir. SQL Server kurulu sunuculardaki antivirüs'lerde aşağıdaki adımlar exclude edilmelidir:
  • SQL Server Veri Dosyaları
    • .mdf
    • .ldf
    • .ndf
  • SQL Server Backup Dosyaları
    • .bak
    • .trn
  • Fulltext Katalog Dosyaları
  • Eğer kurulu ise SQL Analysis veri dosyalarının barındığı dizin
  • Eğer sunucu cluster ise
    • Quorum Disk Sürücüsü
    • C:\Windows\cluster
Belirli testlerden sonra tüm standalone, cluster ve geocluster veritabanı sunucularımıza antivirüs kurduk. Tabi antivirüs kurmanın yanında veritabanı sunucularında aşağıdaki adımları da uygulayarak veritabanı sisteminizi daha güvenli hale getirebilirsiniz:
  1. Genel internet erişiminin engellenmesi,
  2. Firewall'ın açık hale getirilmesi,
  3. Diğer sunucular tarafından dosya çalıştırmaya izin vermeme, SQL'e erişim dışında bir yetki vermeme,
  4. Veritabanı sunucusunun HTTP server olarak kullanılmaması(IIS yada Apache çalıştırmama),
  5. Veritabanı sunucusunda file sharing'den kaçınmak.

2011-07-02

SQL Server'da Görevler Ayrılığı (Separation of Duties)

Güvenlik giderek kurumlar için daha da çok önem kazanmaktadır. Bu doğrultuda kurumlar önemli verilerini korumak amacıyla kullanıcı ve yöneticilerin yetkilerini minimum seviyeye çekmek istemektedirler.

En basit ifadesiyle görevler ayrılığı ilkesi kurum için tehditleri ve güvenlik açıklarını önlemek üzere kullanıcıların yetkilerini düzenlemektir. Görevler ayrılığı ilkesini benimseyen kurumlar, tüm yetkilere sahip SQL Server DBA kullanıcılarının yetkilerini de düzenlemeye ihtiyaç duymaktadırlar.

SQL Server 2008 R2 yasal uyumluluk ve güvenlik uygulamalarını gerçekleştirmek üzere gerekli olan tüm araçları bünyesinde sunmaktadır. Görevler Ayrılığı ilkesinin gereksinimlerini uygulayarak verilerin korunmasını sağlarken, DBA kullanıcılarının da verimli çalışmaya devam edebilmeleri için neler yapılması gerektiğine dair sunduğumuz makale için: SQL Server Seperation of Duties

Kaynak: Microsoft TechNet

2011-06-23

SQL Server Agent Job, Schedule'ı Bittiği Halde Çalışıyor!

Bir SQL Server Agent job tanımladınız. Job frekansını recuring olarak set ettiniz. Job schedule'ını daily olarak ayarladınız. Job'ın çalışması için başlangıç ve bitiş tarihleri verdiniz. Job'ınızın bitiş tarihi bittikten sonra SQL Server Agent servisini restart ettiniz.  İşte tam bu noktada film kopuyor! O da ne, job'ınızın en son çalışma tarihi geçildiği halde job'ınız hala çalışmaya devam ediyor. Job Activity Monitor'de baktığınızda job'ınızın Next Run ı olmayacak ama Last Run ı sürekli olacak. Bu durum SQL Server Agent servisinin bir bug'ı ve bu bug Microsoft tarafından teyid edilmiş durumda. Sorun SQL Server Agent Job servisinin schedule algoritmasının hata üretmesinden kaynaklanıyor.

Çözüm: Aşağıdaki sürümler için ilgili Cumulative Update'leri yüklemek:
  1. SQL Server 2008 SP1 için CU 11 yüklemek
  2. SQL Server 2008 SP2 için CU 2 yüklemek
  3. SQL Server 2008 R2 için CU 6 yüklemek

2011-05-21

Yetki Kontrolü Yapma

/*
Bir veritabanında Delete yetkisi olan kullanıcıları aşağıdaki SQL kod  ile bulabilirsiniz:
*/

SELECT
a.*,
b.*
FROM sys.database_principals a
INNER JOIN sys.database_permissions b ON b.grantee_principal_id = a.principal_id
WHERE b.permission_name = 'DELETE'

2011-05-02

Microsoft SQL Server 2005/2008 Failover Clustering Workshop

Batuhan Yıldız'ın konuşmacı olacak katılacağı Microsoft SQL Server 2005/2008 Failover Clustering Workshop'unda olacağım.

Level: Up to 300
Tarih: 3-5 Mayıs 2011
Yer: Bellevue Residence, Aydın Sokak. No:7 Levent, 34340

Gündem:
Module 1: SQL Server High Availability Solutions
Module 2: Clustering Windows Server 2008 R2
Module 3: Configuring the Distributed Transaction Coordinator (MSDTC)
Module 4: Planning to Cluster SQL Server 2008
Module 5: Implementing a SQL Server 2008 Failover Cluster
Module 6: Rolling Upgrades and Updates to SQL Server 2008
Module 7: Maintaining and Troubleshooting a Clustered Instance of SQL Server 2008

2011-04-09

"The cluster resource of the Sql Server does not have a dependency on it" Hatası

Mevcut  cluster veritabanı sunucunuza yeni disklerin eklenmesi gerekebilir. Bu durumda disklerinizi Storage ekibinden alıp Cluster ekibine teslim ettiniz. Cluster ekibiniz de bu diskleri cluster a eklemiş olsun.  Bu yeni disklere başka sunuculardaki veritabanlarınızı restore yöntemiyle taşımak istiyorsunuz. Bu taşıma işlemi için detaylı düşünüp veritabanı kısmını ilgilendiren onlarca adımı tek tek yazıp; bu adımlarım scriptlerini çıkardınız. Bu scriptleri tek tek çalıştırıyorsunuz. Fakat restore adımında aşağıdaki hata ile karşılaşıyorsunuz:

Hata:
Msg 5184, Level 16, State 2, Line 1
Cannot use file 'X:\XXX.mdf' for clustered server. Only formatted files on which the cluster resource of the server has a dependency can be used. Either the disk resource containing the file is not present in the cluster group or the cluster resource of the Sql Server does not have a dependency on it.
Msg 3156, Level 16, State 3, Line 1
File 'XXX_data' cannot be restored to 'X:\XXX.mdf' . Use WITH MOVE to identify a valid location for the file.
Msg 5184, Level 16, State 2, Line 1
Cannot use file 'Y:\\XXX_1.ldf' for clustered server. Only formatted files on which the cluster resource of the server has a dependency can be used. Either the disk resource containing the file is not present in the cluster group or the cluster resource of the Sql Server does not have a dependency on it.
Msg 3156, Level 16, State 3, Line 1
File 'XXX_log' cannot be restored to 'Y:\\XXX_1.ldf'. Use WITH MOVE to identify a valid location for the file.
Msg 3119, Level 16, State 1, Line 1
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.


Çözüm: Yeni eklediğiniz X:\ ve Y:\ disklerinizi SQL Server Cluster kaynaklarına ekleyin ve işlem adımlarınıza kaldığınız yerden devam edin.

Benim gibi tüm adımları çıkarıp, bu adımların ne kadar süreceğini biliyorsanız; uzun sürecek adımlarda çayınızı alıp kemali afiyetle yudumlayabilirsiniz yada yürüyüş yapabilirsiniz.

2011-04-03

Tablodaki Bir Kayıtın Kapladığı Yeri Bulma

Herhangi bir tablonuzdaki bir kayıtın(row) ne kadar yer kapladığını(size) merak ediyorsanız aşağıdaki SQL ile bunu alabilirsiniz:

select sum(max_length) As ColumnSize
from sys.columns sc
where object_id=object_id('Musteri')


Bir veritabanındaki tüm tabloların row size'ını ise aşağıdaki SQL ile alabilirsiniz:

select object_name(object_id),
sum(max_length) As ColumnSize
from sys.columns sc
group by object_name(object_id)

2011-03-27

Fragmente Indeksleri Rebuild Etme

İndekslerin fragmente olması istenmeyen bir durumdur. Fragmente olan indexlerin belirli periyotlarda rebuild/reorganize edilmesi gerekir.

Veritabanızda fragmente oranı %30 un üzerinde üzerinde olan indeksleri bulup rebuild eden T-SQL kod aşağıdaki gibidir:

declare @SQLstmt varchar(max)

set @SQLstmt =''
select @SQLstmt =@SQLstmt + 'alter index ' + i.name + ' on ' + object_name(s.object_id ) + ' rebuild with(online=on);--pagecount:' + cast(s.page_count as varchar(16)) + '
'
from sys.dm_db_index_physical_stats(db_id(db_name()),null,null,null,null) s
inner join sys.indexes i on s.object_id=i.object_id and s.index_id=i.index_id
where s.avg_fragmentation_in_percent>30
and s.index_id>0
order by s.page_count

exec(@SQLstmt )

Dilerseniz aynı işlemi dinamik tek bir SQL cümlesi yerine cursor ile de halledebilirsiz.

2011-03-24

SQL Server Profiler Template Dosyaları Nerde Tutulur?

SQL Server Profiler uygulamasında oluşturmuş olduğumuz template'ler diskinizin belli bir lokasyonunda tutulur. Bu lokasyonlar SQL Server 2005 ve SQL Server 2008 için aşağıdaki gibidir:


SQL Server Profiler 2008 için template dizini:
C:\Documents and Settings\KullaniciKodunuz\Application Data\Microsoft\SQL Profiler\10.0\Templates\Microsoft SQL Server\100


SQL Server Profiler 2005 için template dizini:
C:\Documents and Settings\KullaniciKodunuz\Application Data\Microsoft\SQL Profiler\9.0\Templates\Microsoft SQL Server\90

2011-03-03

Password'u Boş Olan SQL Kullanıcılarını Bulma

SQL Server 2005/2008 de password u boş olan SQL kullanıcılarını aşağıdaki SQL ile bulabilirsiniz:

select name
from sys.sql_logins
where pwdcompare('', password_hash) = 1


Yine aynı şekilde şifresi abc olan SQL kullanıcıların listesini aşağıdaki SQL ile alabilirsiniz:

declare @password sysname
set @password ='abc'
select name
from sys.sql_logins
where pwdcompare(@password, password_hash) = 1

@password değişkenini zayıf şifreleri içerecek şekilde genişletirseniz sisteminizde zayıf/tamin edilebilir şifreleri olan SQL kullanıcıların listesini alıp bu şifrelerin güçlü şifreler ile değiştirilmesini sağlayabilirsiniz.

Güvenlik için veritabanı sunucularınızda bulunan tüm SQL kullanıcılarınız için password policy uygulamayı unutmayın!

.::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.