T-SQL

SQL Server DMV ve DMF – 2

SQL Server 9 ay önce

Bu yazımızda DMV ve DMF serimizin 2.sine devam edeceğiz. Yazımızda sql server query execution sonuçlarını montior etme ve bunları nasıl anlamlandırabileceğimize bakacağız. Yazı sonunda hazır olarak çoğumuzun kullandığı bu DMV ve DMF’lerin nerede ve ne için kullanıldığını öğrenmiş olacağız. Bu seride Connection, Session ve Request bölümlerini inceleyeceğiz. Task ve Worker bölümleri operating system ile alakalı olduğundan dolayı bir sonraki bölümde onları ele alacağız. SQL Server bir session’ın process’i aşağıdaki gibi gerçekleşmektedir. Görsel – 1 Bu süreci detaylandırmak istersek adım adım aşağıda bunları ele alabiliriz. Sql Server’da connection yapıldıktan sonra unique olarak kendine özel bir session alır. Görsel – 2 session_id: Session’ın Id’si connect_time: Connection’ın gerçekleştirildiği tarih net_transport: SQL Server’a gerçekleştirilen bağlantı türü auth_scheme: Gerçekleştirilen bağlantının tipi client_net_address: Bağlantı gerçekleştiren Session’ın IP bilgisi num_reads: Session’ın yapmış olduğu okuma sayısı num_writes: Yapmış olduğu yazma sayısı last_read: Yapılan son okumanın tarihi last_write: Yapılan son yazmanın tarihi   Görsel – 3 ve Sql Server […]

SQL Database Restore Failed, Database Is in Use

T-SQL 9 ay önce

Sql server ortamında bir veri tabanını yedekten geri yüklemeye çalıştığımda veri tabanı kullanılmaktadır geri yükleme başarısız hatası almaktaydım bununla alakalı nasıl bir yol izleyebileceğinize değineceğim Yukarıda göstermiş olduğum hatanın 2 farklı çözüm yolunu sizlere göstermek istiyorum. İlk olarak Veri tabanımızın özellikler kısmına giriyoruz. Bu kısımımda Options sekmesine geldiğimizde ‘Restrict Access’ kısmının ‘MULTI_USER’ olduğunu görmekteyiz bu kısmı ‘SINGLE_USER’ olarak değiştirmemiz gerekmektedir.     2. yöntem olarak Activity Monitor üzerinden açık kalan ve veri tabanımızın kullanıma devam ettiği process’i kapatmamız gerekmektedir. İnstance kısmına gelip sağ tık Activity Monitor sekmesine giriyoruz.   Açılan ekranda Processes kısmında veri tabanımızla ilgili olan hizmeti bulup sağ tıkladıktan sonra ‘Kill Process’ sekmesine tıklıyoruz. Artık veri tabanımızı kullanan process kalmadığından restore işlemimizi yapabiliriz.

Cannot drop the database because it is being used for replication. (Microsoft SQL Server, Error: 3724)

SQL Server 9 ay önce

Sql server’da replikasyonda kullanılan bir veri tabanını restore edip daha sonrasında silmek istediğimde karşılaştığım hatayı sizlerle paylaşmak istiyorum. Bu hatanın anlamı Deneme veri tabanı replikasyon tarafından kullanılmaktadır. Böyle bir senaryo ile karşılaştığınızda Aşağıda vermiş olduğum scriptler işinize yarayacaktır.             Select * from sys.databases where is_published=1 Burada replikasyon tarafından kullanılan published olarak hizmet veren veri tabanlarının listesini görüyoruz. Bizim silmek istediğimiz ‘DENEME’ veri tabanının repliklasyonda kullanıldığını görebiliyoruz. Peki bunu nasıl kaldırabilirim?           exec sp_removedbreplication ‘DENEME’ Yukarıdaki script yardımıyla replikasyonda kullanılan veri tabanımızı Replikasyondan çıkardıktan sonra silme işlemimizi gerçekleştirebiliriz.  

TAIL-LOG BACKUP İLE DATABASE’E ATILAN SON COMMIT’E GERİ DÖNME

SQL Server 1 yıl önce

Bu yazımızda “.LDF” dosyası üzerinden tail-log backup alarak database’in son commit olan haline kadar geri dönme işlemi nasıl yapılıyor bu konuyu anlatacağım. Ama ondan önce tail-log backup ne için kullanılır ve nedir onu bir açıklayalım; Bir database’i başka bir yere taşımak istediğimizde aşağıdaki görsel’de olduğu gibi bir tail-log backup alırız ve database restoring state düşer işlem yapılamaz olur. Sonrasında aldığımız tail-log’u yeni ayağa kaldırmak istediğimiz instance üzerinde, önceden restore edilen backup zinciri üzerine işleyerek ayağa kaldırırız. Bu şekilde hem veri bütünlüğü korunur(veri kaybı olmaz) hemde kısa süreli kesinti ile db’yi başka bir instance’de ayağa kaldırmış oluruz. Ama ben bu yazıda size daha farklı bir senaryo üzerinde size tail-log’u anlatacağım. DİPNOT OLARAK; tail-log backup alındığında DB restoring state’e düşer, aynı tail-log restore edildiğinde db restoring state’ten Online state’e geçer. Tail-log backup aslında .LDF dosyasını truncate etmeyen bir log backup türevidir.   Basit bir senaryo üzerinde anlatacak olursak; Öncelikle bir adet full […]

SQL DATE FUNCTIONS

T-SQL 2 yıl önce

SQL Server’da kullanmış olduğumuz bir çok fonksiyon vardır. Bu fonksiyonlardan bir taneside tarih ile alakalı olarak kullanmış olduğumuz  “DATE” fonksiyonlarıdır. Bu yazımızda sizlere; DATEDIFF DATEPART VE DATENAME DATEADD DATEDIFF_BIG GETDATE Fonksiyolarını anlatacağım. DATEDIFF(interval, date1, date2) FUNCTIONS DATEDIFF() fonksiyonun temel kullanım amacı girilen iki tarih arasında geçen zaman farkı yıl, ay veya gün olarak “INT” türünden almamızı sağlamaktadır. Bu fonksiyon 3 adet parametreden oluşur. Bulmak istediğiniz zaman farkını hangi zaman diliminden istediğiniz(Year-Month-Day) Başlangıç tarihi Bitiş tarihi DATEDIFF_BIG(datepart,startdate,enddate)FUNCTIONS DATEDIFF_BIG fonksiyonu, verilen iki tarih arasındaki farkı “BIGINT” türünden hesaplamaktadır. DATEDIFF fonksiyonuda verilen iki tarih arasındaki farkı hesaplamaktadır fakat “INT” türünden hesap yapar ve bizim yapacağımız çalışma “INT (max=2,147,483,647)”türünden büyük ise yetersiz kalacaktır. Yukarıdaki sorgumuzda DATEDIFF fonksiyonunun yapabileceği işlem limitinden fazla bir değer aralığı yaptık ve hata aldık. Aynı sorguyu DATEDIFF_BIG ile yaptığımızda ise herhangi bir hata almadık DATEPART&DATENAME(datepart , date) FUNCTIONS DATENAME ve DATEPART fonksiyonları belli bir zaman dilimindeki tarihlerin belirtilen bir bölümünü döndürür. Aralarındaki […]

Used and Allocated Data Size Calculate for LOB and Regular Data

T-SQL 2 yıl önce

SQL Server’da data boyutlarını hesaplamak için aşağıdaki yöntemi izleyebilirsiniz. Data boyutlarını hesaplarken özellikle allocate edilmiş data ve kullanılan data boyutları farklı olacaktır. Bunun sebebi ise bir veri tabanında oluşturulan bir tablonan boşaltılması veya index’in kaldırılması gibi bir çok etken vardır. SQL Server’da allocate edilen boyutu kullanılan boyuta düşürmek için shrink yapmak gerekir. Fakat data dosyalarında(mdf,ndf) shrink yapmak, özellikle yoğun transaction olan yerlerde büyük risk içermektedir.   –1.Adımda Instance altındaki tüm veri tabanlarının İmage ve Image olmayan dataların boyutlarının bilgisini aşağıdaki tabloya yazılmaktadır. USE [master] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[useddata]( [allocation_type] [varchar](12) NOT NULL, [used_mb] [numeric](36, 2) NULL, [allocated_mb] [numeric](36, 2) NULL ) ON [PRIMARY] GO –2.Adımda oluşturmuş olduğumuz tabloya Instance’daki tüm database’lerin bilgilerinin toplandığı script. –Kullanımda olan database'lerinizde . veya başka bir işaret var ise ? yerine [?] yazmanız gerekmektedir. declare @cmd nvarchar(max) set @cmd =' use [?]; insert into master..useddata select case […]

Sleeping Session Kill Script – II

T-SQL 2 yıl önce

Bir önceki yazımızda az yoğun olup sorun yaratabilecek sistemlerde (örn.log shipping) sleeping sesion’ların killl edilmesine ilişkin yazıya (Sleeping Session Kill Script -I) ek olarak, bu yazımızda yoğun transaction olan yerlerde sleeping sessionların killl edilmesine ilişkin yazımızı paylaşacağız. Yoğun transaction olan yerlerde Sleeping session’lar lock oluşturarak kaynak tüketimini artırmakta ve sistemde dar boğaza sebebiyet verebilmektedir. Bu tür yoğun olan sistemlerde running, runnable veya suspend modda bekleyen session_id ‘leri kill etmek he uygulamada hemde veri tabanlarında büyük sorunlara sebebiyet verebilmektedir. bİZ DBA’ların en dikkat ettiği durumlardan biride bir DML işleminin rollback olması durumunda yaşanabilecek senaryolardır. Böyle bir durumla karşlılaşmamak adına Kimberly L. Tripp, Adam Machanic’in yayınlamış olduğu sp_whoisactive çıktısının sonucunda sleeping session’ları kill etmenin iyi bir yöntem olduğunu savunmaktadır. Aşağıda scriptlere ulaşabilirsiniz eğer sorguları bir job içerisine koyup belirli bir zaman dilimine bağlarsanız sürekli olarak sleeping session’ları kill edebilirsiniz. Ancak çok yoğun olarak kullanılan sistemlerde herhangi bir tempdb contentaion’ı yaşadığınızda, sp_whoisactive çıktısı […]

Sleeping Session Kill Script – III

T-SQL 2 yıl önce

Bundan önce yazmış olduğumuz 2 yazıya son olarak sleeping mode’da kalan session’ların dmv’ler ile tespit edilip kill edilmesine ilişkin scripti, bu yazımızda paylaşacağız. Daha önceki yazılara ulaşmak için; Sleeping Session Kill Script – I ve Sleeping Session Kill Script – II Başlangıçta sleeping sessionların neden sleeping mode’da kaldığını bulmak gerekli. En temel sebeplerinden biri uygulama developer’ların transacation’un sonunda close veya dispose etmemesi görülmektedir. Bu fonskiyonların çağrıldığı sorguların içinde de close ihtiyacına gerek olabilir. Veri tabanına query pencerelerinden veya jobların içine yazılan query’lerinde commit edilmesi gerekmektedir. Eğer commit edilmemesi durumunda sorgu açık kalan query ekranında bile sleeping mode’da transactionn log üretir ve ldf dosyanızın büyümesine neden olabilir. Buda başka bir probleme neden olabilmektedir. DECLARE @user_spid INT DECLARE CurSPID CURSOR FAST_FORWARD FOR SELECT es.session_id AS session_id FROM sys.dm_exec_sessions AS es INNER JOIN sys.dm_exec_connections AS c ON es.session_id = c.session_id CROSS APPLY ( SELECT MAX(DB_NAME(dt.database_id)) AS database_name FROM sys.dm_tran_session_transactions AS st INNER JOIN […]

Sql Server String Fonksiyonları

T-SQL 2 yıl önce

Replace() Concat() Charindex() Left-Right Len() Lower-Upper Ltrim-Rtrim Stuff() Substring() Reverse() Patindex() String Veri Tipleri String veri tipleri metinleri ifade eder. CHAR, NCHAR, VARCHAR, NVARCHAR, TEXT, NTEXT gibi çeşitleri vardır. Sorguların içerisinde ‘ tek tırnak ‘ içerisine yazılırlar. Hemen kısaca farklarına değinip sonra sql server içerisinde hazır olarak gelen ve bu verilerle çalışırken bize faydalı olacak fonksiyonlardan bahsedelim. CHAR veri tipine sahip bir kolon oluştururken kolonun kaç karakter olacağını da belirtiriz. Örneğin char(11) dediğimizde maksimum 11 karakter alacak bir kolon oluşturmuş oluruz. Ancak şöyle bir durum var ki, her eklenen satır için char(11) kolonumuz boş bile bırakılsa diskimizde doluymuşçasına yer kaplar. Eğer satırlarımıza gelen veriler dolu gelecek ve gerçekten 11 karakterli bir değerle doldurulacaksa elbette kullanılabilir. Maksimum uzunluğu 8000 karakterdir. NCHAR veri tipinin tek farkı uluslar arası karakter setlerini desteklemesidir. Mesela Turkish_CI_AS şeklinde bir collation ayarımız varsa başında Char bir alana ä gibi alfabemizde olmayan bir karakter ekleyemeyiz. Diskimizde char bir […]

Data Transfer One By One with Linked Server

T-SQL 2 yıl önce

Bu paylaşımda, büyük verilerde aktarım yapılırken yarıda kesilmesi durumlarında en son aktarım yapılan verinin nerede kaldığını bulmak için ara bir tablo oluşturup, sürekli kontrol ederek aktarımın yapılmasını sağlamaktır.