Aracılığıyla paylaş


dbcc SHRINKDATABASE (Transact-SQL)

Belirtilen veritabanında veri ve günlük dosyalarının boyutunu küçültür.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

DBCC SHRINKDATABASE 
( database_name | database_id | 0 
     [ , target_percent ] 
     [ , { NOTRUNCATE | TRUNCATEONLY } ] 
)
[ WITH NO_INFOMSGS ]

Bağımsız değişkenler

  • database_name | database_id | 0
    Veya şu kadar küçülttü kimliği veritabanının adıdır.0 Belirtilirse, geçerli veritabanı kullanılır.

  • target_percent
    Veritabanı daraltıldı sonra veritabanı dosyası sol istediğiniz boş alan yüzdesidir.

  • NOTRUNCATE
    Verileri veri dosyalarında dosya önünde sayfalara dosya sonundan sayfaları tahsis taşıyarak düzenler.target_percentisteğe bağlıdır.

    Dosyanın sonundaki boş alan işletim sistemine geri dönmez ve fiziksel dosya boyutu değişmez.Bu nedenle, notruncate belirtildiğinde veritabanı daraltma değil görünüyor.

    notruncate, yalnızca veri dosyaları için geçerlidir.Günlük dosyalar etkilenmez.

  • TRUNCATEONLY
    İşletim sistemi için dosya sonunda tüm boş alanı bırakır ancak dosyası içindeki tüm sayfa taşıma gerçekleştirmez.Veri dosyası, yalnızca son ayrılmış kapsamşu kadar küçülttü.target_percenttruncateonly ile belirtilen yoksayılır.

    truncateonly, yalnızca veri dosyaları için geçerlidir.Günlük dosyalar etkilenmez.

  • NO_INFOMSGS İLE
    Önem düzeyleri 0 ile 10 arasında bilgi tüm iletileri bastırır.

Sonuç Kümeleri

Aşağıdaki tablo , sonuç kümesisütunları açıklar.

Sütun adı

Açıklama

DBID

Veritabanı dosya kimlik numarası Veritabanı Altyapısı çalıştı küçültme.

Win32_filespecification '

Dosya kimlik numarası Veritabanı Altyapısı çalıştı küçültme.

CurrentSize

Dosya şu anda kapladığı 8 kb sayfa sayısı.

Desiredsize

Dosya, en azından kaplayacak 8 kb sayfa sayısı.Bu minimum boyuta karşılık gelen veya dosyanın boyutu başlangıçta oluşturulmuş.

UsedPages

Şu anda dosya tarafından kullanılan 8 kb sayfa sayısı.

EstimatedPages

8 kb sayısı sayfaları Veritabanı Altyapısı dosya olabilir tahminleri kapalı için şu kadar küçülttü.

Not

Veritabanı Altyapısı Satırlar için değil şu kadar küçülttü dosyaları görüntülemez.

Açıklamalar

Tüm verileri sıkıştırmak ve günlük dosyalarının belirli bir veritabanı, dbcc SHRINKDATABASE komutu yürütmek için.Bir veri daraltmak veya günlük dosyası belirli bir veritabanı, yürütmek için bir saat için dbcc shrinkfile komut.

Veritabanındaki geçerli ücretsiz (ayrılmamış alan miktarı kadar) görüntülemek için Çalıştır bilgilerini sp_spaceused.

dbcc SHRINKDATABASE işlemleri işlem herhangi bir noktada durdurulur ve Tamamlanan bir çalışma korunur.

Veritabanını, veritabanının en küçük boyuttan daha küçük yapılamaz.En küçük boyut, belirtilen veritabanı özgün olarak oluşturulduğu veya son boyutunu açıkça küme değiştirme işlemi dbcc SHIRNKFILE ya da alter database gibi bir dosya boyutu kullanarak boyutudur.Bir veritabanı boyutu 10 mb olarak boyutu oluşturulur ve 100 mb büyür, veritabanındaki tüm verileri silmiş olsanız bile, örneğin, en küçük veritabanı azaltılabilir 10 mb olur.

dbcc SHRINKDATABASE ya notruncate veya truncateonly seçeneğini ile notruncate dbcc SHRINKDATABASE işlemi çalıştırmaya eşdeğerdir belirtmeden çalıştıran ile truncateonly dbcc SHRINKDATABASE işlemi çalıştırarak izler.

Şu kadar küçülttü veritabanı tek kullanıcı modunda olması gerekmez; şu kadar onu küçülttü, diğer kullanıcıların veritabanında çalışma.Bu sistem veritabanlarıiçerir.

Veritabanı yedekleniyor çalışırken bir veritabanı daraltamazsınız.Bunun tersi olarak, veritabanı üzerinde bir küçültme işlemi işleminde çalışırken yedek veritabanı yapamazsınız.

dbcc SHRINKDATABASE nasıl çalışır?

dbcc SHRINKDATABASE veri dosyalarının dosya başına temelinde küçültür ancak tüm günlük dosyalarını bir bitişik günlük havuzunda vardı gibi shrinks günlük dosyaları.Dosyaları her zaman sondan küçültülür.

Varsayalım adlı bir veritabanı mydb bir veri dosyası ve iki günlük dosyaları.Her 10 mb veri ve günlük dosyalarıdır ve 6 mb veri veri dosyasını içerir.

Her dosya için Veritabanı Altyapısı hesaplar bir hedef boyutu.Bu dosya şu kadar küçülttü için olduğu boyutudur.Ne zaman dbcc SHRINKDATABASE belirtilen ile target_percent, Veritabanı Altyapısı hedef boyutunu hesaplar target_percent küçültme sonrasında dosyasındaki boş alan miktarını.Belirtir, örneğin, bir target_percent daraltılması için 25, mydb, Veritabanı Altyapısı 8 mb (6 mb veri artı 2 mb boş disk alanı) veri dosyası için hedef boyutunu hesaplar.Bu nedenle, Veritabanı Altyapısı ilk 8 MB veri dosyasının herhangi bir boş alana veri dosyasının son 2 MB veri taşır ve sonra küçülür dosya.

Veri dosyasından varsayalım mydb 7 mb veri içerir.Belirten bir target_percent 30 30 ücretsiz yüzde şu kadar küçülttü bu veri dosyası sağlar.Ancak, belirten bir target_percent 40 çünkü veri dosyasını küçülmez Veritabanı Altyapısı bir dosya verileri şu anda kapladığı küçük bir boyuta küçültecektir değil.Siz de bu sorunun başka düşünebilirsiniz yolu: boş alan yüzde 40'ını istedi + yüzde 70'inin tam veri (10 mb dışında 7 mb) yüzde 100'den fazla dosyasıdır.Ücretsiz istediği yüzde artı veri dosyasını kapladığı geçerli yüzde olduğu için tekrar (yüzde 10), yüzde 100'e herhangi bir target_size daha çok 30 değil shrink veri dosyası.

Günlük dosyaları için Veritabanı Altyapısı kullanan target_percent tam günlük; hedef boyutunu hesaplamak için Bu nedenle, target_percent olan sonra günlüğünde boş alan miktarıküçültme işlemi.Tüm günlüğü için hedef boyut, her günlük dosyası için bir hedef boyutuna sonra çevrilir.

Her fiziksel günlük dosyası hemen hedef boyutunu küçültmek dbcc SHRINKDATABASE çalışır.Hiçbir mantıksal günlük kısmı sanal günlüklerinde günlük dosyasını hedef boyutunu aşan bulunuyorsa, dosya başarıyla kesilmiş ve dbcc SHRINKDATABASE herhangi bir ileti tamamlanır.Ancak, hedef boyutunu aşan sanal günlüklerinde parçası mantıksal bulunsa bile Veritabanı Altyapısı , olabildiğince çok alanı serbest bırakır ve ardından sorunları bilgilendirici bir ileti.İletinin mantıksal günlük dosyasının sonunda sanal günlükler dışına taşımak için gereken eylemleri açıklar.Eylemleri gerçekleştirmesinden sonra kalan alanı boşaltmak için dbcc SHRINKDATABASE kullanılabilir.Daha fazla bilgi için, bkz. İşlem günlüğünü daraltma.

Şu kadar bir günlük dosyası yalnızca bir sanal günlük dosyası sınırına kadar küçülttü çünkü değil kullanılıyor olsa bile, bir günlük dosyası bir sanal günlük dosyası boyutundan daha küçük bir boyuta daraltılması mümkün olmayabilir.sanal günlük dosyası boyutu dinamik olarak seçilen Veritabanı Altyapısı Günlük dosyalarının ne zaman oluşturulan veya genişletilmiş.Sanal günlük dosyaları hakkında daha fazla bilgi için bkz: İşlem günlüğünün fiziksel yapısı.

En iyi yöntemler

Bir veritabanı daraltma planlarken aşağıdaki bilgileri göz önüne alın:

  • Küçültme işlemi çok fazla kesilme tablo veya tablo bırakma işlemini gibi kullanılmayan alan yaratan bir operasyondan sonraki en etkili olandır.

  • Çoğu veritabanı, günlük normal işlemler için kullanılabilir olması için bir miktar boş alan gerektirir.Sürekli olarak bir veritabanı daraltma ve veritabanı boyutu yeniden büyüyor dikkat edin, bu şu kadar küçülttü alanı normal işlemler için gerekli olduğunu gösterir.Bu durumda, veritabanı sürekli küçülterek bir harcanan işlemdir.

  • Küçültme işlemi veritabanında dizinler parçalanma durumunu korumaz ve genellikle parçalanma bir derecede artar.Sürekli olarak veritabanını küçültmek değil başka bir nedeni budur.

  • Belirli bir gereksinim yoksa, küme AUTO_SHRINK veritabanı seçeneği açık yapın.

Sorun giderme

Altında çalışan bir işlem tarafından engellenmesi küçültme işlemleri için olası bir satır sürüm oluşturma tabanlı yalıtım düzeyi.Örneğin, dbcc veritabanı DARALTMA işlemi çalıştırıldığında bir satır sürüm oluşturma tabanlı yalıtım düzeyi altında çalışan büyük delete işlemi devam ederken, dosyalarının daraltılması önce tamamlamak silme işlemi küçültme işlemi bekler.Bu durumda, dbcc SHRINKFILE ve dbcc SHRINKDATABASE işlemleri (SHRINKDATABASE 5202 ve SHRINKFILE 5203) bilgilendirici bir ileti yazdırmak SQL Server hata günlüğü her beş dakikada bir ilk saati ve her saat sonra sonra.Örneğin, aşağıdaki hata iletisini hata günlüğü içeriyorsa:

DBCC SHRINKDATABASE for database ID 9 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.

Yani, küçültme işlemi küçültme işlemi tamamlanan son hareketi olduğu zaman damgaları 109 eski olan anlık görüntü hareketleri tarafından engellendi.Onu da belirten transaction_sequence_num, veya first_snapshot_sequence_num sütunlarında sys.dm_tran_active_snapshot_database_transactions (Transact-SQL) dinamik yönetim görünümü içeren bir değer 15.Ya da, transaction_sequence_num, veya first_snapshot_sequence_num görünümünde sütun içeren bir küçültme işlemi (109) tamamlandı son hareketi'den küçük bir sayı, küçültme işlemi bu işlemlerin bitmesini bekler.

Bu sorunu gidermek için aşağıdaki görevlerden birini yapabilirsiniz:

  • Küçültme ilemi engelleyen işlemi sona erdirir.

  • Küçültme işlemi sonlandırır.Tamamlanan bir çalışma korunur.

  • Hiçbir şey yapma ve engelleyen işlem tamamlanıncaya kadar beklemek küçültme işlemi izin verir.

Hakkında daha fazla bilgi için SQL Server hata günlüğüBkz: SQL Server hata günlüğünü görüntüleme.

İzinler

Üyelik gerektiren sysadmin sabit sunucu rolü veya db_owner veritabanı rolüsabit.

Örnekler

A.Bir veritabanı daraltma ve boş alan yüzdesini belirtme

Aşağıdaki örnek veri ve günlük dosyalarının boyutunu azaltır izin vermek için veritabanındaki boş alan yüzde 10'uUserDBkullanıcı veritabanı .

DBCC SHRINKDATABASE (UserDB, 10);
GO

B.Bir veritabanı kesiliyor

Aşağıdaki örnek veri dosyalarında küçülür AdventureWorks2008R2 Son ayrılmış kapsamörnek veritabanını.

DBCC SHRINKDATABASE (AdventureWorks2008R2, TRUNCATEONLY);