Saya hanya memiliki 2GB tersisa, jadi saya harus menghapus tabel riwayat ini. Tabel ini sekarang kosong tetapi ruang disk basis data tidak dirilis. Dan file database adalah 320GB.
sql-server
sql-server-2012
truncate
Lucas Rodrigues Sena
sumber
sumber
Jawaban:
Jika Anda merujuk konsumsi file database aktual pada volume, maka SQL Server tidak menanganinya secara otomatis . Hanya karena Anda menghapus data dari basis data tidak berarti file basis data akan menyusut agar hanya sesuai dengan data yang ada.
Apa yang Anda cari, jika Anda harus mendapatkan kembali ruang pada volume, akan menyusutkan file tertentu dengan
DBCC SHRINKFILE
. Perlu dicatat beberapa praktik terbaik, sesuai dokumentasi itu:Juga dari catatan:
Pasti ada beberapa hal yang perlu dipertimbangkan ketika melakukan ini, dan saya sarankan Anda melihat posting blog Paul Randal tentang apa yang terjadi ketika Anda melakukan operasi ini.
Langkah pertama pasti akan memverifikasi berapa banyak ruang dan ruang kosong yang benar-benar dapat Anda ganti, serta ruang yang digunakan pada file:
sumber
Ini adalah perilaku normal ketika Anda memotong tabel dan yang melibatkan penghapusan lebih dari 128 ekstensi sebagai Per Buku Daring
Anda harus menunggu dan tentu saja Anda harus mengecilkan file secara manual untuk mendapatkan kembali ruang yang juga layak disebutkan bahwa penyusutan menyebabkan fragmentasi logis dan harus dihindari kecuali jika kebutuhan Anda serius. Anda harus bagaimana keseimbangan antara menyusut dan fragmentasi. Lebih baik bertanya pada diri sendiri apakah shrink akan benar-benar menyelesaikan masalah dengan mempertimbangkan skenario di mana data akan kembali tumbuh bagaimanapun.
Gunakan kueri di bawah ini untuk memeriksa seberapa banyak ruang kosong yang ada di database
sumber
Selain jawaban Tom dan Shanky, jika database Anda berisi data LOB / BLOB, DBCC SHRINKFILE mungkin tidak berfungsi. Jika itu masalahnya, maka Anda memiliki dua opsi, tergantung pada apakah Anda dapat membuat basis data offline atau tidak. Jika Anda dapat membuat database offline, maka Anda harus menyalin data dan menyalinnya kembali untuk menghapus ruang kosong. Anda dapat melakukannya dengan salah satu dari yang berikut:
Jika Anda tidak dapat membuat database offline, maka Anda dapat menggunakan perintah DBCC SHRINKFILE dengan opsi EMPTYFILE .
Detail untuk salinan luring: http://support.microsoft.com/kb/324432/en-us
Informasi terkini untuk opsi EMPTYFILE http://msdn.microsoft.com/en-us/library/ms189493(v=sql.105).aspx
sumber