SQL Server günlük dosyasının boyutunu nasıl küçültürim


10

Ben veritabanları ldf dosyasının boyutunu küçültmek nasıl anlayamıyorum.

DBA diyor ki kullanmalıyım backup log dbname with truncate_only

Ve bu SQL Query Analyzer'da doğru yürütülmüş gibi görünse de ldf dosyası hala 2 Gb üzerinde.

** Bazı yorumlar ve bazı cevaplar dayalı açıklama. *** Söz konusu veritabanı bir veritabanı dizüstü bilgisayarımda olduğunu ve sadece geliştirme süreçleri için kullanıyorum. Günlük dosyası, tam diske neden olduğu görülen bir noktaya kadar büyüyordu. Herhangi bir üretim riski söz konusu değildir. Sorduğum sorudaki yöntemin ve kabul ettiğim cevabın üretim ortamında riskli olduğunu anlıyorum. *


şüphesiz bu yinelenen bir soru mu?
JamesRyan

Baktım ve SHRINKFILE'ın ne zaman başarısız olduğu hakkında bir soru soran sadece bir tane bulabilirdim. O zaman mantıklı değildi, bu yüzden bu soruyu gönderdim. Soruyu silmeyi düşündüm ama sonra aynı teknede başkalarının da olacağını düşündüm. Yinelenen bir soru bulabilirseniz (aslında aynı soruyu sorar, benzer bir soru değil), bunu silmekten mutluluk duyacağım.
Ron Tuffin

Bir aramanın ilk sayfasında bunu içeren yaklaşık 8 cevap var ama sanırım ne aradığınızı bilmelisiniz. Bunu düzenli olarak bir cevabın parçası olarak görüyorum, bu kadar basit bir şekilde sorulmamasına şaşırdım.
JamesRyan

Cevap büyük ölçüde veritabanının kurtarma seçeneğine bağlıdır: basit mi dolu mu?
Richard

1
Açıkladığın için teşekkürler Ron. Bir dev veritabanı olduğundan, günlük dosyasını küçültmenin yanı sıra kurtarma modelini SIMPLE olarak değiştirmek isteyeceksiniz, aksi takdirde sorununuz tekrarlanacaktır.
BradC

Yanıtlar:


11

Oh, korku! Lütfen insanlara günlük dosyalarını küçültmeleri gerektiğini söylemeyi bırakın!

Kendinizi bu durumda aldıysanız, aşağıdaki durumlardan biri son derece olasıdır:

  1. Veritabanınız tam kurtarma modunda ve gerçekten basit modda olmalı
  2. Veritabanınız tam kurtarma modunda ve düzenli günlük yedekleri almalısınız
  3. Veritabanınız tam kurtarma modunda ve günlük yedeklemeleriniz bir nedenle başarısız oluyor
  4. Günlük dosyasını büyük boyutlara ulaştıran devasa devasa işlemler gerçekleştiriyorsunuz

Bunların her birinin cevabı aşağıdaki gibidir:

Eğer (1) ise, veritabanını basit moda geçirin
Eğer (2) ise, düzenli günlük yedeklerini programlayın
Eğer (3) ise, zamanlanmış günlük yedeklerinizi düzeltin
(4) ise, bunu yapmayın :) Bunun yerine, daha küçük gruplar halinde çalışın.

Bunlardan HİÇBİRİ (kullanımdan kaldırılmış) "truncate_only ile dbname yedek günlüğü" kullanımını gerektirmez

Bunun yerine, yukarıdaki tekniklerden birini kullanarak günlük dosyasını temizledikten sonra, (şimdi boş) günlüğü şununla küçültün:

DBCC SHRINKFILE ('log logical name', 2000)

Her zaman makul bir son boyut belirtin, aksi takdirde yaklaşık 0'a küçülür ve bir dahaki sefere ihtiyaç duyulduğunda, büyümek için zaman alması gerekir.


çok kötü, kabul edilen cevap çok hızlıydı. Bu, görüşmeler sırasında SQL yöneticilerini ayıklamak için kullandığım sorulardan biri. Eğer yarasa 2 grev olarak sayılır truncate_only ile yedek ile geri gelirler.
Jim B

2
Katılıyorum onun mutlak son şey, dosyayı küçültmek. Doğru bakım, buna olan ihtiyacı ortadan kaldırır. Ama bir kez büyük ve daha küçük istiyorum, küçültmek zorunda. Ancak, küçülürken, dosyayı olabildiğince küçültmek, ardından dosyayı 8GB'lık artışlarla doğru boyuta büyütmek daha iyidir. Bu, dosyadaki VLF sayısını optimize eder. Bkz. - sqlskills.com/BLOGS/KIMBERLY/post/… .
Brian Knight

1
İlginç bir bağlantı, sadece trans günlüğünüz 8Gb üzerinde ise geçerlidir. Bence BradC'nin amacı (veya en azından benim), evet, günlük dosyanızı küçültmeniz için sizi uyaracak acil durumlar var, ancak kötü şöhretli yedek / w truncunu çalıştırırsanız, ardından daraltma zincirinizi az önce kullandığınızı bilmelisiniz. (önemli bir şey olmadığını umuyoruz) ve disk alanı sorunlarının yanı sıra, muhtemelen bir veritabanı tasarım perspektifinden veya bir mimari açıdan ciddi ciddi sql sunucusu sorunlarınız var. Altta yatan caue'yi düzeltmeden kendinize en iyi zamanınızı aldınız.
Jim B

4

"truncate_only ile yedekleme" yaptıktan sonra küçültmek için aşağıdaki komutu vermelisiniz

dbcc SHRINKFILE (logfilename,shrink_tosize)

Örneğin

dbcc SHRINKFILE (mydatabase_Log,512)

3

Yukarıda yazdığınız komut dosyası, yeniden kullanılmak üzere günlük içeriğini işaretler. Şu komut dosyasını takip et:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Bu senin için küçülecek.

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.