Aşağıdaki sorguyu ilgili veritabanınızda çalıştırarak o veritabanında çalıştırılan Checkdb'nin en son yapıldığı tarihi bulabilirsiniz.
#DBA #SQL #Server #Performance #Tuning
T-SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
T-SQL etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
2013-06-20
2013-04-30
Tempdb Veritabanına Çoklu Veri Dosyası Ekleme
Tempdb sistem veritabanına istediğiniz kadar veri dosyasını aşağıdaki T-SQL script ile ekleyebilirsiniz:
2013-01-12
Server Role Sahip Kullanıcıları Bulma
SQL Server'da herhangi bir server role(sysadmin, setupadmin, serveradmin, dbcreator, diskadmin, processadmin, securityadmin) sahip tüm kullanıcıları aşağıdaki sorgu ile bulabilirsiniz:
use master
go
select p.name,sp.name
from sys.server_principals p
inner join sys.server_role_members pr on p.principal_id= pr.member_principal_id
inner join sys.server_principals sp on pr.role_principal_id=sp.princi pal_id
where sp.type='R'
--SQL Server 2008 de test edildi.
2012-12-26
Silinen Bir SQL Modülünün Kodunu Geri Kurtarma
İki tarih arasında sildiğiniz trigger, stored procedure, view, function'ın kodunu aşağıdaki T-SQL kodu ile alabilirsiniz:
declare @StartDate Datetime='2012-01-01',
@EndDate Datetime='2013-01-01'
select convert(varchar(max),substring([rowlog contents 0],33,len([rowlog contents 0]))) as [script]
from fn_dblog(null,null)
where [operation]='lop_delete_rows' and [context]='lcx_mark_as_ghost'
and [allocunitname]='sys.sysobjvalues.clst'
and [transaction id] in (select distinct [transaction id] from sys.fn_dblog(null, null)
where context ='LCX_NULL'
and operation ='LOP_BEGIN_XACT'
and [transaction name]='DROPOBJ'
and convert(nvarchar(11),[Begin Time]) between @StartDate AND @EndDate)
and substring([RowLog Contents 0],33,len([RowLog Contents 0]))<>0
Not: T-SQL kod SQL Server 2012 ile test edildi.
declare @StartDate Datetime='2012-01-01',
@EndDate Datetime='2013-01-01'
select convert(varchar(max),substring([rowlog contents 0],33,len([rowlog contents 0]))) as [script]
from fn_dblog(null,null)
where [operation]='lop_delete_rows' and [context]='lcx_mark_as_ghost'
and [allocunitname]='sys.sysobjvalues.clst'
and [transaction id] in (select distinct [transaction id] from sys.fn_dblog(null, null)
where context ='LCX_NULL'
and operation ='LOP_BEGIN_XACT'
and [transaction name]='DROPOBJ'
and convert(nvarchar(11),[Begin Time]) between @StartDate AND @EndDate)
and substring([RowLog Contents 0],33,len([RowLog Contents 0]))<>0
Not: T-SQL kod SQL Server 2012 ile test edildi.
2012-07-30
SQL Server'da Full Text Search Kurulu mu?
SQL Server Instance'ınıza Full Text Search'ın(FTS) kurulu olup olmadığını aşağıdaki T-SQL ile bulabilirsiniz:
if (FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')=1)
print 'INSTALLED'
else
print 'NOT INSTALLED'
Aynı sonucu aşağıdaki T-SQL ile de alabilirsiniz:
if ((select serverproperty('IsFullTextInstalled')) = 1)
print 'INSTALLED'
else
print 'NOT INSTALLED'
if (FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')=1)
print 'INSTALLED'
else
print 'NOT INSTALLED'
Aynı sonucu aşağıdaki T-SQL ile de alabilirsiniz:
if ((select serverproperty('IsFullTextInstalled')) = 1)
print 'INSTALLED'
else
print 'NOT INSTALLED'
2012-06-21
SQL Server – Performance Tuning & Optimization Webcast Videosu
7 Haziran 2012 Perşembe günü sunduğum SQL Server – Performance Tuning&Optimization konulu webcast'i tekrar izlemek isteyenler veyahut webcast'i kaçıranlar webcast'e ait videoya Çözümpark'tan ulaşabilirler.
2012-06-19
SQL Server 2012 Yenilikleri Webcast Videosu
2012-05-03
Execution Planı Görmek İçin Hangi Yetkinin Olması Gerekir?
Execution planı görmek için ilgili kullanıcının minimum showplan yetkisinin olması gerekir. Bunun yanında dbcreator, db_owner yada sysadmin rollerinden birisine sahip olan bir kullanıcı da execution planları görebilir.
Execution planı görme yetkisini vermek için aşağıdaki kodu kullanabilirsiniz:
grant showplan to [KullaniciAdi]
Execution planı görme yetkisini vermek için aşağıdaki kodu kullanabilirsiniz:
grant showplan to [KullaniciAdi]
2012-04-26
"EXECUTE statement failed because its WITH RESULT SETS" Hatası ve Çözüm Yolu
SQL Server 2012'de sp çalıştırıp aşağıdaki gibi bir hata mesajı alıyorsanız sp'niz birden çok result döndürüyor siz ise WITH RESULT SETS içerisinde tek result döndürmeye çalışıyorsunuz. SP nizi inceleyip; SP'niz kaç adet result döndüyorsa WITH RESULT SETS te o kadar result döndürmelisiniz.
"Msg 11535, Level 16, State 1, Procedure ProductList, Line 10
EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), and the statement tried to send more result sets than this."
2012-02-23
SQL Server’da Bir Kaydın Fiziksel Konumunu Bulma
Bu makalemde undocumented komut ve fonksiyonlar yardımıyla SQL Server'da bir tablodaki bir kayıt satırının fiziksel konumunu nasıl bulunacağını ve fiziksel konumdan nasıl okunacağını aktaracağım.
2012-02-20
Bir Tablodaki İndekslerin Page Sayısını Bulma
Bu yazımda sizlere, zaman zaman benim de ihtiyaç duyduğum bir konuya değineceğim: Bir tabloda bulunan indeklerin her birisinin toplam page sayısı bulma.
2012-02-11
Veritabanlarımın Boyutu Kaç GB?
Bu yazımda SQL Server veritabanı sunucularınızda bulunan tüm veritabanlarının tek tek ve tamamının boyutunun T-SQL ile nasıl bulunacağına değineceğim.
2012-01-26
Veritabanım yada Session'ım Hangi Isolation Level'da?
Bu yazımda veritabanlarımızın ve açık olan bir session'ın Isolation Level'ının ne olduğuna değineceğim.
2011-12-28
SQL Server 2008 Backup Compression ile Yer ve Zamandan Tasarruf Sağlayın
Veritabanlarınızın boyutu zamanla büyüyorsa veritabanı yedeklerinizin boyutu da zamanla büyüyecektir. Büyüyen yedek boyutları sadece büyümekle kalmayıp yedekleme sürelerini ve network trafiğinizdeki yoğunluğu da artıracaktır.
2011-10-22
Domain Adını Bulma
SQL Server'da sunucunun bulunduğu domaini aşağıdaki iki T-SQL kod ile öğrenebilirsiniz:
2011-09-28
Bir Rolün Üyelerini Bulma (Find Role Members)
SQL Server'da bir rolün üyelerini aşağıdaki T-SQL ile 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-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-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:
2011-07-28
Stop / Start SQL Server Agent Service With T-SQL
Zaman zaman çalışan SQL Server Agent servisini durdurmak yada duran SQL Server Agent servisini ise başlatmak ihtiyacımız olur. Bu ihtiyacımızı sunucuya bağlanıp servisin durumunu değiştirmek yada Central Management Server altından ilgili sunucunun Central Management Server Actions, Service Control altından yapabiliriz. Ama tüm bu seçenekler biraz uzun ve uğraştırıcı olduğu için SSMS üzerinden T-SQL ile servislerimi nasıl yönetirim diyenler cevabını aşağıda bulabilir:
Durmuş olan SQL Server Agent servisini aşağıdaki extended stored procedure yardımıyla başlatabilirsiniz:
exec xp_servicecontrol N'start',N'SQLServerAGENT'
Çalışan SQL Server Agent servisini aşağıdaki extended stored procedure yardımıyla durdurabilirsiniz:
exec xp_servicecontrol N'stop',N'SQLServerAGENT'
xp_servicecontrol extended stored procedure aşağıdaki parametreleri alır:
Durmuş olan SQL Server Agent servisini aşağıdaki extended stored procedure yardımıyla başlatabilirsiniz:
exec xp_servicecontrol N'start',N'SQLServerAGENT'
Çalışan SQL Server Agent servisini aşağıdaki extended stored procedure yardımıyla durdurabilirsiniz:
exec xp_servicecontrol N'stop',N'SQLServerAGENT'
xp_servicecontrol extended stored procedure aşağıdaki parametreleri alır:
- start
- stop
- pause
- continue
- querystate
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.