Kategoriler
SQL Windows Server Yazılar

SQL Server da TLS destekleri nelerdir?

SQL Server, farklı sürümlerde farklı TLS (Transport Layer Security) sürümlerini destekleyebilir. SQL Server’ın desteklediği TLS sürümleri, SQL Server sürümüne ve kullanılan Windows işletim sistemi sürümüne bağlı olarak değişebilir.

Genel olarak, SQL Server 2008 ve sonraki sürümler TLS 1.0, TLS 1.1 ve TLS 1.2’yi destekler. Ancak, güvenlik güncellemeleri ve yama güncellemeleri, özellikle güvenlik açıklarını düzeltmek amacıyla yapıldığı için, en güncel bilgileri Microsoft’un resmi kaynaklarından almanız önemlidir.

Aşağıda, tipik olarak desteklenen TLS sürümlerini gösteren bir tablo bulunmaktadır, ancak bu bilgiler zaman içinde değişebilir:

SQL Server SürümüMin. TLS SürümüMax. TLS Sürümü
SQL Server 2008TLS 1.0TLS 1.2
SQL Server 2008 R2TLS 1.0TLS 1.2
SQL Server 2012TLS 1.0TLS 1.2
SQL Server 2014TLS 1.0TLS 1.2
SQL Server 2016TLS 1.0TLS 1.2
SQL Server 2017TLS 1.0TLS 1.2
SQL Server 2019TLS 1.2TLS 1.3*
  • SQL Server 2019, TLS 1.3’ü destekleyebilir, ancak destek işletim sistemi ve konfigürasyona bağlı olarak değişebilir.

Güvenlik açısından, mümkünse en güncel SQL Server sürümünü ve işletim sistemini kullanmanız önerilir. Ayrıca, desteklenmeyen TLS sürümlerini kullanmaktan kaçınılmalıdır, çünkü bu durum güvenlik açıklarına neden olabilir.


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

Kategoriler
SQL Yazılar Yedekleme

SQL Server’da kaç türlü backup alınır?

SQL Server’da genellikle dört farklı türde yedekleme (backup) alınabilir:

  1. Tam Yedekleme (Full Backup)
  2. Diferansiyel Yedekleme (Differential Backup)
  3. İşlem Yedeklemesi (Transaction Log Backup)
  4. Dosya veya Dosya Grubu Yedeklemesi (File or Filegroup Backup)

Şimdi bunları detayına inelim;

1.Tam Yedekleme (Full Backup):
— Tam yedekleme, veri tabanının bütününü yedekler. Bu, veri tabanının anlık bir görüntüsünü çekmek anlamına gelir.
Neden Kullanmalısınız?:
— Güvenilir ve kapsamlı bir yedekleme sağlar. Özellikle büyük veri tabanları için idealdir, ancak depolama gereksinimleri yüksektir.

2.Diferansiyel Yedekleme (Differential Backup):
— Son tam yedeklemenin ardından yapılan değişiklikleri içerir. Yani, son tam yedekleme ile bu arasındaki farkı yakalar.
Neden Kullanmalısınız?:
— Depolama alanı tasarrufu sağlar ve geri yükleme sürelerini kısaltabilir. Ancak, her geçen sürede dosya boyutu artabilir.

3.İşlem Yedeklemesi (Transaction Log Backup):
— İşlem yedeklemesi, veri tabanındaki her bir işlemi kaydeder. Bu, belirli bir anın ardındaki tüm işlemleri içerir.
Neden Kullanmalısınız?:
— Veri kaybını minimumda tutar ve felaket durumlarına karşı güçlü bir koruma sağlar. Ancak, işlem yedekleme dosyaları hızla büyüyebilir.

4.Dosya veya Dosya Grubu Yedeklemesi (File or Filegroup Backup):
— Belirli dosyalar veya dosya grupları için yedekleme yapılmasını sağlar. Bu, özellikle büyük veri tabanları için özelleştirilmiş bir strateji sunar.
Neden Kullanmalısınız?:
— İhtiyaca göre özelleştirilebilir ancak yönetimi biraz karmaşık olabilir. Belirli dosyaların geri yüklenmesi durumunda kullanışlıdır.

İyi bir yedekleme stratejisi oluşturmak, veri güvenliğini ve hızlı geri yükleme yeteneklerini sağlamak için önemlidir. Tipik bir yaklaşım, düzenli tam yedeklemeler, ara sıra diferansiyel yedeklemeler ve sık işlem yedeklemelerini içermelidir. Bu strateji, iş sürekliliğini sağlama ve veri kaybını en aza indirme açısından kritiktir. Sizde senaryolarınıza göre yedeklemelerden en uygun olanı seçip ilerleyebilirsiniz.


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

Kategoriler
SQL Yazılar

SQL Server’da Index Bakımı: REORGANIZE ve REBUILD İşlemlerini Belirleme

Indexlerin bozulma oranlarını belirlemek ve düzeltmek için SQL sorgusu kullanma konsepti oldukça önemlidir. Bu sorgu, veri tabanlarının performansını artırmak için indexlerin nasıl bakım gerektirdiğini anlamak için kullanışlı bir araçtır. Aşağıda verilen SQL sorgusunu kullanarak index bozulma oranlarını kontrol etme ve gerektiğinde düzeltme sürecini anlatacağım.

SQL Sorgusu:

-- Bu Sorgu Indexlerdeki bozulma oranlarını listeler ve excel aracılığıyla düzeltme (Index Defragmentation) işlemi uygulanabilir.
-- Bozulma oranları listelendikten sonra; bozulma yüzdesi 0-10 olanlar normaldir. 10-30 arası olanlar REORGANIZE edilmelidir. 30 üstü olanlar ise REBUILD edilmelidir.

SELECT S.name as 'Schema',
T.name as 'Table',
I.name as 'Index',
DDIPS.avg_fragmentation_in_percent,
DDIPS.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS DDIPS
INNER JOIN sys.tables T on T.object_id = DDIPS.object_id
INNER JOIN sys.schemas S on T.schema_id = S.schema_id
INNER JOIN sys.indexes I ON I.object_id = DDIPS.object_id
AND DDIPS.index_id = I.index_id
WHERE DDIPS.database_id = DB_ID()
and I.name is not null
AND DDIPS.avg_fragmentation_in_percent > 0
ORDER BY DDIPS.avg_fragmentation_in_percent desc

Bu SQL sorgusu, mevcut veri tabanındaki indexlerin bozulma oranlarını ve sayfa sayısını listeleyecektir. Indexlerin bozulma oranlarının ne kadar olduğunu anlamak önemlidir, çünkü bu, indexlerin nasıl düzeltileceğini belirlememize yardımcı olur.

Ardından, bu sorgunun çıktıları, bir Excel tablosuna kopyalanabilir ve aşağıdaki Excel formülü kullanılarak otomatik olarak index düzeltme sorguları üretilebilir:

=EĞER(D2>10;BİRLEŞTİR("ALTER INDEX ";C2;" ON ";B2;" ";EĞER(D2<30;"REORGANIZE";"REBUILD");" WITH(ONLINE=ON)";"");"")

Bu Excel formülü, index bozulma oranına göre ALTER INDEX sorgularını otomatik olarak oluşturur. Index bozulma yüzdesi 10’dan büyükse ve 30’dan küçükse, REORGANIZE işlemi uygulanır; aksi takdirde, REBUILD işlemi uygulanır.

Bu makale konsepti, veri tabanı yöneticilerinin SQL Server veya benzeri veri tabanı sistemlerinde index bakımını otomasyonlaştırarak veri tabanı performansını artırmalarına yardımcı olacaktır. Index bakımının düzenli olarak yapılması, veri tabanı performansını optimize etmek için kritik bir adımdır.


REORGANIZE ve REORGANIZE işlemleri sql de neye göre belirlenir?
SQL Server’da index bakımı için “REORGANIZE” ve “REBUILD” işlemleri, indexlerin bozulma derecesine ve veri tabanının ihtiyaçlarına göre belirlenir. İşte bu kararı etkileyen faktörler:

1.Index Bozulma Oranı (avg_fragmentation_in_percent): Indexlerin bozulma oranı, bir indexin ne kadar fragmente olduğunu gösteren önemli bir ölçüttür. Bozulma oranı, SQL Server tarafından otomatik olarak hesaplanır ve  sys.dm_db_index_physical_stats işlevi kullanılarak elde edilebilir. Genellikle, aşağıdaki kurallar kullanılarak belirlenir:

  • Bozulma oranı %0–10 arasında ise, index normal kabul edilir.
  • Bozulma oranı %10–30 arasında ise, “REORGANIZE” işlemi uygulanabilir.
  • Bozulma oranı %30’dan büyükse, “REBUILD” işlemi gerekebilir.

2.Veritabanı Yükü ve Veri tabanı Kullanım Deseni: Veri tabanının yükü ve kullanım deseni de index bakımını etkiler. Eğer bir veri tabanı çok yoğun bir şekilde yazılıyorsa veya çok fazla işlem görüyorsa, bakım işlemlerini yaparken dikkatli olunmalıdır. Bu tür durumlarda “REORGANIZE” işlemi tercih edilebilir, çünkü daha hafif bir işlemdir. “REBUILD” işlemi daha agresif ve kaynak yoğun bir işlem olduğu için dikkatli bir planlama gerektirir.

3.Veritabanı Boyutu ve Kaynaklar: Veri tabanının boyutu ve mevcut kaynaklar da bakım kararlarını etkiler. “REBUILD” işlemi daha fazla kaynak gerektirir, bu nedenle büyük veri tabanlarında bu işlem daha fazla zaman alabilir ve kaynaklarınızı daha fazla etkileyebilir. Küçük veri tabanları için “REBUILD” işlemi daha az sorun yaratabilir.

4.Veritabanının Kritikliği: Veri tabanının kritikliği, bakım işlemleri için ne kadar süre ve kaynak ayrılacağını belirler. Kritik veri tabanlar için bakım işlemleri daha dikkatli bir şekilde planlanmalıdır.

5.İşletim Sistemi ve Donanım: İşletim sistemi ve donanım kaynaklarının veri tabanına tahsis edilme durumu da önemlidir. Daha güçlü bir donanıma sahipseniz, “REBUILD” işlemini daha sık tercih edebilirsiniz.

Bunlar, index bakımı için “REORGANIZE” ve “REBUILD” işlemlerini belirlemede dikkate alınması gereken temel faktörlerdir. Her veri tabanı farklıdır ve özel gereksinimlere sahip olabilir, bu nedenle bakım işlemleri veri tabanınızın ihtiyaçlarına göre uyarlanmalıdır. İdeal olarak, düzenli aralıklarla index bozulma oranları izlenmeli ve veri tabanı yönetimi politikalarınıza uygun olarak bakım işlemleri planlanmalıdır.


Meraklıları için aşağıda bu kodun ayrıntılı açıklamalarını bulabilir;

1.SELECT İfadesi: Bu ifade, sorgunun sonuç kümesinin hangi sütunları içereceğini belirler. Aşağıda kullanılacak sütunların isimleri ve bazılarına verilen takma adlar (alias) bulunmaktadır.

  • S.name as 'Schema': Şema adını temsil eden sütun, takma adı ‘Schema’ olarak verilmiştir.
  • T.name as 'Table': Tablo adını temsil eden sütun, takma adı ‘Table’ olarak verilmiştir.
  • I.name as 'Index': Index adını temsil eden sütun, takma adı ‘Index’ olarak verilmiştir.
  • DDIPS.avg_fragmentation_in_percent: Ortalama bozulma yüzdesini temsil eden sütun.
  • DDIPS.page_count: Sayfa sayısını temsil eden sütun.

2.FROM İfadesi: Bu ifade, verilerin alınacağı kaynağı belirler. Bu sorguda sys.dm_db_index_physical_stats işlevi kullanılarak veritabanındaki indexlerin fiziksel istatistikleri alınır.

  • sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS DDIPS: Bu işlev, veritabanındaki indexlerin fiziksel istatistiklerini döndürür. DB_ID() ile mevcut veritabanının kimliği alınır. AS DDIPS ise bu sonuç kümesine verilen bir takma adıdır.

3.INNER JOIN İfadeleri: Bu ifadeler, verilerin birleştirilmesi için kullanılır. Sorguda, sys.tablessys.schemas, ve sys.indexes tabloları ile sys.dm_db_index_physical_stats sonuçları birleştirilir. Bu, ilgili tablo, şema ve index bilgilerinin bir araya getirilmesini sağlar.

4.WHERE İfadesi: Bu ifade, sorgu sonuçlarının filtrelenmesi için kullanılır. Bu sorguda, yalnızca belirli koşulları karşılayan indexler dahil edilir. Örneğin, bozulma oranı 0’dan büyük olan indexler alınır ve null olmayan indexler seçilir.

5.ORDER BY İfadesi: Bu ifade, sonuçların nasıl sıralanacağını belirler. Sorgu sonuçları bozulma yüzdesine göre büyükten küçüğe sıralanır, yani en bozuk indexler önce listelenir.


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

Kategoriler
SQL Windows Server Yazılar

SQL Server Aktif olan ve Olmayan Veri Tabanlarını Bulma İşlemi

Sql serverda çok fazla veri tabanı olduğu durumlarda hangilerinin aktif olarak kullanılıp kullanılmadığını belirlemek için aşağıdaki kodu kullanarak bu işlemi gerçekleştireceğiz;

CREATE TABLE #T (dbName varchar(100),last_user_seek datetime,last_user_scan datetime,last_user_lookup datetime,last_user_update datetime)
declare @dbId as int
declare @dbname as varchar(100)
declare crs cursor for select dbid,name from sysdatabases 
open crs
fetch next from crs into @dbId,@dbname
while @@FETCH_STATUS=0
begin
Insert Into #T 
Select @dbname,
last_user_seek = MAX(last_user_seek),
last_user_scan = MAX(last_user_scan),
last_user_lookup = MAX(last_user_lookup),
last_user_update = MAX(last_user_update)
From
sys.dm_db_index_usage_stats
WHERE
database_id=@dbId

fetch next from crs into @dbId,@dbname
end 
close crs
deallocate crs 

select * from #t 
drop table #t
  • Öncelikle SSMS (SQL Server Management Studio) açıyoruz. Eğer sizde yüklü değil ise kurulumunu anlattığım yazıma buradan ulaşabilirsiniz.

  • İlgili alanları doldurarak sql server a giriş yapıyoruz,

  • Giriş işlemi yaptıktan sonra “New Query” diyerek yeni bir sorgu ekranı açıyoruz

  • Gelen sorgu ekranına daha önce verdiğim sorguyu kopyalarak buraya yapıştırıyoruz ve “Execute” yada F5 tuşuna basarak sorguyu gerçekleştiriyoruz

  • sorgu sonrasında yukarıdaki gibi hangi veri tabanınızda ne zaman işlem yapılmış ya da yapılmamış görmüş olacaksınız.

Meraklıları için sorgunun açıklaması;

1. `CREATE TABLE #T` komutu, geçici bir tablo oluşturur. Bu geçici tablo `#T` adını taşır ve içinde birkaç sütun bulunur: `dbName`, `last_user_seek`, `last_user_scan`, `last_user_lookup` ve `last_user_update`. Bu tablo, sonuçları saklamak için kullanılacaktır.

2. `declare @dbId as int` ve `declare @dbname as varchar(100)` komutları, sorguda kullanılacak iki değişkeni tanımlar. `@dbId` bir tamsayı (int) ve `@dbname` bir karakter dizisi (varchar) değişkenidir.

3. `declare crs cursor for select dbid,name from sysdatabases` komutu, `sysdatabases` sistem görünümünden veritabanı kimlikleri (`dbid`) ve isimleri (`name`) seçerek bir imleç (cursor) tanımlar. Bu imleç, tüm veritabanları üzerinde dönmemize izin verecektir.

4. `open crs` komutu, tanımlanan imleci açar ve veritabanı bilgilerini işlemeye başlamak için hazır hale getirir.

5. `fetch next from crs into @dbId,@dbname` komutu, imlecin bir sonraki veritabanı kaydına hareket etmesini ve bu kaydın `@dbId` ve `@dbname` değişkenlerine atanmasını sağlar. İmleç, tüm veritabanları üzerinde dolaşırken bu işlem tekrarlanır.

6. `while @@FETCH_STATUS=0` komutu, imlecin sona erip ermediğini kontrol eder. `@@FETCH_STATUS` değişkeni 0 olduğu sürece, yani imleç daha fazla veritabanı kaydı bulduğu sürece döngü devam eder.

7. Döngü içindeki `Insert Into #T` komutu, `#T` geçici tablosuna verileri ekler. Bu komut, `sys.dm_db_index_usage_stats` sistem görünümünden belirli bir veritabanının dizin kullanım istatistiklerini alır ve bu istatistiklerin maksimum değerlerini `#T` tablosuna ekler. Bu sayede her bir veritabanının en son dizin kullanım istatistikleri bu tabloda birleştirilir.

8. Döngü, bir sonraki veritabanı kaydına geçmek için `fetch next from crs into @dbId,@dbname` komutunu kullanır ve işlem diğer veritabanları üzerinde tekrarlanır.

9. Tüm veritabanları üzerinde dolaşıldığında, `close crs` komutu imleci kapatır ve `deallocate crs` komutu imleci temizler.

10. `select * from #t` komutu, `#T` tablosundaki sonuçları görüntüler. Bu sonuçlar, her bir veritabanının en son dizin kullanım istatistiklerini içerir.

11. Son olarak, `drop table #t` komutu, geçici tabloyu siler, çünkü artık sonuçlara ihtiyaç duyulmamaktadır.

kaynak : https://omercolakoglu.net/


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.

Kategoriler
SQL Windows Server Yazılar Yedekleme

SQL Server’da Veri tabanı Kopyalama İşlemi Nasıl Gerçekleştirilir?

Veri tabanlarınızı kopyalamak bazen oldukça yararlı olabilir, ancak bu işlemi nasıl yapacağınızı bilmek önemlidir. SQL Server’da bir veri tabanını kopyalamanın kolay bir yolu “Veri tabanı Kopyalama Sihirbazı’nı kullanmaktır. İşte bu sihirbazı kullanarak nasıl yapılacağı:

  1. İlk adım olarak, SQL Server Management Studio (SSMS) uygulamasını açın ve SQL Server sunucunuzla bağlantı kurun.
    Buradan daha önce kurulumu anlattığım yazıya ulaşabilirsiniz.

2. Sol taraftaki “Databases” (Veri tabanları) sekmesinde, kopyalamak istediğiniz veri tabanını bulun. İşte bu veri tabanını kopyalayacaksınız.

3. Şimdi, sağ tıklayın ve “Tasks” (Görevler) seçeneğini belirleyin. Ardından “Copy Database” (Veri tabanını Kopyala) seçeneğini tıklayarak Veri tabanı Kopyalama Sihirbazı’nı başlatın.

4. Sihirbazın ilk ekranında, “Welcome to the Copy Database Wizard” (Veri tabanı Kopyalama Sihirbazı’na Hoş Geldiniz) mesajını göreceksiniz. İleri gitmek için “Next” (İleri) düğmesine tıklayın.

5. “Select a Source Server and Database” (Kaynak Sunucu ve Veri tabanı Seçimi) ekranında, kaynak SQL Server sunucusunun adını ve gerekirse kimlik bilgilerini girin. Ardından kopyalamak istediğiniz veri tabanını seçin.

6. “Select a Destination Server and Database” (Hedef Sunucu ve Veri tabanı Seçimi) ekranında, hedef SQL Server sunucusunun adını belirtin ve kopyalanacak veri tabanının yeni adını girin.

7. “Select Transfer Method” (Transfer Yöntemi Seçimi) ekranında, genellikle “Use the SQL Management Object method” (SQL Yönetim Nesnesi Yöntemini Kullan) seçeneğini tercih edersiniz.

8. ”Select Databases” (Veri tabanını seç) ekranında ilgili veri tabanının seçiminin gerçekleştiririz.

9. Daha sonra, “Configure Destination Database” (Hedef Veri tabanını Yapılandırma) ekranında, veri tabanının büyüklüğü, büyüme seçenekleri ve diğer ayarları yapılandırabilirsiniz.

10. “Configure the Package” (Paketi Yapılandırma) belirttiğiniz özelliklerde Entegrasyon Hizmetleri paketi oluşturacaktır.

11. “Schedule and Start Copying” (Zamanlama ve Kopyalamayı Başlatma) ekranında, işlemi hemen başlatabilir veya bir zamanlama planı oluşturabilirsiniz.

12. Son adımda, işlemi gözden geçirin ve “Finish” (Tamamla) düğmesine tıklayarak veri tabanı kopyalama işlemini başlatın.

Bu işlem, seçtiğiniz ayarlara ve veri tabanının boyutuna bağlı olarak bir süre alabilir. İşlem tamamlandığında, yeni veri tabanı hedef sunucuda oluşturulmuş olacaktır.

Yani, artık veri tabanınızı başarıyla kopyaladınız!


Herhangi bir sorunuz veya eklemek istediğiniz detaylar varsa bana yazmaktan çekinmeyin.