Günlük dosyasını küçültmek boyutu küçültmez


23

350 MB veri dosyası (.mdf) ve 4.9 GB günlük dosyası (.ldf) olan bir veritabanı var . Kurtarma modeli olarak ayarlandı FULL.

Günlük dosyasını daraltmaya çalıştığımda, daralmıyor.

Veritabanını küçültmenin iyi olmadığını ve yapılmaması gerektiğini biliyorum. Ama yine de günlük dosyasını küçültmek için yapmaya çalışıyorum.

Koştuğumda

DBCC SQLPerf(logspace) 

Günlük büyüklüğünün 4932 MB olduğunu ve kullanılan günlük alanının % 98,76 olduğunu buldum !

Sonra bu komutu denedim

USE <databasename>;
DBCC loginfo;

Şimdi hemen hemen tüm VLF'ler "durum 2" dir, yani hepsi kullanımdadır.

Günlük yedeğini almaya ve ardından günlük dosyasını küçültmeye çalıştım. Küçülenmek boyutu küçültmedi.

Kurtarma modelini değiştirdim SIMPLEve tekrar küçülmeyi denedim, ancak bu da yardımcı olmadı.

Açık işlemleri kontrol ettim

DBCC opentran (database);

ve şimdi hiçbir işlemin açık olmadığını tespit etti.

Beni günlük dosyasını küçültmekten alıkoyan ne? Bunu Nasıl Çözebilirim?

Yanıtlar:


12

İşte kendi soruma cevap.

Günlük dosyasının yeniden kullanımı hakkında bilgi almak için aşağıdaki sorguyu çalıştırın:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

Aşağıdaki çıktıyı aldım:

log_reuse_wait_desc
-------------------
REPLICATION 

Çoğaltmayı kaldırdıktan sonra bile veritabanında kalan çoğaltma ile ilgili bazı nesneler vardı.

Çoğaltmayı veritabanından kaldırmak için sp_removedbreplicationkullanılabilir. Ancak çoğaltma o sırada etkin olmadığı ve aslında çoğaltma çoktan kaldırıldığı için bizim için işe yaramadı.

Çözüm, SQL Server'ın içe aktarma seçeneğini kullanarak veritabanı içeriğini başka bir veritabanına almaktı.


Aynı sorunu yaşadım ve bunu db'de aktif bir işlem olduğunu görmek için kullandım. log_reuse_wait_descverdi ACTIVE_TRANSACTION. İşlem tamamlandıktan hemen sonra küçülme gayet iyi sonuç verdi.
squillman

10

Günlüğü küçültmek için gereken adımlar

İşlem günlüğünü SSMS veya T-SQL ile yedekleyin ve ardından bir daralma gerçekleştirin

Eğer veritabanı adına sağ tıklarsanız, SSMS komutları görevlerin altındadır.

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

Muhtemelen bunu birden çok kez yapmanız gerekecek

İşlemi engelleyen bir işlem veya iş varsa, işlemi tanımlamak ve öldürmek için Etkinlik izleyiciyi kullanın veya işi sonlandırmak için SQL Agent iş etkinliği izleyicisini kullanın.

kaynak: http://support.microsoft.com/kb/907511


Ama karşılaştığım sorun farklı.
Lütfen

Anladığını duyduğuma sevindim, güncelleme için teşekkürler!
Cougar9000

Yanlış sözdizimi - eşittir işareti eksik: BACKUP LOG <Databasename> TO DISK = N '<path \ database_log.ldf';
Reversed Engineer

9

Oku SQL Server günlüğü Küçült nasıl günlüğünün dairesel doğa kesilmesi sonrasında psikiyatriste önleyebilir nasıl bir açıklama için. Son LSN noktasını LDF'nin kuyruğunda bulunan bir VLF'ye kaydetmiş olabilirsiniz. Sayaç sezgisel olarak, günlükleri oluşturarak, küçülmesini sağlamak için günlüğü ilerletmelisiniz.


0

Veritabanını küçültmeden önce, veritabanı için ayarlanmış olan yedekleme modeline bağlı olarak önce bir yedekleme oluşturmanız gerekir.

Bunu çalıştırmayı deneyebilirsiniz:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

Veya bunu SSMS'den yapabilir ve mevcut grafik araçlarını kullanabilirsiniz (ayrıntılar için buraya bakın: http://msdn.microsoft.com/en-us/library/ms187510.aspx )

Veritabanınızı yedekledikten sonra sıkıştırabilirsiniz. Bununla birlikte, veri tabanını küçültmek iyi bir fikir değildir, çünkü ağır endeks parçalanması tehlikeye girer ve veri aramak yavaşlar.

Bu yardımcı olur umarım.


Yedeklemeyi ve günlüğü kesmeyi ve günlük dosyasının boyutunu küçültmeyi biliyorum. Ancak bu veritabanı için sorun yaşıyorum. Sadece sorguyu seçtim log_reuse_wait_desc sys.databases adresinden log_reuse_wait_desc seçildi ve burada çoğaltmanın soruna neden olduğunu buldum. Peki log reuse wait_desc'de gösterilen bu db'den repliaction nasıl kaldırılır?
Navaneet,

Hangi SQL Server sürümünü kullanıyorsunuz?
Toni Kostelac,

Çoğaltma bir İş olarak ayarlanmış olabilir, bu nedenle SQL Server Agent klasörünü açın ve İşler klasörünü genişletin, ayarlanmış bir çoğaltma işi olup olmadığını kontrol edin ve sağ tıklayıp Durdur işini seçerek kapatın
Toni Kostelac

SQL Server 2005 ve üstü kullanıyorsanız, sp_removedbreplication 'DB_NAME', çoğaltmayı kaldıracak. Sql server 2000 için bkz. Blogs.msdn.com/b/repltalk/archive/2010/11/17/…
Kin Shah

Ama karşılaştığım sorun farklı.
Lütfen

0

İşlem günlüğünün gerçekte küçültülmesini sağlamak için hem veritabanının hem de işlem günlüğünün 2 veya 3 yedeklemesini gerçekleştirmem gerektiğini öğrendim. Tam kurtarma modeli ile oluşturulan bir veritabanı var. Her gece veritabanını ve işlem günlüğünü yedekler, ancak kaçınılmaz olarak işlem günlüğü sürekli olarak 2-3 hafta içinde büyüyor. Kalan disk alanı 1 GB olduğunda, işlem günlüğünün yaklaşık 30 GB olduğunu göreceğim. Microsoft tarafından önerilen adımları izledim ve hem veritabanını hem de işlem günlüğünü yedekleyen 4. veya 5. yinelemeden sonra, işlem günlüğü sonunda fazladan boşluk bırakacak ve küçülecek. Sonra geri dönüp oluşturduğum çoklu yedekleri sildim.


Bence yanlış bir şey yapıyorsun. Günlüğü düzgün bir şekilde alırsanız kullanılmamış günlük kesilmelidir. Benim sorumla verilen komutlar sorunu çözmenize yardımcı olabilir.
Navaneet

-8

Küçülen günlük dosyasını engelleyen Çoğaltma için çalışmam:

  1. DB Kurtarma Modelini Basit Yapın
  2. DB'yi çevrimdışı duruma getirin
  3. Günlük dosyasının yedeğini oluşturun (yalnızca durumda)
  4. Günlük dosyasını sil
  5. DB'yi çevrimiçi duruma getirin

Benim durumumda çalıştı. DB çevrimiçi günlüğünü getirdikten sonra otomatik olarak oluşturuldu ve boyutu 70GB yerine 512kb idi. Ancak bu sadece bir geçici çözümdür. Kök sorunu çözülmedi. Benim durumumda çoğaltma kullanıyoruz.


4
Bu korkunç bir tavsiye, işlem günlüğünüzü asla silmeyin, yolsuzluk gibi her türlü sorun çıkabilir
Tom V - Team 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.