Bagaimana cara mengecilkan ukuran file log SQL Server

10

Saya tidak tahu bagaimana mengecilkan ukuran file database ldf.

DBA mengatakan saya harus menggunakan backup log dbname with truncate_only

Dan sementara itu tampak seperti itu dijalankan dengan benar di SQL Query Analyzer file ldf masih lebih dari 2 Gb.

** Klarifikasi berdasarkan beberapa komentar dan beberapa jawaban di bawah. *** Basis data tertentu yang dimaksud adalah basis data ada di laptop saya dan saya menggunakannya untuk proses pengembangan saja. File log tumbuh ke titik di mana tampak menyebabkan disk penuh. Tidak ada risiko produksi yang terlibat. Saya mengerti bahwa metode dalam pertanyaan yang saya tanyakan dan jawaban yang saya terima berisiko dalam lingkungan produksi. *

Ron Tuffin
sumber
tentunya ini adalah pertanyaan rangkap?
JamesRyan
Saya mencari dan hanya dapat menemukan satu yang mengajukan pertanyaan tentang kapan SHRINKFILE gagal. Pada saat itu tidak masuk akal, jadi saya memposting pertanyaan ini. Saya memang mempertimbangkan menghapus pertanyaan tetapi kemudian saya pikir akan ada orang lain yang berada di kapal yang sama. Jika Anda dapat menemukan pertanyaan duplikat (yang sebenarnya menanyakan pertanyaan yang sama, bukan yang serupa), saya dengan senang hati akan menghapus pertanyaan ini.
Ron Tuffin
Ada sekitar 8 jawaban di halaman pertama pencarian yang menyertakannya, tetapi saya rasa Anda harus tahu apa yang Anda cari. Saya melihatnya secara teratur sebagai bagian dari jawaban, saya terkejut bahwa itu tidak ditanyakan secara langsung.
JamesRyan
Jawabannya sangat tergantung pada opsi pemulihan database: sederhana atau penuh?
Richard
1
Terima kasih telah menjelaskan, Ron. Karena ini adalah database dev, Anda ingin mengubah model pemulihan ke SIMPLE selain menyusutkan file log ke bawah, jika tidak masalah Anda akan berulang.
BradC

Jawaban:

11

Oh, kengeriannya! Tolong berhenti memberi tahu orang-orang bahwa mereka harus mengecilkan file log mereka!

Jika Anda mendapatkan diri Anda dalam situasi ini, maka salah satu dari kasus berikut ini sangat mungkin:

  1. Basis data Anda dalam mode pemulihan penuh, dan itu harus benar-benar dalam mode sederhana
  2. Basis data Anda dalam mode pemulihan penuh, dan Anda harus mengambil cadangan log biasa
  3. Basis data Anda dalam mode pemulihan penuh, dan cadangan log Anda gagal karena suatu alasan
  4. Anda menjalankan transaksi besar-besaran besar-besaran yang meniup file log hingga ukuran besar

Jawaban untuk masing-masing adalah sebagai berikut:

Jika (1), kemudian alihkan database ke mode sederhana
Jika (2), kemudian jadwalkan pencadangan log reguler
Jika (3), kemudian perbaiki pencadangan log terjadwal Anda
Jika (4), maka jangan lakukan itu :) Sebaliknya, lakukan bekerja dalam batch yang lebih kecil.

Perhatikan bahwa NONE ini membutuhkan penggunaan "cadangan log dbname dengan (usang) dengan truncate_only"

Sebagai gantinya, setelah Anda menghapus file log menggunakan salah satu teknik di atas, lalu susutkan log (sekarang kosong) dengan:

DBCC SHRINKFILE ('log logical name', 2000)

Selalu tentukan ukuran akhir yang masuk akal, jika tidak maka ukurannya akan menyusut menjadi hampir 0, dan pada saat dibutuhkan, harus meluangkan waktu untuk tumbuh.

BradC
sumber
Sayang sekali jawaban yang diterima begitu cepat. Ini adalah salah satu pertanyaan yang saya gunakan untuk menghilangkan admin SQL selama wawancara. Jika mereka kembali dengan cadangan dengan truncate_only yang dihitung sebagai 2 serangan kelelawar.
Jim B
2
Saya setuju bahwa ini hal terakhir yang harus dilakukan, mengecilkan file. Perawatan yang benar menghilangkan kebutuhan untuk ini. Tapi begitu besar dan Anda ingin lebih kecil, Anda harus mengecilkannya. Namun, ketika menyusut, lebih baik mengecilkan file sekecil mungkin, kemudian menumbuhkan file ke ukuran yang benar dalam peningkatan 8GB. Ini akan mengoptimalkan jumlah VLF dalam file. Lihat - sqlskills.com/BLOGS/KIMBERLY/post/… .
Brian Knight
1
Tautan yang menarik, tampaknya hanya berlaku jika trans log Anda lebih dari 8Gb. Saya pikir poin BradC (atau setidaknya milik saya) adalah bahwa ya ada keadaan darurat yang akan membuat Anda menyusutkan logfile Anda, tetapi Anda harus mengenali bahwa jika Anda menjalankan trunc backup / w yang terkenal, diikuti oleh shrinkfile, Anda baru saja menyembunyikan rantai cadangan Anda (harap itu bukan sesuatu yang penting), dan selain dari masalah ruang disk Anda kemungkinan besar mendapatkan beberapa masalah sql server serius mungkin dari perspektif desain database atau yang arsitektur. Tanpa memperbaiki caue yang mendasarinya Anda telah membeli waktu terbaik untuk diri sendiri.
Jim B
4

setelah melakukan "backup dengan truncate_only" Anda harus mengeluarkan perintah berikut untuk menyusut

dbcc SHRINKFILE (logfilename,shrink_tosize)

misalnya

dbcc SHRINKFILE (mydatabase_Log,512)
Mani
sumber
3

Skrip yang Anda tulis di atas akan menandai konten log untuk digunakan kembali. Ikuti skrip itu dengan:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Itu akan mengecilkannya untuk Anda.

Brian Knight
sumber