Làm cách nào để thu nhỏ kích thước tệp nhật ký SQL Server


10

Tôi không thể tìm ra cách thu nhỏ kích thước của tệp ldf cơ sở dữ liệu.

DBA nói rằng tôi nên sử dụng backup log dbname with truncate_only

Và mặc dù có vẻ như nó được thực thi chính xác trong Trình phân tích truy vấn SQL, tệp ldf vẫn trên 2 Gb.

** Làm rõ dựa trên một số nhận xét và một số câu trả lời bên dưới. *** Cơ sở dữ liệu cụ thể được đề cập là cơ sở dữ liệu trên máy tính xách tay của tôi và tôi chỉ sử dụng nó cho các quy trình phát triển. Các tập tin nhật ký đã phát triển đến một điểm mà nhìn để gây ra một đĩa đầy đủ. Không có rủi ro sản xuất liên quan. Tôi hiểu rằng phương pháp trong câu hỏi tôi đã hỏi và câu trả lời tôi chấp nhận là rủi ro trong môi trường sản xuất. *


chắc chắn đây là một câu hỏi trùng lặp?
JamesRyan

Tôi đã xem và chỉ có thể tìm thấy một câu hỏi khi SHRINKFILE thất bại. Tại thời điểm nó không có ý nghĩa, vì vậy tôi đã đăng câu hỏi này. Tôi đã xem xét xóa câu hỏi nhưng sau đó tôi đoán rằng sẽ có những người khác ở trong cùng một chiếc thuyền. Nếu bạn có thể tìm thấy một câu hỏi trùng lặp (thực sự hỏi cùng một câu hỏi, không phải câu hỏi tương tự), tôi sẽ rất vui khi xóa câu hỏi này.
Ron Tuffin

Có khoảng 8 câu trả lời trên trang đầu tiên của tìm kiếm bao gồm nó nhưng tôi đoán bạn phải biết những gì bạn đang tìm kiếm. Tôi thấy nó rất thường xuyên như là một phần của câu trả lời, tôi đã ngạc nhiên rằng nó đã không được hỏi theo cách thẳng thắn như vậy.
JamesRyan

Câu trả lời phụ thuộc rất nhiều vào tùy chọn khôi phục của cơ sở dữ liệu: đơn giản hay đầy đủ?
Richard

1
Cảm ơn đã làm rõ, Ron. Vì là cơ sở dữ liệu dành cho nhà phát triển, bạn sẽ muốn thay đổi mô hình khôi phục thành SIMPLE ngoài việc thu nhỏ tệp nhật ký, nếu không vấn đề của bạn sẽ tái diễn.
BradC

Câu trả lời:


11

Ôi, kinh hoàng! Hãy ngừng nói với mọi người rằng họ nên thu nhỏ tệp nhật ký của họ!

Nếu bạn gặp phải tình huống này, thì một trong những trường hợp sau đây rất có thể:

  1. Cơ sở dữ liệu của bạn đang ở chế độ khôi phục hoàn toàn và nó thực sự phải ở chế độ đơn giản
  2. Cơ sở dữ liệu của bạn đang ở chế độ khôi phục hoàn toàn và bạn nên thực hiện sao lưu nhật ký thường xuyên
  3. Cơ sở dữ liệu của bạn đang ở chế độ khôi phục hoàn toàn và sao lưu nhật ký của bạn không thành công vì một số lý do
  4. Bạn đang chạy các giao dịch khổng lồ đang thổi tập tin nhật ký với kích thước lớn

Câu trả lời cho mỗi trong số này là như sau:

Nếu (1), sau đó chuyển cơ sở dữ liệu sang chế độ đơn giản
Nếu (2), sau đó lên lịch sao lưu nhật ký thông thường
Nếu (3), sau đó sửa các bản sao lưu nhật ký theo lịch trình của bạn
Nếu (4), sau đó chỉ không làm điều đó :) Thay vào đó, hãy làm làm việc theo lô nhỏ hơn.

Lưu ý rằng KHÔNG phải trong số này yêu cầu sử dụng "tên tệp nhật ký sao lưu" không dùng nữa với truncate_only "

Thay vào đó, một khi bạn xóa tệp nhật ký bằng một trong các kỹ thuật trên, sau đó thu nhỏ nhật ký (bây giờ trống) bằng:

DBCC SHRINKFILE ('log logical name', 2000)

Luôn chỉ định kích thước cuối cùng hợp lý, nếu không, nó sẽ giảm xuống gần 0 và lần sau cần thiết, sẽ phải mất thời gian để phát triển.


quá tệ, câu trả lời được chấp nhận quá nhanh Đây là một trong những câu hỏi tôi sử dụng để loại bỏ các quản trị viên SQL trong các cuộc phỏng vấn. Nếu họ quay lại với bản sao lưu với truncate_only, được tính là 2 lần tấn công dơi.
Jim B

2
Tôi đồng ý rằng đó là điều cuối cùng tuyệt đối phải làm, thu nhỏ tệp. Bảo trì chính xác làm giảm nhu cầu này. Nhưng một khi nó lớn và bạn muốn nó nhỏ hơn, bạn phải thu nhỏ nó lại. Tuy nhiên, khi thu nhỏ, tốt hơn là thu nhỏ tệp càng nhỏ càng tốt, sau đó phát triển tệp thành kích thước chính xác theo gia số 8GB. Điều này sẽ tối ưu hóa số lượng VLF trong tệp. Xem - sqlskills.com/BLOGS/KIMBERLY/post/ .
Brian Knight

1
Liên kết thú vị, có vẻ như nó chỉ áp dụng nếu nhật ký chuyển đổi của bạn trên 8Gb. Tôi nghĩ rằng quan điểm của BradC (hoặc ít nhất là của tôi) là có những trường hợp khẩn cấp sẽ khiến bạn phải thu nhỏ logfile của mình nhưng bạn nên nhận ra rằng nếu bạn chạy bản sao lưu / w trunc khét tiếng, tiếp theo là thu nhỏ chuỗi bạn đã lưu trữ chuỗi dự phòng của bạn . Không sửa chữa các caue cơ bản, bạn đã mua cho mình một thời gian tốt nhất.
Jim B

4

sau khi thực hiện "sao lưu với truncate_only", bạn nên đưa ra lệnh sau để thu nhỏ

dbcc SHRINKFILE (logfilename,shrink_tosize)

ví dụ

dbcc SHRINKFILE (mydatabase_Log,512)

3

Kịch bản bạn đã viết ở trên sẽ đánh dấu nội dung nhật ký để sử dụng lại. Thực hiện theo kịch bản đó với:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Điều đó sẽ thu nhỏ nó xuống cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.