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.
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:
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:
Asıl veritabanının bir veritabanının tam yedeklemesini gerçekleştirin.
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.
Ö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/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.