Makale numarası: 256650 - Son Gözden Geçirme: 10 Aralık 2002 Salı - Gözden geçirme: 1.3

BILGI: SQL Server 7.0 işlem günlüğü Küçült edilir

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

DBCC SHRINKFILE veya DBCC SHRINKDATABASE komutunu kullandığınızda neden bir işlem günlüğü daraltmanız olmayan bazı genel nedenler vardır. SQL Server Books Online'da "DBCC SHRıNKFıLE" ve "DBCC SHRıNKDATABASE" konularda ayrıntılı bilgi sağlar, ancak kısa bir Özet izler.

Daha fazla bilgi

  • Microsoft SQL Server 7.0 SHRINKFILE ve SHRINKDATABASE komutları, bir hedef boyutunu küçültme için ayarlayın. Her günlük dosyası, bu komutları tarafından işaretlenmiş, ancak, gerçekte bir günlüğü yedeklemesini veya dosyaları sıkıştırmak için günlük kesilme. Bu nedenle, SHRINKFILE kullanın veya önce günlük, ayrıca bir komut yayımlamak gerekir SHRINKDATABASE komutunu keser küçülür, tüm olma olasılığı vardır.
  • Bir günlük, bu ölçüte göre izin daha küçük bir boyuta daraltılamıyor:

    • Kendi özgün boyutundan daha küçük bir günlük daraltmanız DBCC SHRINKFILE ile tek tek dosyaları daraltmanız gerekir. Bir günlük, özgün veya açıkça tanımlanan boyutundan daha küçük bir boyuta daraltmak için DBCC SHRINKDATABASE kullanamazsınız. Özgün boyutu, CREATE DATABASE ve tüm açık ALTER DATABASE komutları yüzünden günlüğünün boyutunu olarak tanımlanır. Özgün boyutun günlüğünün otomatik büyüme içermez.

    • Fiziksel günlük dosyası her zaman geçerli günlük dosyasında kullanılan alanı miktarından daha küçük olabilir. Kullanılan alan miktarını izlemek için DBCC SQLPERF (LOGSPACE) komutunu kullanabilirsiniz.

    • Geçerli model veritabanını ve günlük sunucu üzerindeki tüm veritabanı günlüğü için en küçük boyut boyutudur. Varsayılan olarak, modeli veritabanının günlük 1 MB'DEN daha az ise.

    • Yalnızca bir sanal günlük dosyasını (VLF) sınır için bir günlük shrunk çünkü alanı kullanılmadığı bile, bir günlük dosyası bir VLF küçük bir boyuta Küçült olanaklı değildir. Benzer şekilde, bir VLF bölümü kullanılıyorsa bu VLF alanı birini daraltılamıyor. Daha fazla bilgi için SQL Server Books Online'da "Sanal Log Files" ve "İşlem günlüğü fiziksel Architecture" konularına bakın.


  • Işlem günlüğünün "sarma-geçici" Günlük ' dir. Bu, herhangi bir anda olabilir VLFs ile "boş" veya "yeniden" alan Başlangıç, orta ve/veya günlüğünün sonuna anlamına gelir. Günlüğü var daraltmanız "sonunda, günlük boş", herhangi bir yere günlüğünde boş değil olması gerekir. Ayrıca, yalnızca tüm VLFs daraltabilirsiniz. Hareket küçültmek için <a1>Günlük</a1> günlük dosyasının sonunda VLFs etkin olmayan ve kesilmiş olmalıdır. Daha ayrıntılı bilgi için SQL Server Books Online'da "İşlem günlük kesilmesi" konusuna bakın.
Akılda tutulması gereken birkaç nokta şunlardır:
  • Her zaman önce ve sistem etkileyen değişiklikler yaptıktan sonra sistem veritabanı ve kullanıcı veritabanı yedeklemeleri gerçekleştirin. DBCC SHRINKFILE ve DBCC SHRINKDATABASE kütüğe kaydedilmiş bir işlem değildir ve geçersiz kılar bunları çalıştıran daha işlem günlüğü yedekleri. DBCC SHRINKFILE veya DBCC SHRINKDATABASE komutları çalıştırdıktan sonra veritabanının tam yedekleme yapmanız gerekir.

  • Yedek küçültme gerçekleşmesi için beklenen süre içinde gerçekleşen üzere zamanlanmış olduğundan emin olun.

  • Eski, uzun süredir çalışan veya unreplicated hareketler bulunmadığından emin olun. Bunu yapmak için <a0></a0>, benzer bir kod kullanın:
    DBCC OPENTRAN (database_name)
    					
  • Bir shrinkpoint işaretlemek için DBCC SHRINKFILE veya DBCC SHRINKDATABASE komutunu çalıştırın. DBCC SHRINKFILE DBCC SHRINKDATABASE izinleri varsayılan üyelere sysadmin sabit sunucu rolü veya db_owner sabit veritabanı rolünün ve transfer edilebilir değil. Bu komutları arasındaki farklar hakkında daha fazla bilgi için (farklı parametreler dikkat edin) SQL Çevrimiçi Kitaplar'nda aşağıdaki konulara bakın:

    DBCC SHRINKFILE     (file_name, target_size)
    DBCC SHRINKDATABASE (database_name, target_percent)
    					
  • Günlük etrafında Kaydır'ı ve sonra günlüğü kesilemiyor BACKUP komut çıkış sağlamak için bazı kukla hareketleri oluşturun. BACKUP deyimi ne gerçekten günlüğü işaretli hedef Boyuta Küçült girişiminde ' dir.

    Işte bir örnek için tek bir mantıksal günlük dosyasında günlüğe kaydırılır ve kesirli kısmını atmak için küçülme izin neden bir kukla hareketlerinin nasıl oluşturulacağı. Örnek ortamınız için gerektiği şekilde değiştirin.
       SET NOCOUNT ON
       DECLARE @LogicalFileName sysname,
               @MaxMinutes INT,
               @NewSize INT
    
       -- *** MAKE SURE TO CHANGE THE NEXT 4 LINES WITH YOUR CRITERIA. ***
       USE     [Test DB]              -- This is the name of the database
                                      -- for which the log will be shrunk.
       SELECT  @LogicalFileName = 'Test DB Log',  -- Use sp_helpfile to 
          -- identify the logical file 
          -- name that you want to shrink.
               @MaxMinutes = 10,      -- Limit on time allowed to wrap log.
               @NewSize    = 10       -- in MB
    
       -- Setup / initialize
       DECLARE @OriginalSize int
       SELECT @OriginalSize = size -- in 8K pages
         FROM sysfiles
         WHERE name = @LogicalFileName
       SELECT 'Original Size of ' + db_name() + ' LOG is ' + 
               CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
         FROM sysfiles
         WHERE name = @LogicalFileName
    
       CREATE TABLE DummyTrans
         (DummyColumn char (8000) not null)
    
       -- Wrap log and truncate it.
       DECLARE @Counter   INT,
               @StartTime DATETIME,
               @TruncLog  VARCHAR(255)
       SELECT  @StartTime = GETDATE(),
               @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'
       -- Try an initial shrink.
       DBCC SHRINKFILE (@LogicalFileName, @NewSize)
    
       EXEC (@TruncLog)
    
       -- Wrap the log if necessary.
       WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
             AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)  -- the log has not shrunk    
             AND (@OriginalSize * 8 /1024) > @NewSize  -- The value passed in for new size is smaller than the current size.
         BEGIN -- Outer loop.
           SELECT @Counter = 0
           WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
             BEGIN -- update
               INSERT DummyTrans VALUES ('Fill Log')  -- Because it is a char field it inserts 8000 bytes.
               DELETE DummyTrans
               SELECT @Counter = @Counter + 1
             END   -- update
           EXEC (@TruncLog)  -- See if a trunc of the log shrinks it.
         END   -- outer loop
       SELECT 'Final Size of ' + db_name() + ' LOG is ' +
               CONVERT(VARCHAR(30),size) + ' 8K pages or ' + 
               CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
         FROM sysfiles 
         WHERE name = @LogicalFileName
       DROP TABLE DummyTrans
       PRINT '*** Perform a full database backup ***'
       SET NOCOUNT OFF
    					
    gerekirse, Denetim günlüğü, özgün size.Repeat önceki shrunk, görmek için adımları. Günlük daraltma, Özet, günlük daraltma ile ortak sorunlar karşılaşmış, görmek için bu makalenin üstündeki yeniden denetleyin.
Sonra günlük daraltır:
  1. Asıl veritabanının bir veritabanının tam yedeklemesini gerçekleştirin.
  2. Kullanıcı veri tabanının bir veritabanının tam yedeklemesini gerçekleştirin. SHRINK komut günlüğe kaydedilir ve bir tam veritabanı yedeklemesi tamamlandı sürece gelecekteki bir işlem günlüğü yedekleri geçersiz kılar, bu gereklidir.
Neden günlüğe ilk çok büyük büyüdüğünü belirlemek için <a0></a0>, açık hareketler, uzun süren işlemler, unreplicated hareketleri veya birçok veri dokunma hareketleri denetleyebilirsiniz.

Başvurular

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
110139  (http://support.microsoft.com/kb/110139/EN-US/ ) : INF SQL işlem günlük doldurma yukarı nedenleri
62866  (http://support.microsoft.com/kb/62866/EN-US/ ) BILGI: Neden neden SQL işlem günlük Not kesiliyor
66057  (http://support.microsoft.com/kb/66057/EN-US/ ) SORUN: Büyük toplu yükü çalışan günlük alanı yetersiz çalışıyor.
80629  (http://support.microsoft.com/kb/80629/EN-US/ ) SORUN: İşlem günlük kısmen kesilmiş
SQL Server Books Online'da; konuları: "Hareket kütüğü fiziksel Architecture"; "Hareket kütüğü performansını en iyi duruma getirme"

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 7.0 Standard Edition
Anahtar Kelimeler: 
kbmt kbinfo kbsqlserv kbsqlserv700 KB256650 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:256650  (http://support.microsoft.com/kb/256650/en-us/ )