DBCC SHRINKFILE Transact-SQL)
Geçerli veritabanı için belirtilen veri ya da günlük dosyasının boyutunu küçültür veya verileri belirtilen dosyadan veritabanından kaldırılması dosyaya vererek aynı dosya grubu, diğer dosyalarda taşıyarak bir dosyayı boşaltır.Bir dosya, boyutu, ne zaman oluşturulduğunu belirtilenden daha küçük bir boyutunu küçültebilirsiniz.Bu, en küçük dosya boyutu yeni değere sıfırlar.
DBCC SHRINKFILE
(
{ file_name | file_id }
{ [ , EMPTYFILE ]
| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH NO_INFOMSGS ]
Bağımsız değişkenler
file_name
Mantıksal shrunk dosyasının adıdır.file_id
Shrunk için dosyayı tanımlaması (ID) sayısıdır.Bir dosya KIMLIĞI edinmek için , kullanan file_idex ya da sorgu sistem işlevsys.database_files kataloğunu görüntüleyin geçerli veritabanında.target_size
Dosyasının bir tamsayı ifade edilen, megabayt cinsinden boyutudur.DBCC SHRINKFILE belirtilmezse, varsayılan boyutunu boyutunu azaltır.Varsayılan boyutu, dosyayı oluşturulduğu belirtilen boyutudur.Not
DBCC SHRINKFILE kullanarak boş bir dosyanın varsayılan boyutunu azaltabilirsiniz. target_size. Örneğin, 5 MB'LıK dosyası oluşturup dosyayı yine de boş iken dosya 3 MB olarak sıkıştırmak, varsayılan dosya boyutu 3 MB olarak küme.Bu, verileri hiçbir zaman bulunan yalnızca boş dosyalar için geçerlidir.
If target_size , dosya belirtilen boyuta Küçült DBCC SHRINKFILE çalışır belirtildi. Kullanılan sayfaları serbest için dosyayı bölümünde saklanır, dosyanın bir parçası olarak, kullanılabilir boş alanla konumlandırılır.Örneğin, 10 MB veri dosyası, DBCC SHRINKFILE operasyonlar ise bir target_size 8 nedenleri tüm sayfaları dosyasının son 2 MB olarak dosyasının ilk olarak 8 MB ayrılmamış olan tüm sayfalar halinde yeniden kullanılır. DBCC SHRINKFILE boyutu dosyadaki verileri depolamak için gereken eski bir dosya daraltır.10 MB veri dosyasının 7 MB kullanılır, örneğin, bir DBCC SHRINKFILE deyim ile bir target_size 6, dosyayı yalnızca 7 MB, değil 6 MB küçülür.
emptyfile
Tüm veri, diğer dosyalar aynı dosya grubu için belirtilen dosyadan geçirir.Çünkü Database Engine artık verilerin boş dosyasında yerleştirilmesine izin vermiyor dosyayı kullanarak kaldırılabilir alter VERİTABANI ekstresi.notruncate
Bir veri dosyası sonundan sayfaları dosya ya da belirtmeden önünde ayrılmamış sayfaları tahsis taşır. target_percent. Dosyanın sonunda boş bir alan için işletim sistemi döndürdü ve fiziksel dosya boyutu değişmez.Bu nedenle, NOTRUNCATE belirtilmişse, dosya değil daraltmak için görüntülenir.NOTRUNCATE, yalnızca veri dosyaları için geçerlidir.Günlük dosyaları bu açıktan etkilenmez.
truncateonly
Sonunda, işletim sistemi için dosya, tüm boş alanı serbest bırakır, ancak herhangi bir sayfa hareket dosyasında gerçekleştirmez.Veri dosyası, yalnızca son ayrılmış kapsam shrunk.target_size TRUNCATEONLY ile belirtilen yoksayılır.
TRUNCATEONLY, yalnızca veri dosyaları için geçerlidir.
no_infomsgs İLE
Tüm bilgi iletileri bastırır.
Sonuç Kümeleri
Aşağıdaki tabloda, sonuç kümesindeki sütunların açıklar.
Sütun adı |
Açıklama |
---|---|
DbId |
Dosyanın kimlik numarasını veritabanı Database Engine Küçült denediniz. |
FileId |
Dosyanın dosya kimlik numarası Database Engine Küçült denediniz. |
CurrentSize |
Dosya şu anda kapladığı 8 KB sayfa sayısı. |
MinimumSize |
Dosya, en azından kaplayacak 8 KB sayfa sayısı.Bu işlem, en küçük boyuta karşılık gelen veya özgün dosyanın boyutunu oluşturulmuş. |
UsedPages |
Şu anda dosya tarafından kullanılan 8 KB sayfa sayısı. |
EstimatedPages |
8 KB sayısı sayfaları Database Engine Tahminler, dosyayı kapalı shrunk. |
Remarks
Dosya geçerli veritabanında DBCC SHRINKFILE uygulanır.Geçerli veritabanını değiştirme hakkında daha fazla bilgi için bkz: USE (Transact-SQL).
DBCC SHRINKFILE operasyonlar işlemindeki herhangi bir anda durdurulmuş ve tüm tamamlanan çalışma korunur.
Bir hata ortaya çıkar, DBCC SHRINKFILE bir işlem başarısız olduğunda.
Shrunk veritabanı tek kullanıcı modu olması gerekir; bu dosya shrunk, diğer kullanıcıların veritabanında çalışıyor.Örneğini çalıştırmak zorunda değilsiniz SQL Server sistem veritabanları daraltmak için tek kullanıcı modu.
Bir günlük dosyası küçültme
Günlük dosyalarının, Database Engine kullanır target_size tüm günlük; hedef boyutunu hesaplamak için bu nedenle, target_size küçültme işlemi sonra günlüğünde boş alan miktarıdır. Tüm günlük boyutunu hedef, her günlük dosyası için hedef boyutuna sonra çevrilir.Her fiziksel bir günlük dosyası için hedef boyutuna hemen daraltmak, DBCC SHRINKFILE çalışır.Ancak, mantıksal günlük bir parçası, hedef boyutu aşan sanal günlüklerinde bulunuyorsa Database Engine olabildiğince çok alanı serbest bırakır ve sonra da bir bilgi iletisi yayımlar. Iletinin hangi eylemleri mantıksal günlük dosyasının sonunda sanal günlükleri dışına taşımak için gerekli açıklar.Eylemler gerçekleştirilir sonra DBCC SHRINKFILE kalan alan boşaltmak için kullanılabilir.Daha fazla bilgi için bkz:İşlem günlüğünü daraltma.
Bir günlük dosyası yalnızca bir sanal günlük dosyası sınırına shrunk çünkü değil kullanılıyor olsa bile bir günlük dosyası sanal günlük dosya boyutundan daha küçük bir boyuta daraltma mümkün olmayabilir.Sanal günlük dosyasının boyutu ile dinamik olarak seçilen Database Engine ne zaman günlük dosyaları oluşturulan genişletilmiş veya. Sanal günlük dosyaları hakkında daha fazla bilgi için bkz: Fiziksel işlem günlüğü mimarisi.
En iyi yöntemler
Bir dosyayı sıkıştırmak planlarken, aşağıdaki bilgileri göz önüne alın:
Bir küçültme işlemi çok sayıda kullanılmayan boşluk, kesme tablo ya da bir açılan tabloda işlemi oluşturan bir operasyondan sonraki en etkili olur.
Çoğu veritabanı günlük normal işlemler için kullanılabilir olması için bazı boş alan gerektirir.Veritabanı art arda küçültmek ve veritabanı boyutunu yeniden büyüyor dikkat edin, shrunk alanı normal işlemler için gerekli olduğunu gösterir.Bu durumda, tekrar tekrar veritabanı daraltma bir harcanan işlemdir.
Bir küçültme işlemi dizin veritabanında parçalanma durumunu korumak ve genellikle bir derecede parçalanma artırır.Art arda veritabanı daraltmanız değil, başka bir nedeni budur.
Sorun giderme
Bu bölüm, DBCC SHRINKFILE komutu çalışırken oluşabilecek sorunları tanılamak ve sorununu açıklar.
Dosyayı Shrink Not
Küçültme işlemi hatasız çalışır, ancak dosya boyutu değişti görünmüyor, bu dosyayı aşağıdaki işlemlerden birini gerçekleştirerek kaldırmak için yeterli boş alan olduğunu doğrulayın:
Aşağıdaki sorguyu çalıştırın.
SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;
Çalıştırma dbcc sqlperf komutu hareket kaydında kullanılan alanı dönün.
Yeterli boş alan varsa, küçültme işlemi dosya boyutu, daha da azaltmak edemiyor.
Genellikle, değil daraltmak için görüntülenen günlük dosyasıdır.Bu genellikle değil kesildi sahip olması için bir günlük dosyası sonucudur.Günlük veritabanı kurtarma modeli SIMPLE için ayarlayarak veya kadar günlük yedekleme ve yeniden DBCC SHRINKFILE işlemini daha sonra kesecek.Daha fazla bilgi için bkz: Hareket günlüğü kesme ve İşlem günlüğünü daraltma.
Shrink işlem engellendi
Küçültme işlem altında çalışan bir işlem tarafından engellenmiş olan bir Satır sürüm tabanlı bir yalıtım düzey.Bir DBCC DATABASE DARALTMA işlemi çalıştırıldığında, örneğin, sürüm oluşturma-based satır altında çalışan bir büyük silme işlemi, yalıtım düzey küçültme işlemi silme işlemi dosyaları daraltma önce tamamlanması için bekleyeceği sürüyor.Bu, bir bilgi iletisi (5203 için SHRINKFILE ve SHRINKDATABASE için 5202) SQL Server DBCC SHRINKFILE ve DBCC SHRINKDATABASE operasyonlar yazdırmak durumda hata günlüğü ilk saat ve sonra her saat sonra her beş dakikada.Örneğin, hata günlüğüne aşağıdaki hata iletisini içeriyorsa:
DBCC SHRINKFILE for file ID 1 is waiting for the snapshot
transaction with timestamp 15 and other snapshot transactions linked to
timestamp 15 or with timestamps older than 109 to finish.
Bu, küçültme işlemi küçültme işlemi tamamlanmış son hareketi olduğu zaman damgalarını 109'in eski olan hareketleri anlık görüntü engellediği anlamına gelir.Bunu da that indicates transaction_sequence_num, or first_snapshot_sequence_num sütunlarsys.dm_tran_active_snapshot_database_transactions dinamik yönetim görünümü, 15 değerini içerir.Ya da, transaction_sequence_num, or first_snapshot_sequence_num sütun görünümdeki son küçültme işlemi (109) tarafından tamamlanmış hareket'den küçük bir sayı içerir, küçültme işlemi tamamlamak, bu hareketler için bekleyecektir.
Bu sorunu gidermek için , aşağıdaki görevlerden birini yapabilirsiniz:
Küçültme işlemi engelleyen hareket sonlandırın.
Küçültme işlemini sonlandırın.Küçültme işlemi sonlandırılır, tamamlanan işlerinizi korunur.
Hiçbir şey yapmayabilir ve engelleyen işlem tamamlanıncaya kadar beklemek küçültme işlemini izin verir.
Hakkında daha fazla bilgi için SQL Server hata günlüğü için bkz: SQL Server hata günlüğü görüntüleme.
İzinler
Üyelik gerektirir sysadmin sabit sunucu rolü veya db_owner sabit veritabanı rolü.
Örnekler
C.Bir veri dosyası için belirtilen hedef bir boyutunu küçültme
Aşağıdaki örnek adlı bir veri dosyasının boyutunu küçültür. DataFile1 içinde UserDB kullanıcı veritabanı 7 mb.
b.Bir günlük dosyası için belirtilen hedef bir boyutunu küçültme
Aşağıdaki örnek, günlük dosyasında küçültür AdventureWorks veritabanı için 1 MB). DBCC SHRINKFILE komut dosyasını daraltmanız izin vermek için dosyayı önce veritabanı kurtarma modeli için SIMPLE ayarlayarak kesildi.
c.Bir veri dosyası kesiliyor
Aşağıdaki örnek birincil veri dosyasında keser AdventureWorks Veritabanı. The sys.database_files catalog view is queried to obtain the file_id of the data file.
d.Bir dosya boşaltılıyor
Aşağıdaki örnek, böylece, veritabanından kaldırılabilecek dosya boşaltmayı yordamı gösterir.Bu örnek amacıyla, ilk olarak bir veri dosyası oluşturulur ve dosya veri içerdiğini kabul edilir.