dbcc SHRINKDATABASE (Transact-sql)
Belirtilen veritabanı veri ve günlük dosyalarının boyutunu küçültür.
Transact-SQL Sözdizim 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
Adını veya veritabanı Kımlığı daralmış olduğunu. 0 Belirtilirse, geçerli veritabanı kullanılır.target_percent
Veritabanı shrunk sonra veritabanı dosyasında sol istediğiniz boş alan yüzdesidir.NOTRUNCATE
Veri dosyaları veri sayfaları Dosya sonundan dosya önünde ayrılmamış sayfaları tahsis taşıyarak düzenler. target_percentisteğe bağlıdır.Dosyanın sonundaki boş alan işletim sistemine döndürülmez ve dosyanın fiziksel boyutu değişmez. Bu nedenle, notruncate belirtildiğinde veritabanı değil çekmek için görüntülenir.
NOTRUNCATE yalnızca veri dosyalarına uygulanabilir. Günlük dosyaları etkilenmez.
TRUNCATEONLY
Dosyanın sonundaki tüm boş alanı işletim sistemine bırakır ancak dosya içinde hiçbir sayfa taşıma gerçekleştirmez. Veri dosyası yalnızca ayrılan son kapsama küçültülür. target_percenttruncateonly ile belirtilen yoksayılır.TRUNCATEONLY yalnızca veri dosyalarına uygulanabilir. Günlük dosyaları etkilenmez.
WITH NO_INFOMSGS
0 İle 10 arasında önem derecelerine sahip bilgi tüm iletileri bastırır.
Sonuç Kümeleri
Aşağıdaki tabloda, sonuç kümesinin sütunlarını açıklanmaktadır.
Sütun adı |
Açıklama |
---|---|
DbId |
Veritabanı dosya kimlik numarası Veritabanı Altyapısıdaraltma denediniz. |
FileId |
Dosya kimlik numarası dosya Veritabanı Altyapısıdaraltma denediniz. |
CurrentSize |
Dosyanın halen kapsadığı 8 KB'lik sayfaların sayısı. |
MinimumSize |
Dosyanın kapsayabileceği en düşük 8 KB'lik sayfa sayısı. Bir dosyanın en küçük boyutuna veya ilk oluşturulduğundaki boyutuna karşılık gelir. |
UsedPages |
Dosyanın halen kullandığı 8 KB'lik sayfaların sayısı. |
EstimatedPages |
8 kb sayısı sayfaları Veritabanı Altyapısıdosyası daralmış aşağı doğru tahminler. |
[!NOT]
Veritabanı AltyapısıSatırlar için değil shrunk dosyaları görüntülemez.
Açıklamalar
Çekmek tüm veri ve günlük dosyalarının belirli bir veritabanı için dbcc SHRINKDATABASE komutu yürütün. Bir veri daraltmak veya günlük dosyası belirli bir veritabanı için bir defada için yürütme dbcc SHRINKFILE komut.
Veritabanındaki geçerli ücretsiz (ayrılmamış alan miktarı kadar) görüntülemek için aşağıdakini çalıştırın sp_spaceused.
dbcc SHRINKDATABASE işlemleri işlem herhangi bir noktada durdurulur ve tamamlanan bir çalışma korunur.
Veritabanı veritabanı en küçük boyuttan daha küçük yapılamaz. Veritabanını özgün olarak oluşturulduğu veya son boyutunu değiştirme işlemi dbcc SHIRNKFILE ya da alter database dosya boyutu kullanarak açıkça belirtilen boyutu yoktur. Veritabanı boyutu 10 mb boyutunda oluşturulur ve 100 mb büyür, veritabanındaki tüm verileri silmiş olsanız bile, en küçük veritabanı için azaltılabilir 10, MB'dir.
dbcc SHRINKDATABASE notruncate veya truncateonly seçeneğini ya da 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 izledi.
Shrunk veritabanı tek kullanıcı modunda olması gerekmez; ne zaman bunu daralmış diğer kullanıcılar veritabanında çalışıyor olabilir. Bu sistem veritabanları içerir.
Veritabanı yedekleniyor ise bir veritabanı daraltma olamaz. Diğer taraftan, veritabanında bir küçültme işlemi işleminde çalışırken bir veritabanını yedekleyemezsiniz.
Columnstore dizin karşılaştığında dbcc SHRINKDATABASE başarısız olur. Böylece veritabanını daha küçük olabilir columnstore dizin karşılaşmak önce tamamlanan çalışma başarılı olur. dbcc SHRINKDATABASE tamamlamak için tüm columnstore dizinler dbcc SHRINKDATABASE çalıştırmadan önce devre dışı bırakın, sonra columnstore dizinleri yeniden oluşturmak.
dbcc SHRINKDATABASE nasıl çalışır?
dbcc SHRINKDATABASE dosya başına temelinde veri dosyalarının boyutunu küçültür ancak günlük enazboyut dosyaları tüm günlük dosyalarını bir bitişik günlük havuz var sanki. Dosyaları her zaman sondan shrunk.
Varsayalım adlı bir veritabanı mydb bir veri dosyası ve iki günlük dosyaları. 10 mb veri ve günlük dosyalarının ve 6 mb veri veri dosyası içerir.
Her dosya için Veritabanı Altyapısıbir hedef boyut hesaplar. Bu dosyayı daralmış için olduğu boyutudur. Ne zaman dbcc SHRINKDATABASE belirtilen ile target_percent, Veritabanı Altyapısıhedef boyutunu hesaplar target_percentdaralma sonra dosya boş alan miktarını. Örneğin, belirtirseniz, bir target_percentdaralma 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ıtüm verileri son 2 mb veri dosyasının herhangi bir boş alan veri dosyası için ilk 8 mb ve dosya boyutunu küçültür.
Veri dosyası kabul mydb 7 mb veri içerir. Belirten bir target_percent30 / 30 ücretsiz yüzdesine daralmış bu veri dosyası sağlar. Ancak, belirleyen bir target_percent40 / veri dosyasını çünkü küçültmek değil Veritabanı AltyapısıDosya verileri şu anda kapladığı daha küçük bir boyuta küçültmek değil. Bu sorunun başka bir de düşünebilirsiniz yolu: yüzde 40 istedim boş alan + variable tam veri dosyası (dışarı-in 10 mb: 7 mb) yüzde 100'den fazla. Ücretsiz aranıyor yüzde artı veri dosyasını kapladığı geçerli yüzde çünkü üzerinde (yüzde 10), yüzde 100 herhangi bir target_sizebüyüktür 30 veri dosyasını küçültmek değil.
Günlük dosyalarının, Veritabanı Altyapısıkullanan target_percentBütün günlük; hedef boyutunu hesaplamak için Bu nedenle, target_percentküçültme işleminden sonra günlüğünde boş alan miktarıdır. 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. Mantıksal günlük hiçbir kısmı sanal günlüklerinde günlük dosyasını hedef boyutu dışında bulunuyorsa, dosya başarıyla kesilmiş ve dbcc SHRINKDATABASE iletileri tamamlanır. Ancak, sanal günlüklerinde ötesinde hedef boyutu mantıksal günlük bir parçası bulunsa bile Veritabanı Altyapısıolabildiğince çok alanı boşaltır ve daha sonra bir bilgilendirme iletisi verir. İleti, mantıksal günlüğün dosyanın sonundaki sanal günlüklerden dışarı taşınması için hangi işlemlerin yapılması gerektiğini açıklar. Sonra eylemler gerçekleştirilir, dbcc SHRINKDATABASE kalan alanı boşaltmak için kullanılabilir.
Bir günlük dosyası yalnızca sanal bir günlük dosyası sınırlarına küçültülebileceğinden, günlük dosyasını sanal bir günlük dosyasından daha küçük bir boyuta küçültmek, dosya kullanılmıyor olsa bile olanaklı olamayabilir. Sanal günlük dosyasının boyutu, günlük dosyaları oluşturulduğunda veya genişletildiğinde Veritabanı Altyapısı tarafından dinamik olarak seçilir.
En İyi Yöntemler
Bir veritabanı daraltma planlarken aşağıdaki bilgileri göz önüne alın:
Küçültme işlemi en iyi sonucu çok miktarda kullanılmayan alan oluşturan bir işlemden; örneğin bir tablonun kısaltılmasından veya bırakılmasından sonra verir.
Çoğu veritabanı, günlük işlemler için bir miktar boş alanın kullanılabilmesini gerektirir. Bir veritabanını tekrar tekrar küçültüp veritabanı boyutunun tekrar büyüdüğünü görürseniz, bu, küçültülen alanın olağan işlemler için gerekli olduğunu gösterir. Bu durumlarda veritabanını tekrar tekrar küçültmek boşa giden bir işlemdir.
Küçültme işlemi, veritabanındaki dizinlerin parçalanma durumunu korumaz ve genel olarak parçalanmayı biraz artırır. Bu, veritabanını tekrar tekrar küçültmemek için bir başka nedendir.
Belirli bir gereksinim yoksa AUTO_SHRINK veritabanı seçeneği on olarak ayarlamayın.
Sorun giderme
Altında çalışan bir hareket tarafından engellenmesi için küçültme işlemleri mümkün bir satır sürüm oluşturma tabanlı yalıtım düzeyi. Örneğin, bir DBCC SHRINK DATABASE işlemi yürütüldüğünde satır sürümü tabanlı bir yalıtım düzeyi altında çalışan büyük bir silme işlemi sürmekteyse, küçültme işlemi, dosyaları küçültmeden önce silme işleminin tamamlanmasını bekler. Bu durumda, dbcc SHRINKDATABASE ve dbcc SHRINKFILE işlemleri (5202 için SHRINKDATABASE ve SHRINKFILE 5203) bilgilendirici bir ileti yazdırmak SQL Serverhata günlüğü beş dakikada ilk saat içinde ve daha sonra bundan sonra her saat. Örneğin, hata günlüğüne aşağıdaki hata iletisini içerir:
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.
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.
Bu, küçültme işleminin, tamamladığı son işlemin zaman damgası olan 109'dan daha eski anlık görüntü işlemleri tarafından engellendiği anlamına gelir. Bu da gösterir ki transaction_sequence_num, veya first_snapshot_sequence_num sütunları sys.dm_tran_active_snapshot_database_transactions (Transact-sql)dinamik yönetimi görünümü'nü içeren bir değer 15. Ya da, transaction_sequence_num, ya first_snapshot_sequence_num görünümünde sütun içeren bir küçültme işlemi (109) tarafından tamamlanan son hareketi'den küçük bir sayı, küçültme işlemi bu işlemlerin bitmesini bekleyecek.
Sorunu gidermek için aşağıdaki görevlerden birini yapabilirsiniz:
Küçültme işlemini engelleyen işlemi sonlandırın.
Küçültme işlemini sonlandırın. Tamamlanan bir çalışma korunur.
Bir şey yapmayın ve küçültme işleminin engelleme işlemleri tamamlanana kadar beklemesine izin verin.
İzinler
Üyelik sysadmin sabit sunucu rolü veya db_owner veritabanı rolü.
Ö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 UserDByüzde 10 veritabanındaki boş alan sağlamak için kullanıcı veritabanı.
DBCC SHRINKDATABASE (UserDB, 10);
GO
B.Bir veritabanı kesilmesi
Aşağıdaki örnek veri dosyalarında küçülür AdventureWorksörnek veritabanı son ayrılmış ölçüde.
DBCC SHRINKDATABASE (AdventureWorks2012, TRUNCATEONLY);
Ayrıca bkz.
Başvuru
alter veritabanı (Transact-sql)
DBCC SHRINKFILE (Transact-SQL)