Veritabanları için BASİT veya TAM kurtarma modeli?


38

Tam kurtarma modelini ne zaman kullanmalı ve veritabanları için basit kurtarma modelini ne zaman kullanmalıyım?

Her zaman tam kurtarma modelini kullandım, çünkü varsayılan değer, ancak bugün bu hatayla karşılaştım:

SQL Server için Microsoft OLE DB Sağlayıcısı (0x80040E14) 'DATABASE NAME' veritabanı için işlem günlüğü dolu. Günlükteki alanın neden yeniden kullanılamadığını bulmak için sys.databases içindeki log_reuse_wait_desc sütununa bakın.

Belirli veritabanı aslında sunucumdaki en küçük ve en etkin olmayan veritabanlarından biridir, bu nedenle günlüğün diğerlerinde değil, bu veritabanında nasıl dolu olabileceği hakkında hiçbir fikrim yok.

Günlüğü küçültmek ve veritabanını tekrar erişilebilir duruma getirmek için, kurtarma modelini FULL'dan BASİT olarak değiştirdim ve aşağıdaki komutla mantıksal dosya günlüğünü küçültdüm.

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Bu yardım, ama şimdi anlamamız gerekir NEDEN o yardımcı NASIL bu durum başlayan NASIL gelecekte bu önlemek için?

DÜZENLE:

Her gece saat 1'de, sunucudaki her bir veritabanının senaryolu bir yedeğini alıyoruz. Bu, en önemli bölümün bulunduğu 31 satırlık bir komut dosyası tarafından yapılıyor.

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

Yeni kurtarma modeli ve veri bankası bu komut dosyasıyla çakışacak mı?

Veritabanlarının başka bir yedeğini almıyoruz ve bu nedenle işlem kayıtlarını yapmıyoruz, değil mi?


Şimdi dikkat çekmeye değer bir şey şu ki bu şu anda Azure SQL'de bir seçenek değil - daima FULL kurtarma kullanıyor. azure.microsoft.com/en-us/blog/…
jocull

Yanıtlar:


60

Tam kurtarma modelini ne zaman kullanmalı ve veritabanları için basit kurtarma modelini ne zaman kullanmalıyım?

Veritabanınızın zaman içinde kurtarılmasını istediğinizde tam kurtarma modelini kullanmalısınız. Veritabanınızın zaman içinde kurtarılması gerekmediğinde ve en son tam veya farklı yedeklemenin bir kurtarma noktası olarak yeterli olduğu durumlarda basit kurtarma modelini kullanmalısınız. (Not: Toplu olarak kaydedilen kurtarma modeliyle ilgili daha fazla bilgi için toplu referansa bakınız ).

SQL Server için Microsoft OLE DB Sağlayıcısı (0x80040E14) 'DATABASE NAME' veritabanı için işlem günlüğü dolu. Günlükteki alanın neden yeniden kullanılamadığını bulmak için sys.databases içindeki log_reuse_wait_desc sütununa bakın.

Bu hatanın nedeni (muhtemelen), işlem günlüğünüzü yedeklememiş olmanızdan kaynaklanmaktadır. Yedeklenmediğinde, işlem günlüğü dosyasını fiziksel olarak büyütmeye devam edecektir (otomatik çoğaltmanın etkinleştirilmesi ve maksimum boyutta izin verilmesi şartıyla) çünkü işlem günlüğünün "bölümlerinin" hiçbirini (sanal günlük dosyaları) yeniden kullanamaz. Yeniden kullanım için bu VLF'leri işaretleyebilir ve bir işlem günlüğü yedeklemesi yaptığınızda (ve aktif işlemler, bazı çoğaltma yönleri vb. Gibi birkaç diğer gereklilikler) işlem günlüğünün "çevrelenmesini" sağlar.

Günlüğü küçültmek ve veritabanını tekrar erişilebilir duruma getirmek için, kurtarma modelini FULL'dan BASİT olarak değiştirdim ve aşağıdaki komutla mantıksal dosya günlüğünü küçültdüm.

......

Yardımcı oldu, ama şimdi niye yardım ettiğini anlamam gerekiyor, bu durum NASIL başlamış ve gelecekte bunu önlemek için NASIL?

Bu size yardımcı oldu çünkü veritabanınızı basit kurtarma modeline ayarlayarak SQL Server’a artık zaman içinde kurtarmayı önemsemediğinizi ve sanal günlük dosyalarının artık etkin ve korumalı olarak işaretlenmesi gerekmediğinden emin olmanız gerektiğini söyledim. Şimdi bir kontrol noktası işlemi bu VLF'leri etkin değil olarak işaretler.

Bu MSDN referansından alıntı / alıntı :

Basit kurtarma modelinde, bazı faktörler günlük kesmeyi geciktirmiyorsa, otomatik bir kontrol noktası işlem günlüğünün kullanılmayan bölümünü keser. Buna karşılık, tam ve toplu olarak kaydedilen kurtarma modellerinde, bir günlük yedekleme zinciri oluşturulduktan sonra, otomatik kontrol noktaları günlük kesilmesine neden olmaz.

Daha sonra fiziksel bir veritabanı dosyasını daralttınız ve işlem günlüğünüzde boş yer olduğundan, NTFS dosyasını fiziksel olarak daraltmayı başardı.

Üzerine biraz zaman ayırmaya değer okuma:

  1. Kurtarma Modelleri
  2. İşlem Günlüklerini Yönetme (Gail Shaw)
  3. Günlük Kesmeyi Geciktirebilecek Faktörler

Düzenlemenizden Sonra EDIT :

Yeni kurtarma modeli ve veri bankası bu komut dosyasıyla çakışacak mı?

Bu BACKUP DATABASEkomut her iki kurtarma modeliyle de çalışacaktır. Rutin veritabanı küçültmek gelince ... YAPMAYIN !!!! Ciddiyetle, veritabanınızı buna göre boyutlandırın ve tam kurtarma modelini kullanıyorsanız, yalnızca işlem günlüğü boyutunu uzak tutmak için değil, aynı zamanda kurtarma noktası nesnelerini de karşılamak için rutin ve sık işlem günlüğü dosyaları yaptığınızdan emin olun.

Veritabanlarının başka bir yedeğini almıyoruz ve bu nedenle işlem kayıtlarını yapmıyoruz, değil mi?

Veritabanınız tam kurtarma modelini kullanıyorsa, evet işlem günlüğü yedeklemesi yapıyor olmalısınız. Veritabanınız basit kurtarma işleminde ise, fiziksel olarak işlem günlüğü yedeklemesi yapamazsınız.

Hangi kurtarma modelinin kullanılması gerektiğine (basit veya tam) gelince, bu kararı sizin için veremeyiz. Yalnızca siz, iş ekibiniz ve SLA'larınız yapabilirsiniz.


Ayrıca, veritabanı yansıtmasını kullanıyorsanız, aynayı güncel tutmak için günlük dosyasını kullandığından Tam Kurtarma Modelini kullanmanız gerektiğini de ekleyebilirsiniz.
Holger

Bu bir oldu mükemmel cevap . Anlamadığım bir bölüm “kurtarma noktası nesnelerini de karşılamak”. Bu ifadeyi açıklığa kavuşturur musunuz? İlk önce “hedefler” yazmayı düşündüğünüzü düşündüm ama bu varsayımda emin olamam.
Anthony G - Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.