Sql Server Aktif Kullanıcıların Bağlantılarını Kesmek

Sql server sunucumuz da bağlantı da olan kullanıcıların hangi program aracılığyla ,hangi bilgisayardan yaptığını vb izleyebilir  ve istersek dilediğimiz veritabanına bağlantı da olan kullanıcının bağlantısı kesebilir.   Özet olarak aktif bağlantıları görüntüleyelim

SELECT
nt_domain AS 'Domain'
,nt_username AS 'Kullanıcı Adı'
,hostname AS 'Bilgisayar Adı'
,program_name AS 'Kullanılan Program'
FROM
sys.sysprocesses
WHERE
nt_domain IS NOT NULL
AND nt_domain NOT IN('','NT AUTHORITY')
GROUP BY
nt_domain
,nt_username
,program_name
,hostname;

Çıktı sqlaktifbaglanti1     Detaylı olarak aktif bağlantıları görüntüleyelim

SELECT
nt_domain AS 'Domain'
,nt_username AS 'Kullanıcı Adı'
,hostname AS 'Bilgisayar Adı'
,loginame AS 'SQL User'
,program_name AS 'Kullanılan Program'
,login_time AS 'Giriş Tarih/Saati'
FROM
sys.sysprocesses
WHERE
nt_domain IS NOT NULL
AND nt_domain NOT IN('','NT AUTHORITY')
ORDER BY
login_time desc

Çıktı sqlaktifbaglanti3         bağlantının kesilmesi, MirAcle_HasssanTest databasenin de aktif bağlantı da olan BUSSINESSPC  hostname bağlantılarını keselim.

DECLARE @Database sysname

SET @Database = 'MirAcle_HasssanTest'

DECLARE @id int

SELECT @id = min(spid) from master.dbo.sysprocesses where dbid = db_id(@Database) and hostname ='BUSINESSPC'

WHILE @id IS NOT NULL

BEGIN EXECUTE ('KILL ' + @id)

SELECT @id = min(spid) from master.dbo.sysprocesses where dbid = db_id(@Database) AND spid > @id END

  Sql Aktif Kullanıcı İzleyici Uygulaması aktifkullaniciizlemeapp1 aktifkullaniciizlemeapp2     Download.     Software Developer Mustafa Demircioğlu www.mustafademircioglu.net www.mustafademircioglu.org mustafa.demircioglu@outlook.com

Sql Server Trigger Kullanımı

Trigger(tetikleyici) update,delete,insert gibi işlemler sonrasında devreye girerek bu tetikleme işlemiyle ilgii bize yeni eventlar oluşturmamıza olanak sağlar. Trigger oluşumları 2 ayrı tabloda tutulmaktadır. 1. Tablo inserted anlaşılacağı gibi bu tablo da insert olan kayıtlar tutulmaktır. 2.Tablomuz delected bu tabloda update ve delete işlemleri ilgli kayıtlar tutulmaktadır. senaryomuz, Tedarikçiden gelen ürünlerimizin çeki listelerinin yüklendiği bir palet tablomuz olsun, Ürünlerimizin stok hareketlerini tutuğumuz farklı bir tablomuz da insert , update ve delete işlemleri oluştuğunda ürünlere atadığımız referans aracılığıyla belirlediğimiz bir depoda ürünün güncel mevcut miktarını Palet Tablomuzda da güncelleyeceğimiz bir triger oluşturalım. tetiklenecek olan Stok Hareket tablomuzda triggerımızı yazmaya başlayalım,
USE [MustafaDemircioglu_DataTest]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[AcleUpd_BarkodPalet] ON [dbo].[M3_Stok_HarFis_Detay]
AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
SET NOCOUNT ON; 
DECLARE @Stok varchar(40)
    DECLARE @SthD_PartiNo varchar(40)
    DECLARE @SthD_SeriNo varchar(40)
    DECLARE @SthD_Stok varchar(50) 
    DECLARE @SthD_Turu varchar(10)
    DECLARE @SthD_Miktar float 
    DECLARE @Depo varchar (20)
    DECLARE @StokCinsi varchar (30)
    
    
    -- Sabit değerlerimiz
    SET @Depo='02'
    SET @StokCinsi ='KİMYASAL'

	
	--Delete , Update işlemlerimiz
	DECLARE CRS_AcleUpd_BarkodPalet CURSOR FOR 
		   SELECT  SthD_Stok,SthD_PartiNo,SthD_SeriNo,SthD_Turu FROM deleted 
	OPEN CRS_AcleUpd_BarkodPalet
	--deleted tablomuz içerisinde ürünlere while ile tek tek ulaşıyoruz.
	FETCH NEXT FROM CRS_AcleUpd_BarkodPalet INTO  @SthD_Stok,@SthD_PartiNo, @SthD_SeriNo ,@SthD_Turu
    WHILE @@FETCH_STATUS = 0
		BEGIN
		
			SET @SthD_Miktar=(Select Sum((CASE Left(SthD_Turu,3) WHEN 'ALM' THEN SthD_Miktar1 ELSE SthD_Miktar1 * -1 END)) 
			From M3_Stok_HarFis_Detay with(nolock,Index(Std_KeyStkDepPrtSeri)) 
			Where SthD_Stok=@SthD_Stok And SthD_PartiNo=@SthD_PartiNo And SthD_SeriNo=@SthD_SeriNo AND SthD_Depo=@Depo)
			if @SthD_Miktar is NULL SET @SthD_Miktar=0
	
	-- Turumuz alım irsaliye işlemi ise bu türe bir ayrıcalık tanımlayıp irsaliyeler zaten ilk işlemler deyip bu türü es geçiyoruz		
	IF @SthD_Turu <> 'ALM2IRS' BEGIN
	
	-- Turumuz ALM2IRS değilse Palet Tablomuzu güncelliyoruz.
	UPDATE [M3_Barkod_Palet]
		SET
		Bpl_Miktar1 =@SthD_Miktar
		FROM [M3_Barkod_Palet] X JOIN [M3_Stok_Kart] Y ON X.Bpl_Stok = Y.St_Kod
		WHERE 
				Y.St_Kod=@SthD_Stok
		  AND	Y.St_OzelAlan03=@StokCinsi
		  AND	X.Bpl_PartiNo = @SthD_PartiNo
		  AND	X.Bpl_SeriNo = @SthD_SeriNo
	 END			
		
	    FETCH NEXT FROM CRS_AcleUpd_BarkodPalet INTO @SthD_Stok,@SthD_PartiNo, @SthD_SeriNo,@SthD_Turu
	END
   Close CRS_AcleUpd_BarkodPalet
   DEALLOCATE CRS_AcleUpd_BarkodPalet
   
   
    --insert işlemlerimiz
	DECLARE CRS_AcleUpd_BarkodPalet CURSOR FOR 
		   SELECT  SthD_Stok,SthD_PartiNo,SthD_SeriNo FROM inserted 
	OPEN CRS_AcleUpd_BarkodPalet
	--inserted tablomuz içerisindeki ürünlere tek tek ulaşıyoruz.
	FETCH NEXT FROM CRS_AcleUpd_BarkodPalet INTO @SthD_Stok, @SthD_PartiNo, @SthD_SeriNo
	WHILE @@FETCH_STATUS = 0
		BEGIN
		
		    -- İlgili referans numaralı ürünümüzün tablo stok mevcutunu buluyoruz
			SET @SthD_Miktar=(Select Sum((CASE Left(SthD_Turu,3) WHEN 'ALM' THEN SthD_Miktar1 ELSE SthD_Miktar1 * -1 END)) 
			From M3_Stok_HarFis_Detay with(nolock,Index(Std_KeyStkDepPrtSeri))
			 Where SthD_Stok=@SthD_Stok And SthD_PartiNo=@SthD_PartiNo And SthD_SeriNo=@SthD_SeriNo AND SthD_Depo=@Depo)
			
			-- Eğer @SthD_Miktar boş gelirse diye önlemimizi alıyoruz.
			if @SthD_Miktar is NULL SET @SthD_Miktar=0
			--Palet Tablomuzu güncelliyoruz.
					UPDATE [M3_Barkod_Palet]
				SET
				Bpl_Miktar1 =@SthD_Miktar
				FROM [M3_Barkod_Palet] X JOIN [M3_Stok_Kart] Y ON X.Bpl_Stok = Y.St_Kod
				WHERE 
						Y.St_Kod=@SthD_Stok
				  AND	Y.St_OzelAlan03=@StokCinsi
				  AND	X.Bpl_PartiNo = @SthD_PartiNo
				  AND	X.Bpl_SeriNo = @SthD_SeriNo
		  
	    FETCH NEXT FROM CRS_AcleUpd_BarkodPalet INTO  @SthD_Stok,@SthD_PartiNo, @SthD_SeriNo
	END
   Close CRS_AcleUpd_BarkodPalet
   DEALLOCATE CRS_AcleUpd_BarkodPalet

END

Software Developer Mustafa Demircioğlu www.mustafademircioglu.net www.mustafademircioglu.org mustafa.demircioglu@outlook.com

Sql Server WITH(NOLOCK) Kullanımı

Merhaba arkadaşlar,

Select işlemlerinde Deadlock hatalarını ortadan kaldırmak için WITH(NOLOCK) kullanılabilir. WITH(NOLOCK) kullanımdaki yaşanılabilecek en büyük sıkıntı hata durumunda tam olarak doğru kayıt alınmaması durumu olmaktadır. Continue reading

Sql Server Indexlerin Fragmentation İzlenmesi ve Bakımı

Veritabanımızda kayıtların artmasıyla birlikte zamanla index yapılarında fragmantasyonlarında bozulmalar oluşabilir. Manuel olarak indexlerimizi rebuild ya da  reorganize yapabileceğimiz gibi aşağıdaki sorgularımızla bozulan indexleri tespit edebilir ve tablolarımızdaki indexleri kolaylıkla bakımını yapabiliriz.   Continue reading