Dalam SQL Server (2008 dalam hal ini) bagaimana saya bisa dengan cepat menyusutkan semua file, baik log dan data, untuk semua database pada contoh? Saya bisa melalui SSMS dan klik kanan masing-masing dan pilih Tugas -> Kecilkan, tapi saya sedang mencari sesuatu yang lebih cepat.
Saya membuat skrip beberapa "Buat database" dan lupa mereka telah menggelembungkan ukuran untuk default, dan tidak perlu cukup banyak ruang yang disediakan untuk file-file ini pada proyek ini.
sumber
SELECT 'USE [' + d.name + N']' + CHAR(13) + CHAR(10) + 'DBCC SHRINKFILE (N''' + mf.name + N''' , 0, TRUNCATEONLY)' + CHAR(13) + CHAR(10) + CHAR(13) + CHAR(10) FROM sys.master_files mf JOIN sys.databases d ON mf.database_id = d.database_id WHERE d.database_id > 4
Tapi mencari tahu itu memberi saya masalah baru. Tidak aktif untuk mengirim pertanyaan lain.Bagaimana dengan satu baris pernyataan sql?
Silahkan baca ini posting blog sangat menarik sebelum mengeksekusi pernyataan sql berikut.
sumber
DBCC SHRINKDB (dan sepupunya SHRINKFILE) sangat lambat, karena ada banyak sekali eksekusi berurutan yang terjadi dalam kode itu.
Cara yang jauh lebih cepat untuk mengecilkan file database adalah ini:
sp_spaceused
untuk menentukan seberapa besar)Karena indeks yang dibangun kembali paralel secara masif, teknik ini sering menghasilkan penyusutan database yang jauh lebih cepat. Tentu saja, itu mengharuskan Anda untuk memiliki sedikit ruang ekstra untuk grup file baru saat proses berlangsung. Namun, Anda hanya perlu ruang yang cukup di grup fileg baru untuk menampung grup fileg terbesar dalam instance (karena Anda akan memperoleh ruang saat Anda melanjutkan).
Teknik ini juga memiliki manfaat tambahan yaitu defragment indeks Anda dalam proses.
sumber
Saya menyetel sedikit pertanyaan untuk menyusutkan hanya LOG seperti yang diminta:
sumber
Kode di bawah ini, dapatkan daftar basis data non sistem, atur basis data agar hanya dibaca dan kemudian perkecil file tersebut. Saya telah menyimpan kode ini di beberapa kotak SQL Server menggunakan SQL Agent Job, di mana ruang selalu menjadi masalah. Pada Sabtu malam / Minggu setiap minggu, itu mulai berjalan dan mengecilkan semua basis data dalam beberapa jam (tergantung pada ukuran basis data).
sumber
Kecilkan semua file log kecuali master, model, msdb:
sumber
Yang ini memperluas jawaban di atas, menggunakan kursor untuk beralih melalui pernyataan SQL satu per satu. Ini tidak sesingkat jawaban Emrah tetapi memungkinkan untuk logika tambahan dalam loop sementara di dalam kursor ..
sumber
Kami dapat mengulangi
SHRINKDB
danSHRINKFILE
untuk semua basis data secara dinamis:Anda dapat menemukan detail di artikel ini .
sumber