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

Checkdb'nin En Son Yapıldığı Tarihi Bulma

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.

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

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'

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


26 Nisan 2012 perşembe günü "SQL Server 2012 Yenilikleri" adıyla sunduğum webcast'in videosuna Çözümpark'tan ulaşabilirsiniz. Webcast'i kaçıran yada tekrardan izlemek isteyenler buyrun.


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]

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.

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

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)

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:

Kümülatif satır toplamları 7'den küçük olan kayıtları bulalım:

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:

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:
  • start
  • stop
  • pause
  • continue
  • querystate
xp_servicecontrol  extended stored procedure ile dilediğiniz servisi dilediğiniz duruma getirip, durumu hakkında bilgi alabilirsiniz.

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