SQL Server 2016 Availability Groups Direct Seeding

Merhaba,

SQL Server 2012 ile birlikte hayatımıza AlwaysOn teknolojisi girmişti. Bu teknoloji ile HA/DR çözümlerinde önemli adımlar atılmış oldu.

En az 2 node ile kurulan yapıda veritabanlarını full ve log backup – restore ile dağıtmamız gerekiyordu.
Okumaya devam et

SQL Server 2016 STRING_SPLIT Function

Herkese merhaba,

Bu yazımda SQL Server 2016 RC0 versiyonu ile hayatımıza giren “STRING_SPLIT” fonksiyonunu ele alacağım. Bu fonksiyon, adından da anlaşılacağı gibi parametre olarak verilen yazıyı belli bir ayraç ile ayırıp geriye tablo döndürüyor.

Aslında, neredeyse hepimiz bu işlemi ya custom function yazarak ya da CLR gibi çözümlerle yapabiliyorduk. SQL Server 2016 ile birlikte ise built-in table valued function olarak geliyor.

Okumaya devam et

SQL Server 2016 Dynamic Data Masking

Merhaba,

SQL Server 2016 ile gelecek harika özelliklerden biri olan Dynamic Data Masking sayesinde operasyonel hiçbir iş yapmadan verilerimizi kolaylıkla maskeleyebileceğiz.

Öncelikle maskeleme nedir ona bakalım;
Veri maskeleme, veritabanları içindeki hassas veya gizli verilere erişimi engelleyen bir güvenlik yöntemidir. Bu yöntem, gerçek verilerin yerine gerçek olmayan ancak uygun verilerin yerleştirilmesiyle gerçekleştirilir. (alıntı)

Okumaya devam et

Merge Statement Generator (Script)

Merhaba herkese,

Bu yazımda, Merge statement’ı kullanımında bizlere kolaylık sağlayacak scripti paylaşacağım. Merge, hayatımıza SQL Server 2008 ile girmişti. Çok işlevsel olmasına karşın alışkanlıklardan uzak olduğundan olsa gerek pek yaygın kullanılmıyor.

Merge’ün ne yaptığına burada değinmeyeceğim. Bunun için birçok makale mevcut. Fakat özetlemek gerekirse; 2 tablo arasında belli kurallara göre yapılan senkronizasyon ya da upsert işlemlerinde kullanılan bir statement diyebiliriz. Okumaya devam et

2 Server Arası Veri Tabanı Kopyalama

Merhaba,

2 sql server arası bir veya daha fazla veri tabanını taşıma ihtiyacı her zaman olmuştur. Tek tek backup alıp, diğer tarafa kopyaladıktan sonra tek tek restore etmemiz gerekirdi. Eğer kopyalanacak veri tabanı sayısı fazla ise bu işlem çok uzun ve can sıkıcı olabiliyor.

Bu işlemleri otomatize etmek için bir script geliştirdim. Parametre olarak verdiğimiz veri tabanlarını ilgili serverlar arası backup-restore yöntemi ile kopyalıyor.
Script size yeni bir script üretecek. Bu scripti management studio’da “SQLCMD” modunda çalıştırmanız gerekiyor.

Always On ya da mirroring kurulumu sırasında bu script oldukça işe yarayacaktır.
Okumaya devam et

Toplu Olarak MDF ve LDF Dosyalarını Taşımak / Moving Data and Log Files

Merhaba,

Bildiğiniz gibi databaselerimizin data ve log dosyalarını fiziksel olarak taşımak için detach / attach yöntemini kullanıyoruz.
Fakat bu işlem birden fazla database için yorucu olabilir.

Bunun için bir script geliştirdim. Bu script ile tüm databaseleri detach etmeden taşıyabiliyoruz. Veya isterseniz parametre olarak veriğiniz tek bir database için bu işlemi yapabilirsiniz.
Scriptin çalışması şu şekilde;

Okumaya devam et

Tüm Veritabanı Log Dosyalarını Shrink Etmek / Shrinking All Log Files

Veritabanı Log (.LDF) dosyalarımızın hepsini birden shrink etme ihtiyacımız olabilir. Recovery Model Simple olsa dahi bazen bunu yapmamız gerekebilir*

Yazmış olduğum SP ile tüm LDF dosyalarını topluca shrink edebilirsiniz. Bu SPyi tek olarak çalıştırabilir ya da sadece script ürettirebilirsiniz.

* Not: Shrink işleminin periyodik olarak ya da plansız yapılması önerilmeyen bir işlemdir. Shrink bir operasyon olarak ele alınmalı ve bilinçli bir şekilde yapılandırılmalı.

Kullanımı şu şekilde;

EXEC sp_shrinkLogFiles
@executeNumber = 2,  -- Kaç kes çalışsın?
@execute = 1         -- 1: çalıştırır 0: sadece script üretir

SP’nin create scripti;

CREATE PROC sp_shrinkLogFiles

@executeNumber INT = 1,
@execute BIT = 0

AS

DECLARE @cmd varchar(max)

SELECT @cmd = COALESCE(@cmd + '
', '') + '
USE [' + DB_NAME(database_id) + ']
DBCC SHRINKFILE (N'''+ name + ''' , 0, TRUNCATEONLY)'
FROM sys.master_files
WHERE database_id > 4 AND [type] = 1 AND [state] = 0

IF (@execute = 1)
 BEGIN
 PRINT '--- Started: ' + CONVERT(NVARCHAR(19),GETDATE(), 104) + ' ' + CONVERT(NVARCHAR(20),GETDATE(), 114) + ' ---'
 PRINT ''
 WHILE (@executeNumber > 0)
 BEGIN
 EXEC(@cmd)
 SET @executeNumber -= 1
 END
 PRINT ''
 PRINT '--- Finished: ' + CONVERT(NVARCHAR(19),GETDATE(), 104) + ' ' + CONVERT(NVARCHAR(20),GETDATE(), 114) + ' ---'
 END
ELSE
 BEGIN
 SELECT @cmd = REPLACE(@cmd,'TRUNCATEONLY)','TRUNCATEONLY)
GO ' + (SELECT CASE @executeNumber WHEN 1 THEN '' ELSE CAST(@executeNumber AS VARCHAR) END))

SELECT @cmd
 END

Veritabanı Restore Bilgisi / Database Restore Info

Merhaba;

Aşağıda yazmış olduğum script ile serverda bulunan tüm databaselerin en son restore bilgilerini elde edebilirsiniz.

Serverda bulunmayan databaselerin bilgilerini almak için ise scriptin alt satırlarında bulunan “sys.databases”  JOIN modelini LEFT JOIN yapabilirsiniz.
Eğer tek bir databasein bilgilerini istiyorsanız “SET @dbname = NULL” parametresine db ismini yazmanız yeterli.

Okumaya devam et

Bir Klasördeki Tüm TLog Backuplarını Restore Etmek / Restore All TLog Backup Files

Merhaba;

Bir önceki yazımda bir klasördeki backup dosyalarının nasıl restore edileceğine bakmıştık. Bu yazımda da bir klasörde ki tüm transaction log backuplarının restore edilmesine  bakacağız.

Geçen haftalarda SQL Server 2012 Always On mimarisine geçtik. Geçiş sırasında hem full backup hem de Tlog backupların restore edilmesi gerekiyordu. Bu senaryoda bu script oldukça işime yaradı.

Scripti isterseniz SP haline dönüştürebilirsiniz. Parametrelerin açıklamalarını script içinde bulabilirsiniz.

Okumaya devam et