SQL Server FILESTREAM kullanırken (Kısmi) Yedekleri Küçük Tutma


12

FILESTREAMYedeklemem gerekmediği yaklaşık 1 TB'lik bir veri tabanına sahip bir veri tabanım var ( veriler silinmişse birkaç saat içinde otomatik olarak yeniden oluşturulur, bu yüzden önemli değildir). Verilerin çoğu her iki günde bir değiştirilir, bu nedenle diferansiyel yedeklemeler boyutu düşürmeye yardımcı olmaz.

Yedekleme modunu Kurtarma Modu olarak ayarlayarak Full, ayrı bir tane FILEGROUPoluşturarak ve FILESTREAMdaha sonra sadece "Birincil" yedeklerini alarak gerekli şekilde çalıştım FILEGROUP. Bunun neden olduğu sorun, (ayrıca yedeklenen) günlük dosyasının artık FILESTREAMverileri içerdiğinden gereksiz yere büyük olmasıydı .

SIMPLEKurtarma Modu belirli FILEGROUPs yedeklerini yapma yeteneğimi ortadan kaldırır , bu yüzden bunun da bir seçenek olacağını düşünmüyorum.

Düşüncelerimi sadece FILESTREAMayrı bir veritabanına veri taşımak için , ama şimdi referans bütünlüğünü kaybediyor ve kesinlikle başka sorunları da devralıyorum.

SimpleKurtarma modunda kısmi yedeklemeler oluşturmanın herhangi bir yolu var mı ( FILESTREAMtabloyu salt okunur olarak ayarlamadan )? Değilse, sorunum için başka aklı başında çözümler var mı?

Yanıtlar:


3

Bunun neden olduğu sorun, FILESTREAM verilerini içerdiği için (ayrıca da yedeklenir) günlük dosyasının gereksiz yere büyük olmasıydı.

Günlük dosyasının kendisinin çok büyük olduğunu veya günlük dosyası yedeklemelerinin çok büyük olduğundan emin değilseniz emin değilim.

Eğer eskiyse, kaydı ne sıklıkta yedekliyorsunuz? Uygulama tasarımına bağlı olarak, daha sık yedekleme yaparak boyutu küçültebilirsiniz (ve her 5 dakikada bir çok sık değildir). Ancak bunu zaten yapıyorsanız ve hala balonluyor olsaydı, muhtemelen şansınız kalmadı. Büyük günlük dosyası neden yeniden sorun teşkil ediyor?

İkincisi ise - basit kurtarma modeline devam etmekten mutluluk duyuyorsunuz ve daha küçük yedeklemelere izin verirseniz hiçbir zaman geri yüklenmez; bu durumda tam modda kalın ve günlük yedeklerinizi atın.


Genellikle nadir olmayan günlük yedeklemelerinin farkında değildim! "Büyük günlük dosyası neden tekrar sorun?" soru aslında beni bu konuda düşündürdü ve bir cevabım yoktu. Yani, +100 sana!
David Murdoch

3

Kurtarma moduna SIMPLE ayarlanmış bir veritabanı için bir çözüm, FILESTREAM verilerini salt okunur bir dosya grubunda bulundurmaktır (bu sizin ideal seçeneğiniz değildir) ve ardından yalnızca aşağıdaki gibi FARKLI okuma gruplarını yedekler:

BACKUP DATABASE [name] READ_WRITE_FILEGROUPS TO DISK = '' WITH DIFFERENTIAL, COMPRESSION;

Herhangi bir okuma / yazma dosya grubunda değişen verileri alır. FILESTREAM verilerini almadan kısmi yedeklemeleri yönetilebilir tutabileceğiniz en kolayı budur. Bununla birlikte, yukarıda belirtilen veriler için yükleme işleminin, okuma / yazma için dosya grubunu değiştirmesi, ek verileri yüklemesi ve daha sonra tekrar okumak üzere ayarlaması gerekir. Kesinlikle ideal değil.


Otomatik sistemimiz FILESTREAM'ın bazen READONLY olmasıyla başa çıkmak için tasarlanmış olsaydı bu mükemmel olurdu. Ne yazık ki, tüm hizmetleri yeniden düzenlemek çok zaman alacaktı, özellikle de şu anda problemi sabit disklere atabileceğimiz için. Saygılarımızla, ileriye dönük olarak, tüm yeni hizmetler bu düşünülerek tasarlanacak ve eski hizmetleri zaman içinde güncellemeyi planlıyor. (Keşke sana ödülün yarısını ödüllendirebilseydim
David Murdoch

2

Bunu bir seçenek olarak kirli hissediyorum, ancak FILESTREAM verileri kendi veritabanına ayırmayı seçerseniz, tetikleyiciler aracılığıyla ayrı dbs tablolar arasında RI koruyabilirsiniz :

Tetikleyiciler -> Açıklamalar -> Sınırlamalar:
Yalnızca geçerli veritabanında bir tetikleyici oluşturulur; ancak, bir tetikleyici geçerli veritabanı dışındaki nesnelere başvurabilir.

Baş kürkünüzün tutamlarını hayal kırıklığıyla çıkardıktan sonra performans sorunlarının ve kafa derinizin bir bölümünün tüysüz olmasını bekleyin, ancak teorik olarak bunu yapabilirsiniz . Bu yaklaşımı herhangi bir düzeyde önermiyorum, bunun yerine tlog yedeklemelerinizin sıklığını artırmanızı ve / veya toplu günlük kurtarma modeline geçmenizi ve sizi ne kadar alandan tasarruf ettiğini görmenizi şiddetle tavsiye ederim, ancak bu olası bir çözümdür. Gerçekten bu verileri ayırmanın ve Frankenstein veritabanı tasarımıyla uğraşmanın faydasını tartmanız gerekir, ancak bu bir seçenektir.

... şimdi duş almalıyım ...


1

Bu sorunun zaten cevaplandığını biliyorum, ancak başkalarına yardımcı olabilecek başka bir çözüm var. Son zamanlarda Brent Ozar'ın blogundan günlük yedeklemelerinizi hemen atmanın bir seçeneği olduğunu öğrendim :

BACKUP LOG MyDb TO DISK='NUL:'

Böylece veritabanınızı FullKurtarma Modunda bırakıp dosya gruplarının yedeklerini alabilirsiniz. İşlem günlüğünüz çok büyük olduğunda, yedekleme günlüğü komutunu vermeniz yeterlidir.


Yine de, beklenmedik etkinliğin günlük dosyası boyutunu mantıksız bir şekilde yükseltmediğinden emin olmak için günlük yedeklemelerinin zamanlanmış bir iş olarak çalışmasını öneriyorum.
RDFozz
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.