Etiket Sonuçları : T-SQL - VERITABANI.ORG

Database’yi AG eklerken Status “Password Required”

SQL Server 1 hafta önce

Bir veri tabanını Always On Availability Group’a eklerken karşılaşmış olduğum “Password Required” durumunda yapabileceğiniz bir kaç adımdan bahsedeceğim. Öncelikle bu durumla şifrelenmiş veri tabanını  Always On Availability Group’a eklerken karşılaşırsınız. Hangi veri tabanlarında şifreleme olduğunu aşağıda script yardımıyla görebilirsiniz. USE MASTER SELECT * FROM sys.symmetric_keys Şimdi gelelim veri tabanımızı Always On Availability Group’a eklemeye Yukarıda gördüğünüz yere veri tabanını uygulamış olduğunuz şifreyi girmeniz daha sonrasında refresh dediğinizde ilerlemenize izin verecektir. Peki şifremizi unuttuysak neler yapabiliriz 🙂 1- Master key’i drop edebiliriz. USE [DENEMEDB] GO DROP MASTER KEY 2- Master key şifresini değiştirebiliriz. ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD=’YENİ_ŞİFRENİZ’ Her adımı denediniz fakat aşağıdaki gibi bir hata alıyorsanız ne yapmanız gerek? Msg 15329, Level 16, State 2, Line 1 The current master key cannot be decrypted. If this is a database master key, you should attempt to open it in the session before performing this operation. The FORCE option […]

SQL Database Restore Failed, Database Is in Use

T-SQL 4 hafta ö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 4 hafta ö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.  

SQL Server Detach-Attach İşlemi

SQL Server 8 ay önce

Bu başlık altında, SQL Server‘ın hizmet verdiği veri tabanlarında .mdf ve .ldf file’ların bulunduğu diskler altındaki pathlerin yerlerini değiştirme işlemi olan Detach-Attach işlemini örnekler ile anlatacağız. Öncelikle bir veri tabanını bir yerden başka bir yere taşımaya neden ihtiyaç duyarız? Kaynak yetersizliği Domain değişikliği Sürüm yükseltme Disk Performansı Yukarıdakilere ek olarak başka birçok neden bu işlemin yapılmasına neden olabilir. .Mdf, .ndf ve .ldf file’ların taşınması için aşağıdaki yöntemlere ek olarak kendi sisteminize uygun yöntemler ile yapabilirsiniz. Backup-restore Detach-attach Generate script (Data and Schema) Yukarıda bahsi geçen yöntemler arasından Detach – Attach yöntemini sizlere anlatmaya çalışacağım. Bu işlem yapılırken kesinlikle uzmana danışarak yapılmalı ve büyük database’lerde problem ile karşılaşılabileceği göz önünde bulundurulmalı. Ve tercih olarak biz bu işlemin yapılmasında SSMS ile değil Query ekranı ile yapılmasının daha sağlıklı olduğu düşünüyoruz. Detach işlemi: “DETACH” komutu, bir veri tabanının SQL sunucusundan ayrılmasını sağlayan bir işlemdir. Detach işlemi, veri tabanını sunucudan kaldırırken, veri tabanın fiziksel […]

SQL DATE FUNCTIONS

T-SQL 1 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 […]

SQL Server “TempDB” Nedir?

SQL Server 1 yıl önce

SQL Server’da bulunan system database’leri, Tüm sisteme, veri tabanları ait kritik bilgileri tutar. TempDB bu System database’lerinden biridir. Öncelikle TempDB nedir? ve ne işe yarar? TempDB sistem üzerinde geçici objeleri saklayan veritabanıdır. Bu yüzdende diğer sistem veri tabanları gibi sistemin hayatına devam edebilmesi için büyük öneme sahiptir. Bu sistem veri tabanı genel olarak içerisinde şunları barındırır: Geçici tablolar(Temp Tables) ve buna ait veriler. Stored Procedur’ler Tablo Değişkenleri Online index işlemleri Trigger’lar İstatistik Güncellemeleri(Statistics Updates) Cursor’lar DBCC CheckDb Komutu Operasyonları Join İşlemleri SQL Server servisi yeniden başlatıldığında TempDB tekrar drop edilip yeniden oluşturulur. Bu yüzden verileri düzenli olarak tempDB’de saklamak pekte güvenilir bir yöntem tercihi değildir. TempDB hakkında biraz daha detaylı bilgi edinecek olursak: Yedeği alınamaz dolayısıyla yedekten geri dönülemez Recovery modelini değiştiremeyiz default olarak simple modeldedir FileGroup sayısını arttırmamız mümkün değildir Read Only mode’a alınabilme özelliğine sahip değildir TempDB içerisinde normal veritabanında oluşturduğumuz gibi bir allocation süreci işler bu süreçte […]

Sleeping Session Kill Script – III

T-SQL 1 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 […]

Sleeping Session Kill Script – I

SQL Server 2 yıl önce

Bu paylaşımda veri tabanlarında işlemini bitirmiş hala bekleyen sleeping sessionların kill ediimesine ilişkin scripti sizlere paylaşacağız. Aşğıdaki script ile sleeping’te olan sorgular bulunur ve o sessionlar kill edilir. Şartlarımızdan en kritik olanı ise open_transaction_count değerinin 0 olmasına dikkat edilir bu değer. Transaction’ın ahal açık olduğunu bizlere göstermektedir. Transaction’un kapatılması için query’nin dispose(commit) edilmesi şarttır. Eğer commit edilmemiş query’i sonlandırırsanız.DML(Data Manipulation Language) işlemlerde(Delete,update,insert) rollback durumu söz konusu olacaktır. Bu script yoğun transaction olmayan yerlerde kullanılmalıdır sebebi ise bu script yoğun sistemlerde bir session’un arkadasından başka bir session’ı tetikler kendisi sleeping’te olsada arkadasından tetiklediği session runnable durumda olabilir ve siz bu sleeping session’u kill edersniz dml işlemleriniz rollback’e girecektir.  Yoğun sistemlerde Sleeping Session’ları kill eden diğer scriptlere linklerden ulaşabilirsiniz. Sleeping Session Kill – II Sleeping Session Kill – III use master DECLARE @sessID int DECLARE session_cursor CURSOR FOR SELECT session_id FROM sys.dm_exec_sessions WHERE status = N'sleeping' AND open_transaction_count = 0 AND is_user_process […]