Aracılığıyla paylaş


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.

Topic link iconTransact-SQL sözdizimi kuralları

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.