SORU
11 EYLÜL 2008, PERŞEMBE


Nasıl açık SQL işlem günlüğü Server mı?

SQL uzmanı değilim, ve bu temel ötesinde bir şey yapmak lazım aslında her zaman hatırlattı. Boyutu büyük bir test veritabanı var, ama işlem günlüğü kesinlikle. Nasıl işlem günlüğünü temizleyin.

CEVAP
17 AĞUSTOS 2013, CUMARTESİ


Bir günlük daha küçük dosya yapmak gerçekten bir daha olmasını beklemeyin beklenmedik büyüme karşılaştı senaryoları için ayrılmalıdır. Eğer günlük dosyası aynı boyutta tekrar büyüyecek, çok değil, geçici olarak daralma tarafından gerçekleştirilir. Şimdi, veritabanı kurtarma hedeflerine bağlı olarak, bu atması gereken eylemlerdir.

İlk olarak, tam bir yedek alın

Hiç bir şey yanlış giderse, geri yükleyebilirsiniz sağlanmadan veritabanı için herhangi bir değişiklik.

Eğer değer veriyorsan hakkında-in-time kurtarma noktası

(Ve nokta-in-time kurtarma, bir şey fark ya da tam bir yedekleme dışında geri yüklemek için güçlü olmak umurumda yani.)

Muhtemelen veritabanı 6 ** Kurtarma modunda. Eğer değilse, o zaman olduğundan emin olun:

ALTER DATABASE testdb SET RECOVERY FULL;

Eğer düzenli olarak tam yedekleme alıyorsanız bile, günlük dosyası büyümek ve gerçekleştirmek kadar büyüyecekgünlükyedekleme - bu, sizin güvenliğiniz için, gereksiz yere disk alanı yemesine değildir. Oldukça sık bu günlük yedekleme, kurtarma hedeflerine göre gerçekleştirmek gerekir. Örneğin, eğer bir iş kuralı Birleşik Devletleri sizi kaybetmeyi göze alabilir en fazla 15 dakika veri olay bir felaket, yok iş yedekler günlük 15 dakikada bir. Burada zaman damgalı dosya adları geçerli zamana dayalı oluşturacak bir script (aynı zamanda bakım planları ile bunu yapabilirsin vs. sadece bakım planları seçenekleri, çok korkunçlar psikolog) herhangi bir seçim yok.

DECLARE @path NVARCHAR(255) = N'\\backup_share\log\testdb_' 
    CONVERT(CHAR(8), GETDATE(), 112)   '_'
    REPLACE(CONVERT(CHAR(8), GETDATE(), 108),':','')
    '.trn';

BACKUP LOG foo TO DISK = @path WITH INIT, COMPRESSION;

\\backup_share\ farklı temel depolama aygıtı temsil eden farklı bir makine üzerinde olması gerektiğini unutmayın. Destek bu kadar aynı makine (veya farklı bir makine kullanan aynı temel disk, ya da farklı bir VM bu aynı fiziksel host) değil gerçekten yardımcı beri eğer makine patladı kaybettin veritabanıveonun yedekleri. Bağlı ağ altyapısı olabilir yapmak daha mantıklı yedekleme yerel olarak ve daha sonra transfer onlara farklı bir konuma perde arkasında; her iki durumda da, istediğiniz için onları birincil veritabanı makinesi mümkün olduğunca hızlı bir şekilde.

Normal günlük yedeklemeler çalışan var mı, bir şey için günlük dosyası küçültmek için makul şimdi havaya ne olursa olsun daha makul olmalı. Yapardeğilyani çalışan SHRINKFILE tekrar tekrar kadar günlük dosyası 1 MB bile yedekleme günlüğü, sık, hala ihtiyaçlarını karşılamak toplamı herhangi bir eşzamanlı işlemler ortaya çıkabilecek. Günlük dosyası otomatik büyüme olayları SQL Server files sıfır olan veriler anlık bir dosyayı başlatma etkinleştirildiğinde dosyaları (farklı), ve kullanıcı işlemleri böyle iken beklemek zorunda, çünkü pahalı. Bu büyüt-Küçült-Büyüt-küçült da mümkün olduğunca rutin yapmak istiyorum, ve kesinlikle kullanıcılar için ödeme yapmak istemiyor.

Küçültmek mümkün (teşekkürler Robert), daha önce iki kez günlük yedeklemek gerekebilir unutmayın.

Yani, günlük dosyası için pratik bir boyutu ile gelmek gerekir. Kimse-ebilmek söylemek sen ne olduğunu bilmeden çok daha fazla sistem, ama eğer bulundun sık küçülen günlük dosyası ve oldu tekrar büyüyen, iyi bir filigran muhtemelen 10-50% daha büyük oldu. Diyelim ki 200 MB geliyor ki, ve herhangi bir sonraki autogrowth olaylar 50 MB olmak istiyorsun, o zaman günlük boyutu bu şekilde dosya ayarlayabilirsiniz:

USE [master];
GO
ALTER DATABASE Test1 
  MODIFY FILE
  (NAME = yourdb_log, SIZE = 200MB, FILEGROWTH = 50MB);
GO

Eğer günlük dosyası şu anda ^ olduğunu unutmayın . 200 MB, bu ilk çalıştırmanız gerekebilir:

USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);
GO

Nokta-in-time kurtarma umurunda değil

Bu bir test veritabanı ve nokta-in-time kurtarma umurunda değil, o zaman veritabanı SIMPLE Kurtarma modunda olduğundan emin olun.

ALTER DATABASE testdb SET RECOVERY SIMPLE;

SIMPLE Kurtarma modunda veritabanı koyarak SQL Server yeniden kullanır günlük dosyasının bölümleri (aslında etkin olmayan işlemleri aşamalı) emin bir kaydını tutmak için büyüyen yerine yapacaktümişlemler (FULL gibi kurtarma günlüğü yedekleyin kadar yok). CHECKPOINT olayları günlük kontrol ve t-log CHECKPOINTler arasında çok fazla aktivite oluştur sürece büyümeye ihtiyacı yok emin olun yardımcı olacaktır.

Sonraki, sen mutlak emin bu günlük büyüme oldu gerçekten nedeniyle anormal bir olay (ki, bir yıllık bahar temizliği ya da yeniden inşa etmek senin en büyük dizinler), ve nedeniyle normal, günlük kullanım. Boyutu, ve SQL Server küçük bir daha büyümek için, normal aktivite karşılamak için bir gülünç günlük dosyası küçültmek, o size ne kazandırdı? Sen sadece geçici olarak serbest disk alanı kullanmak mümkün? Eğer acil bir çözüm gerekiyorsa, o zaman aşağıdakileri çalıştırabilirsiniz:

USE yourdb;
GO
CHECKPOINT;
GO
CHECKPOINT; -- run twice to ensure file wrap-around
GO
DBCC SHRINKFILE(yourdb_log, 200 MB);
GO

Aksi halde, uygun boyutu ve büyüme hızı ayarlayın. Nokta-in-time kurtarma durumda örnek olarak başına, ve boyut uygun olduğunu belirlemek ve makul autogrowth parametreleri ayarlamak için aynı kod mantığı kullanabilirsiniz.

Bazı şeyleri yapmak istemezsin

  • TRUNCATE_ONLY seçeneği ile günlük yedeklemek ve daha sonra SHRINKFILE. Biri için, TRUNCATE_ONLY Bu seçenek kalmıştır ve artık SQL Server'ın güncel sürümleri mevcuttur. Eğer FULL kurtarma modelinde ikinci olarak, bu günlük zincirini yok etmek ve yeni ve tam bir yedek gerektirir.

  • Veritabanının bağlantısını kesin, günlük dosyasını silin ve yeniden takın. Ne kadar tehlikeli olabilir ki belirtmeden edemeyeceğim. Veritabanı geri olmayabilir, şüpheliler arasında olabilir, eğer (varsa) yedekleme, vb geri dönmek zorunda kalabilirsiniz. vb.

  • Kullan "veritabanı küçült" seçeneği. DBCC SHRINKDATABASE aynı zamanda bakım planı bu seçenek, özellikle eğer gerçekten tek sorun günlük bir sorunu çözmek için gerekirse kötü fikirler var. Ayarlayın ve bağımsız olarak ayarlamak istediğiniz dosya, DBCC SHRINKFILE ALTER DATABASE ... MODIFY FILE (yukarıdaki örnekler) kullanarak hedef.

  • Günlük 1 MB Dosya küçültmek. Bu, hey, SQL Server belirli senaryolarda yap ve açığa çıkar tüm alanı göz atalım, çünkü çok cazip görünüyor! Sürece veritabanı salt okunur (ve o, size gereken işareti olarak kullanma ALTER DATABASE), Bu kesinlikle sadece yol çok gereksiz büyüme olayları, günlük vardır karşılamak cari işlemler ne olursa olsun, kurtarma modeli. SQL Server geri yavaş ve acılı bir şekilde alabilir, böylece alanı boşaltma noktası geçici olarak nedir?

  • İkinci bir günlük dosyası oluşturmak. Bu geçici disk dolu olduğu sürücü için bir rahatlama sağlayacak, ama bu yara bandı ile delinmiş akciğeri tamir etmeye çalışmak gibi. Sorunlu günlüğü ile anlaşma doğrudan başka bir olası sorun eklemek yerine dosya gerekir. Diğer yönlendirerek daha bazı işlem günlük aktivite için farklı bir sürücü, ikinci bir günlük dosyası gerçekten hiçbir şey için (aksine bir ikinci veri dosyası), bu yana sadece bir dosya her şey kullanılabilir. Paul Randal also explains why multiple log files can bite you later.

Proaktif olmak

Yerine küçülen günlük dosyası için bazı küçük miktarda ve izin sürekli otomatik büyüme en küçük bir Oranı kendi başına, set için bazı oldukça büyük boy (one will karşılamak toplamı sizin en büyük set eşzamanlı işlemler) ve bir dizi makul otomatik büyüme ayarı gibi bir geri dönüş, böylece yok olur birden çok kez tatmin tek işlemler ve böylece olacak nispeten nadir için hiç büyümek sırasında normal iş operasyonları.

En kötü ayarları burada 1 MB büyüme veya  büyüme. Yeterince komik, bu SQL Server 29 ** ve şikayet ettiğimiz) için varsayılanları - 1 veri dosyaları ve günlük dosyaları için ). Eski çok çok küçük, bu yaşta, ve ikinci yol daha uzun ve daha uzun olaylar her zaman (örneğin, günlük dosyası 500 MB, ilk büyüme 50 MB, bir sonraki büyüme 55), bir sonraki büyüme 60.5), vb. vb. - ve I/O yavaş, inan bana, gerçekten bu eğri görürsünüz).

Daha fazla okuma

Lütfen durma, burada; ederken çok tavsiye görüyorsun orada küçülen günlük dosyaları doğası gereği kötü ve hatta potansiyel olarak yıkıcı, bazı insanlar bakımı hakkında daha fazla veri bütünlüğü daha boşaltarak disk alanı.

A blog post I wrote four years ago, when I saw a few "here's how to shrink the log file" posts spring up.

A blog post Brent Ozar wrote four years ago, pointing to multiple resources, in response to a SQL Server Magazine article that should not have been published.

A blog post by Paul Randal explaining why t-log maintenance is important why you shouldn't shrink your data files, either.

Mike Walsh has a great answer covering some of these aspects too, including reasons why you might not be able to shrink your log file immediately.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NPR

    NPR

    22 NİSAN 2006
  • TokShogun

    TokShogun

    6 HAZİRAN 2009
  • wwjoshdew

    wwjoshdew

    1 AĞUSTOS 2007