Sql İle Veritabanı İçin Yedekleme Komutu Nasıl Yapılır?

Sql İle Veritabanı İçin Yedekleme Komutu Nasıl Yapılır?
Sql İle Veritabanı İçin Yedekleme Komutu Nasıl Yapılır?

Veritabanı yönetimi ve güvenliğinin en kritik aşaması, olası veri kayıplarına, sistem arızalarına veya siber saldırılara karşı hazırlıklı olmaktır. Bu rehberimizde, veritabanı yöneticilerinin (DBA) ve yazılım geliştiricilerin en çok ihtiyaç duyduğu Sql İle Veritabanı İçin Yedekleme Komutu Nasıl Yapılır? sorusunun yanıtını adım adım, üretim ortamına (production) uygun ve çalışır kod örnekleriyle inceleyeceğiz. SQL Server (T-SQL) başta olmak üzere, ilişkisel veritabanı yönetim sistemlerinde yedekleme (backup) komutlarının nasıl yapılandırılacağını ve otomatikleştirileceğini öğreneceksiniz.

Yedekleme işlemleri, veritabanının o anki durumunun güvenli bir dosyaya (.bak, .sql vb.) yazılması sürecidir. Doğru bir yedekleme stratejisi, yalnızca komutları çalıştırmaktan ibaret değildir; aynı zamanda bu komutların hangi sıklıkla, hangi parametrelerle ve hangi güvenlik önlemleriyle çalıştırılacağını bilmeyi de gerektirir. Bu makale boyunca, sıfırdan ileri seviyeye kadar tüm SQL yedekleme komutlarını ve kurtarma modellerini (recovery models) ele alacağız.

Eğitim boyunca paylaşacağımız SQL komutları, veritabanı sunucunuzun performansını optimize edecek parametrelerle zenginleştirilmiştir. Hazırsanız, öncelikle yedekleme komutlarını güvenle çalıştırabileceğimiz bir ortam hazırlayarak başlayalım.

Ön Hazırlık ve Gereksinimler

SQL komutlarıyla yedekleme işlemlerine başlamadan önce, sisteminizde belirli yetki ve dizin yapılandırmalarının tamamlanmış olması gerekir. Bu hazırlıklar, komutların hata vermeden çalışması için zorunludur.

  • Yetkilendirme: Yedekleme komutunu çalıştıracak SQL kullanıcısının veya servis hesabının en az db_backupoperator veya sysadmin rolüne sahip olması gerekir.
  • Dizin İzinleri: SQL Server servisinin (MSSQLSERVER), yedek dosyasının yazılacağı fiziksel klasöre (örneğin: C:\Yedekler\ veya bir ağ paylaşımı) yazma (Write) yetkisine sahip olması şarttır.
  • Veritabanı Durumu: Yedeklenecek veritabanının "ONLINE" (çevrimiçi) durumda olması ve herhangi bir bozulma (corruption) içermemesi önerilir.
  • Sürüm Uyumluluğu: Bu rehberdeki T-SQL komutları SQL Server 2016, 2019, 2022 ve 2026 sürümleriyle tam uyumludur.
Önemli Güvenlik Uyarısı: Yedeklerinizi asla veritabanı dosyalarınızın (mdf, ldf) bulunduğu fiziksel disk ile aynı disk bölümünde saklamayın. Disk arızası durumunda hem canlı verilerinizi hem de yedeklerinizi kaybedebilirsiniz. En iyi pratik, yedekleri harici bir depolama birimine (SAN, NAS veya Cloud Storage) yönlendirmektir.

Adım 1: SQL Server Tam Yedekleme (Full Backup) Komutu Nasıl Yapılır?

Tam yedekleme (Full Backup), veritabanındaki tüm şemayı, tabloları, indeksleri, saklı yordamları (stored procedure) ve verileri tek bir dosya içerisine kaydeder. Diğer tüm yedekleme türlerinin (fark ve log) temelini oluşturur. Tam yedek olmadan diğer yedekleme türleri geri yüklenemez.

Aşağıdaki SQL komutu, "SirketOtomasyonu" adındaki bir veritabanını belirtilen dizine tam yedek olarak kaydeder. Komutu çalıştırmadan önce hedef klasörün fiziksel olarak var olduğundan emin olun.

-- SQL Server Tam Yedekleme (Full Backup) Örnek Kodu
BACKUP DATABASE SirketOtomasyonu
TO DISK = 'C:\Yedekler\SirketOtomasyonu_Full.bak'
WITH 
    FORMAT,
    MEDIANAME = 'SQLServerYedekleri',
    NAME = 'SirketOtomasyonu Tam Yedekleme',
    STATS = 10;

Yukarıdaki kod bloğunda kullanılan parametrelerin teknik açıklamaları şu şekildedir:

  • BACKUP DATABASE: Yedeklenecek hedef veritabanının adını belirtir.
  • TO DISK: Yedek dosyasının yazılacağı tam dosya yolunu (path) ve dosya adını tanımlar. Genellikle .bak uzantısı kullanılır.
  • FORMAT: Eğer hedef dosyada eski bir yedek varsa, onun üzerine yazar ve yeni bir medya kümesi oluşturur. Bu, dosyanın şişmesini önler.
  • MEDIANAME ve NAME: Yedekleme medyasına ve yedek kümesine açıklayıcı isimler verir. Takibi kolaylaştırır.
  • STATS = 10: Yedekleme işleminin ilerleme durumunu her %10'luk dilimde bir SQL Server Management Studio (SSMS) mesajlar ekranında gösterir.

Adım 2: Fark Yedekleme (Differential Backup) Komutu ve Kullanımı

Fark yedekleme (Differential Backup), en son alınan tam yedeklemeden (Full Backup) sonra veritabanında meydana gelen tüm değişiklikleri kaydeder. Tam yedeklemeye göre çok daha hızlı tamamlanır ve diskte daha az yer kaplar. Ancak, geri yükleme (restore) yaparken önce en son tam yedeği, ardından en son fark yedeğini yüklemeniz gerekir.

Aşağıdaki SQL komutu, "SirketOtomasyonu" veritabanı için bir fark yedeği oluşturur. Bu komutun çalışabilmesi için daha önce en az bir kez tam yedek alınmış olması şarttır.

-- SQL Server Fark Yedekleme (Differential Backup) Örnek Kodu
BACKUP DATABASE SirketOtomasyonu
TO DISK = 'C:\Yedekler\SirketOtomasyonu_Diff.bak'
WITH 
    DIFFERENTIAL,
    FORMAT,
    NAME = 'SirketOtomasyonu Fark Yedegi',
    STATS = 20;

Bu komuttaki en kritik ifade DIFFERENTIAL anahtar kelimesidir. SQL Server, bu parametreyi gördüğünde veritabanındaki "Extent" adı verilen 64 KB'lık veri bloklarının değişim haritasını (differential bitmap) kontrol eder ve yalnızca değişen blokları yedek dosyasına yazar. STATS = 20 parametresi ise ilerleme durumunu her %20'de bir raporlar.

Adım 3: Log Yedekleme (Transaction Log Backup) Komutu Adım Adım

İşlem günlüğü (Transaction Log) yedeklemesi, veritabanında gerçekleştirilen tüm INSERT, UPDATE, DELETE gibi veri değişim işlemlerini ve şema değişikliklerini sırasıyla kaydeder. Log yedeklemesi sayesinde veritabanınızı belirli bir zaman dilimine (Point-in-Time Recovery) geri döndürebilirsiniz (Örneğin: "Dün saat 14:02:10 durumuna geri dön").

Log yedeklemesi yapabilmek için veritabanınızın kurtarma modelinin (Recovery Model) FULL veya BULK-LOGGED olması gerekir. Eğer veritabanınız SIMPLE modelde ise log yedeklemesi yapamazsınız.

Aşağıdaki kod bloğunda, öncelikle veritabanının kurtarma modelini kontrol edip FULL modele alıyoruz, ardından log yedekleme komutunu çalıştırıyoruz:

-- Veritabanı Kurtarma Modelini FULL Yapma
ALTER DATABASE SirketOtomasyonu SET RECOVERY FULL;
GO

-- SQL Server Log Yedekleme (Transaction Log Backup) Örnek Kodu
BACKUP LOG SirketOtomasyonu
TO DISK = 'C:\Yedekler\SirketOtomasyonu_Log.trn'
WITH 
    FORMAT,
    NAME = 'SirketOtomasyonu Log Yedegi',
    STATS = 10;
GO

Log yedeklerinde genellikle .trn uzantısı tercih edilir. Log yedekleme işlemi tamamlandıktan sonra, SQL Server işlem günlüğündeki aktif olmayan (committed) kısımları temizler (truncate) ve log dosyasının (ldf) kontrolsüz bir şekilde büyümesini engeller. Bu nedenle, yoğun işlem yapılan sistemlerde saatlik veya 15 dakikalık log yedekleri alınması hayati önem taşır.

Adım 4: Sıkıştırılmış Yedekleme (Backup Compression) Komutu

Büyük veritabanlarında yedekleme işlemi hem uzun sürer hem de disk alanını hızla tüketir. SQL Server'ın sıkıştırma (Compression) özelliği, yedekleme sırasında verileri işlemci (CPU) gücünü kullanarak sıkıştırır. Bu işlem disk yazma (I/O) süresini kısalttığı için yedekleme hızını ciddi oranda artırır.

Aşağıdaki örnek kodda, sıkıştırma parametresi aktif edilerek nasıl tam yedek alınacağı gösterilmiştir:

-- Sıkıştırılmış SQL Yedekleme Örnek Kodu
BACKUP DATABASE SirketOtomasyonu
TO DISK = 'C:\Yedekler\SirketOtomasyonu_Compressed.bak'
WITH 
    COMPRESSION,
    FORMAT,
    NAME = 'SirketOtomasyonu Sikistirilmis Tam Yedek',
    STATS = 5;

COMPRESSION parametresi, yedek dosya boyutunu verinin yapısına bağlı olarak %70 ila %90 oranında küçültebilir. Ancak bu işlem sırasında sunucu üzerindeki CPU kullanımı geçici olarak yükselecektir. Eğer sunucunuzda CPU darboğazı varsa, bu parametreyi yoğun olmayan saatlerde kullanmalısınız.

Adım 5: Dinamik Dosya Adı ile Otomatik Yedekleme Scripti Yazımı

Gerçek hayatta yedekleme komutlarının her gün manuel olarak çalıştırılması beklenemez. Ayrıca, her yedek alındığında eski dosyanın üzerine yazılmaması için dosya adının sonuna tarih ve saat bilgisinin dinamik olarak eklenmesi gerekir. T-SQL kullanarak dinamik dosya adı üreten ve yedek alan gelişmiş script yapısı aşağıdadır:

-- Dinamik Tarih ve Saatli SQL Yedekleme Scripti
DECLARE @VeritabanıAdi NVARCHAR(100) = 'SirketOtomasyonu';
DECLARE @YedekYolu NVARCHAR(250) = 'C:\Yedekler\';
DECLARE @ZamanDamgasi NVARCHAR(50);
DECLARE @DosyaAdi NVARCHAR(350);

-- YYYYMMDD_HHMMSS formatında zaman damgası oluşturma
SET @ZamanDamgasi = CONVERT(NVARCHAR(8), GETDATE(), 112) + '_' + 
                    REPLACE(CONVERT(NVARCHAR(8), GETDATE(), 108), ':', '');

-- Tam dosya yolunu birleştirme
SET @DosyaAdi = @YedekYolu + @VeritabanıAdi + '_' + @ZamanDamgasi + '.bak';

-- Dinamik SQL komutunu hazırlama ve çalıştırma
DECLARE @SQLKomutu NVARCHAR(MAX);
SET @SQLKomutu = 'BACKUP DATABASE ' + QUOTENAME(@VeritabanıAdi) + 
                 ' TO DISK = ''' + @DosyaAdi + ''' WITH FORMAT, COMPRESSION, STATS = 10;';

EXEC sp_executesql @SQLKomutu;

Bu script çalıştırıldığında, yedek klasöründe SirketOtomasyonu_20260330_143015.bak gibi benzersiz isimlere sahip dosyalar oluşur. Bu yöntemi SQL Server Agent üzerinde bir "Job" (Zamanlanmış Görev) olarak tanımlayarak yedeklemelerinizi tamamen otomatikleştirebilirsiniz.

Adım 6: Alınan SQL Yedeklerini Geri Yükleme (Restore) Komutları

Yedek almak kadar, o yedekleri ihtiyaç anında sorunsuz bir şekilde geri yükleyebilmek de önemlidir. Geri yükleme işlemi sırasında veritabanına aktif bağlantıların olmaması gerekir. Aşağıdaki komut, alınan bir tam yedeği veritabanına nasıl geri yükleyeceğinizi gösterir.

-- SQL Veritabanı Geri Yükleme (Restore) Örnek Kodu
USE master;
GO

-- Veritabanına olan mevcut bağlantıları sonlandırma
ALTER DATABASE SirketOtomasyonu SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

-- Geri Yükleme İşlemi
RESTORE DATABASE SirketOtomasyonu
FROM DISK = 'C:\Yedekler\SirketOtomasyonu_Full.bak'
WITH 
    REPLACE,
    RECOVERY,
    STATS = 10;
GO

-- Veritabanını tekrar çoklu kullanıcı moduna alma
ALTER DATABASE SirketOtomasyonu SET MULTI_USER;
GO

Bu komut dizisinde kullanılan kritik yapılar şunlardır:

  • SINGLE_USER WITH ROLLBACK IMMEDIATE: Veritabanına bağlı olan tüm kullanıcıların bağlantılarını anında keser ve bekleyen işlemleri geri alır (rollback). Geri yükleme esnasında dosya kilitlenmelerini önler.
  • REPLACE: Eğer sunucuda aynı isimde başka bir veritabanı varsa, onun üzerine yazılmasını onaylar.
  • RECOVERY: Geri yükleme işlemini tamamlar ve veritabanını kullanıma açar. Eğer bu yedeğin arkasından fark veya log yedekleri de yüklenecekse, bu parametre yerine NORECOVERY kullanılmalıdır.

Yedekleme Yöntemlerinin Karşılaştırması

Hangi yedekleme türünü ne zaman kullanacağınızı belirlemek, depolama alanınızı ve veri kurtarma sürenizi (RTO/RPO) doğrudan etkiler. Aşağıdaki tabloda yöntemlerin avantaj ve dezavantajlarını inceleyebilirsiniz:

Yedekleme Türü Hız Dosya Boyutu Veri Kaybı Riski En Uygun Kullanım Zamanı
Tam Yedek (Full) Yavaş Büyük Yedekleme sıklığına bağlı (Yüksek) Haftada veya günde bir kez (Genellikle gece yarısı)
Fark Yedek (Differential) Orta / Hızlı Orta Son fark yedeğinden beri olan süre kadar Günlük veya 12 saatte bir
Log Yedek (Transaction Log) Çok Hızlı Çok Küçük En Az (Dakikalar seviyesinde) Her 15 dakikada veya saatte bir

SQL Yedekleme İşlemlerinde Güvenlik ve Şifreleme (Encryption)

Yedek dosyaları, veritabanınızdaki tüm hassas verilerin açık kaynak kodlu bir kopyasını barındırır. Bu dosyaların kötü niyetli kişilerin eline geçmesi durumunda, verileriniz kolayca başka bir sunucuya geri yüklenebilir. Bu riski önlemek için yedeklerinizi oluştururken şifreleme (Encryption) kullanmalısınız.

SQL Server üzerinde şifreli yedek alabilmek için öncelikle bir "Master Key" ve bir "Sertifika" oluşturulmalıdır. Aşağıdaki kod bloğunda bu güvenlik adımları sırasıyla gösterilmiştir:

-- 1. Master Key Oluşturma (Güçlü bir şifre belirleyin)
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'GucluSifre123!__';
GO

-- 2. Yedekleme Sertifikası Oluşturma
CREATE CERTIFICATE YedekSertifikasi
WITH SUBJECT = 'Veritabanı Yedek Şifreleme Sertifikası';
GO

-- 3. Şifreli Yedek Alma Komutu
BACKUP DATABASE SirketOtomasyonu
TO DISK = 'C:\Yedekler\SirketOtomasyonu_Encrypted.bak'
WITH 
    MEDIANAME = 'SifreliYedekler',
    NAME = 'SirketOtomasyonu Sifreli Yedek',
    ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = YedekSertifikasi),
    STATS = 10;
GO

Bu yöntemle alınan yedek dosyası, AES 256 algoritmasıyla askeri düzeyde şifrelenir. Bu yedek dosyasını başka bir SQL Server sunucusuna geri yüklemek istediğinizde, öncelikle oluşturduğunuz sertifikayı (private key ile birlikte) o sunucuya aktarmanız gerekir. Aksi takdirde yedek dosyası kesinlikle açılamaz.

Sıkça Sorulan Sorular

SQL Express sürümünde otomatik yedekleme nasıl yapılır?

SQL Server Express (ücretsiz) sürümünde SQL Server Agent servisi bulunmaz. Bu nedenle otomatik yedekleme yapmak için yukarıda paylaştığımız dinamik T-SQL scriptini bir .sql dosyası olarak kaydetmeli ve Windows Görev Zamanlayıcı (Task Scheduler) üzerinden sqlcmd aracı yardımıyla çalıştırmalısınız.

"Access Denied" (Erişim Engellendi) hatası nasıl çözülür?

Bu hata, SQL Server servisinin yedek yazılacak klasöre erişim yetkisi olmadığında oluşur. Çözüm için Windows Hizmetler (Services) altından SQL Server (MSSQLSERVER) hizmetini çalıştıran hesabın (genellikle NT Service\MSSQLSERVER) hedef klasör üzerinde tam denetim (Full Control) yetkisine sahip olduğundan emin olun.

Bu yazıya tepkinizi paylaşın:
Kerem Demir

Mutfak pratikleri ve ev ekonomisi konularında uzmanlaşmış bir editörüm. Okuyucularıma bütçe dostu ve uygulanabilir yaşam tavsiyeleri sunuyorum.

Yorumlar (0)

Yorum Yaz