Apakah saya benar-benar perlu menyimpan file .LDF?

9

Setiap bulan kami membuat snapshot akhir bulan dari basis data produksi kami. Snapshot akhir bulan ini hanya untuk tujuan pelaporan, tidak ada sisipan, pembaruan, atau penghapusan yang pernah dilakukan. Setiap snapshot ini memiliki .MDFdan .LDFfile.

Saya ingin menghapus .LDFfile dan membebaskan beberapa ruang di server. Apakah ada alasan mengapa saya perlu menyimpan .LDFfile?

Klarifikasi:

Basis data produksi kami diciptakan kembali setiap malam dari ekstrak file dari sistem lain. Kami hanya melaporkan dari basis data produksi ... tidak ada pembaruan yang pernah dilakukan.

Proses Nightly:
Dari apa yang saya tahu ...
Setiap malam tabel databse yang terpotong
Tabel akan diisi melalui serangkaian massal insert pernyataan
Indeks yang dibangun kembali

Michael Riley - AKA Gunny
sumber

Jawaban:

16

Anda seharusnya tidak menghapus file log. Jika Anda mencoba memasang kembali file data tanpa log, SQL Server secara teknis dapat membuatnya kembali, tetapi ada beberapa masalah potensial, seperti jika ada transaksi terbuka ketika database dilepaskan. Dalam hal ini, Anda akan kehilangan total data.

Konsumsi spasi, dan jangan hapus file log Anda . Anda meminta masalah dengan itu.

Lihat artikel ini tentang Log Transaksi , khususnya bagian "Log Kesalahan Manajemen".

Thomas Stringer
sumber
9

Seperti disebutkan dalam jawaban lain , Anda tidak dapat menghapus file log. Yang bisa Anda lakukan adalah mengatur basis data READ_ONLY. Dengan basis data READ_ONLY, tidak ada modifikasi yang diizinkan dan file log tidak akan tumbuh. Anda bisa mengurangi ukuran file log ke ukuran minimal dan mencapai tujuan Anda dari jejak minimal. Untuk mengatur database dalam READ_ONLYmenjalankan perintah berikut:

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

Anda dapat mengubah database kembali ke READ_WRITE, membuat perubahan apa pun yang diperlukan, lalu mengaturnya READ_ONLYkapan saja Anda perlu.

File log masih diperlukan untuk mempertahankan properti ACID dari database.

jgardner04
sumber
2

Faktanya adalah bahwa Anda dapat membuat database hanya menggunakan file mdf. Ini adalah perintah sp_attach_single_file_db (Transact-SQL). Perhatikan bahwa itu akan dihapus dalam versi Microsoft SQL Server di masa depan. Tapi, tidak pintar untuk menghapus file LDF Anda. Shark benar 'Anda meminta masalah dengan itu.' Pandangan lain - apakah file pdf Anda besar? Jika ya, Anda dapat melakukan sesuatu tentang mereka.

  1. Setel basis data Anda ke model pemulihan sederhana . Anda dapat melakukan ini hanya jika Anda tidak ingin membatalkan transaksi
  2. Alih-alih membuat file MDF dan LDF, buat file backup database lengkap (.BAK). Ini akan lebih kecil dari MDF + LDF
Carol Baker Barat
sumber
-3

Inilah solusi yang saya buat untuk mengecilkan file LDF.

  1. Lepaskan Database
  2. Ganti nama file LDF ke * _old.ldf
  3. Lampirkan Database
  4. Hapus referensi ke LDF yang hilang

Ini membuat ulang file LDF yang berukuran 504K.

  1. Hapus * _old.ldf
  2. Tempat sampah daur ulang kosong

Ini telah mendapatkan kembali sejumlah besar ruang disk di server. Ini berfungsi untuk kita karena semua basis data ini HANYA merupakan basis data pelaporan statis. Tidak ada Sisipan, Pembaruan, atau Penghapusan yang akan dilakukan terhadap basis data ini.

UPDATE 2019-09-24: Ya, saya setuju ini adalah ide yang sangat buruk. Saya berhenti melakukan ini segera. Saya telah membangun kembali semua indeks menggunakan faktor isi 100. Hanya menyusut file .ldf. Dan mengubah semua database menjadi BACA SAJA.

Michael Riley - AKA Gunny
sumber
6
Wow, ini ide yang sangat buruk. Bagaimana jika database tidak berhasil dilepaskan, atau hilang atau rusak di suatu tempat antara 1 dan 3? Anda SCREWED. Anda memiliki salinan NOL dari basis data Anda.
Aaron Bertrand
3
Cara yang tepat untuk melakukan ini adalah: 1. Ambil cadangan COPY_ONLY dari database. 2. Kembalikan di server pelaporan. 3. Atur pemulihan menjadi sederhana dan tandai salinan yang dipulihkan sebagai hanya-baca. 4. Kecilkan file log secara manual. Ya Anda membutuhkan ruang sementara itu, tetapi Anda akan tetap mempertahankan pekerjaan Anda!
Aaron Bertrand