Thu nhỏ tệp nhật ký không làm giảm kích thước


23

Tôi có một cơ sở dữ liệu có tệp dữ liệu 350 MB (.mdf) và tệp nhật ký 4,9 GB (.ldf). Mô hình phục hồi được đặt thành FULL.

Khi tôi cố gắng thu nhỏ tệp nhật ký, nó không co lại.

Tôi biết thu nhỏ một cơ sở dữ liệu là không tốt và nó không nên được thực hiện. Nhưng tôi vẫn đang cố gắng làm điều đó để thu nhỏ tệp nhật ký.

Khi tôi chạy

DBCC SQLPerf(logspace) 

Tôi thấy rằng kích thước nhật ký là 4932 MB và không gian nhật ký được sử dụng là 98,76% !

Sau đó, tôi đã thử lệnh này

USE <databasename>;
DBCC loginfo;

Bây giờ hầu như tất cả các VLF là "trạng thái 2" có nghĩa là tất cả đang được sử dụng.

Tôi đã cố gắng sao lưu nhật ký và sau đó thu nhỏ tệp nhật ký. Thu nhỏ không làm giảm kích thước.

Tôi đã thay đổi mô hình khôi phục thành SIMPLEvà thử thu nhỏ lại, nhưng điều này cũng không giúp được gì.

Tôi đã kiểm tra các giao dịch mở

DBCC opentran (database);

và thấy rằng không có giao dịch nào được mở bây giờ.

Điều gì ngăn tôi thu nhỏ tệp nhật ký? Làm sao tôi có thể giải quyết việc này?

Câu trả lời:


12

Đây là câu trả lời cho câu hỏi của riêng tôi.

Chạy truy vấn bên dưới để nhận thông tin về việc chờ sử dụng lại tệp nhật ký:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

Tôi đã nhận được đầu ra sau đây:

log_reuse_wait_desc
-------------------
REPLICATION 

Có một số đối tượng liên quan đến sao chép còn lại trong cơ sở dữ liệu, ngay cả sau khi loại bỏ bản sao.

Để loại bỏ bản sao khỏi cơ sở dữ liệu, sp_removedbreplicationcó thể được sử dụng. Nhưng nó không hoạt động đối với chúng tôi vì sao chép không hoạt động vào thời điểm đó và thực sự sao chép đã bị xóa từ lâu.

Giải pháp là nhập nội dung cơ sở dữ liệu sang cơ sở dữ liệu khác bằng tùy chọn nhập của SQL Server.


Tôi đã có cùng một vấn đề và đã sử dụng điều này để thấy rằng có một giao dịch đang hoạt động trong db. log_reuse_wait_descđã cho ACTIVE_TRANSACTION. Ngay sau khi giao dịch hoàn thành, co lại hoạt động tốt.
squillman

10

Các bước để thu nhỏ nhật ký sẽ là

Sao lưu giao dịch đăng nhập thông qua SSMS hoặc T-SQL và sau đó thực hiện thu hẹp

các lệnh cho SSMS nằm dưới các tác vụ nếu bạn nhấp chuột phải vào tên cơ sở dữ liệu

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

Bạn có thể sẽ phải làm điều này nhiều lần

Nếu có một giao dịch hoặc công việc chặn hành động, hãy sử dụng Trình giám sát hoạt động để xác định quy trình và giết nó hoặc sử dụng trình giám sát hoạt động công việc của Tác nhân SQL để kết thúc công việc.

nguồn: http://support.microsoft.com/kb/907511


Nhưng vấn đề tôi gặp phải là khác. Xin vui lòng xem câu trả lời của tôi dưới đây
Navaneet

Vui mừng khi biết bạn đã tìm ra nó, cảm ơn vì đã cập nhật!
Cougar9000

Cú pháp không chính xác - thiếu dấu bằng: BACKUP LOG <Databasename> TO DISK = N '<path \ database_log.ldf';
Kỹ sư đảo ngược

9

Đọc Cách thu nhỏ nhật ký Máy chủ SQL để biết giải thích về tính chất vòng tròn của nhật ký có thể ngăn chặn thu hẹp sau khi cắt. Có thể là bạn đăng nhập điểm LSN cuối cùng vào một VLF nằm ở đuôi của LDF. Theo trực giác, bạn phải tiến tới nhật ký, bằng cách tạo ghi nhật ký, để cho phép nó thu nhỏ.


0

Bạn cần tạo bản sao lưu trước, phụ thuộc vào mô hình sao lưu được thiết lập cho cơ sở dữ liệu trước khi bạn có thể thu nhỏ cơ sở dữ liệu.

Bạn có thể thử chạy nó:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

Hoặc bạn có thể làm điều đó từ SSMS và sử dụng các công cụ đồ họa có sẵn (xem tại đây để biết chi tiết: http://msdn.microsoft.com/en-us/l Library / ms187510.aspx )

Khi bạn đã sao lưu cơ sở dữ liệu của mình, bạn có thể nén nó. Tuy nhiên, thu hẹp cơ sở dữ liệu không phải là một ý tưởng tốt vì phân mảnh chỉ mục nặng sẽ xuất hiện và việc tìm kiếm dữ liệu sẽ trở nên chậm.

Hi vọng điêu nay co ich.


Tôi biết cách sao lưu và cắt bớt nhật ký và giảm kích thước tệp nhật ký. Nhưng đối với cơ sở dữ liệu này, tôi đang gặp sự cố. Tôi chỉ chạy truy vấn, chọn log numuse_wait_desc từ sys.database trong đó name = 'dbname' và thấy rằng sao chép đang gây ra sự cố. Nhưng tôi không cài đặt sao chép. Vậy làm thế nào để loại bỏ sự thay thế từ db này được hiển thị trong nhật ký tái sử dụng Wait_desc?
Navaneet

Phiên bản SQL Server nào bạn đang sử dụng?
Toni Kostelac

Bản sao có thể được đặt thành Công việc, vì vậy hãy mở thư mục Tác nhân Máy chủ SQL và Mở rộng thư mục Công việc, kiểm tra xem có công việc sao chép nào được thiết lập không và nếu tắt nó bằng cách nhấp chuột phải và chọn Dừng công việc
Toni Kostelac

Nếu bạn đang sử dụng SQL Server 2005 trở lên thì sp_remondenameplication 'DB_NAME' sẽ xóa bản sao. Đối với máy chủ sql 2000 .. tham khảo blog.msdn.com/b/repltalk/archive/2010/11/17/iêu
Kin Shah

Nhưng vấn đề tôi gặp phải là khác. Xin vui lòng xem câu trả lời của tôi
Navaneet

0

Tôi đã thấy rằng tôi phải thực hiện 2 hoặc 3 bản sao lưu của cả cơ sở dữ liệu và nhật ký giao dịch để có được nhật ký giao dịch để thực sự giảm kích thước. Tôi có một cơ sở dữ liệu được tạo với mô hình khôi phục hoàn toàn. Mỗi đêm, nó thực hiện sao lưu cơ sở dữ liệu và nhật ký giao dịch nhưng chắc chắn nhật ký giao dịch dường như liên tục tăng lên trong 2-3 tuần. Khi dung lượng đĩa còn lại đạt tới 1GB tôi sẽ thấy rằng nhật ký giao dịch là khoảng 30 GB. Tôi đã làm theo các bước được Microsoft khuyến nghị và sau lần lặp thứ 4 hoặc thứ 5 sao lưu cả cơ sở dữ liệu và nhật ký giao dịch, nhật ký giao dịch cuối cùng sẽ giải phóng thêm dung lượng và thu hẹp. Sau đó, tôi quay lại và xóa nhiều bản sao lưu mà tôi đã tạo.


Tôi nghĩ rằng bạn đang làm điều gì đó sai. Nếu bạn sao lưu nhật ký đúng cách thì nhật ký không sử dụng sẽ bị cắt ngắn. Các lệnh được đưa ra trong câu hỏi của tôi có thể giúp bạn giải quyết vấn đề.
Navaneet

-8

Công việc của tôi đối với Bản sao đang chặn thu hẹp tệp nhật ký là:

  1. Đặt mô hình khôi phục DB thành đơn giản
  2. Lấy DB ngoại tuyến
  3. Tạo sao lưu tệp nhật ký (chỉ trong trường hợp)
  4. Xóa tệp nhật ký
  5. Mang DB trực tuyến

Trong trường hợp của tôi, nó đã làm việc. Sau khi mang nhật ký trực tuyến DB được tạo tự động và kích thước của nó là 512kb thay vì 70GB. Nhưng đây chỉ là một cách giải quyết. Vấn đề gốc không được giải quyết. Trong trường hợp của tôi, chúng tôi đang sử dụng nhân rộng.


4
Đây là lời khuyên tồi tệ, đừng bao giờ xóa nhật ký giao dịch của bạn, tất cả các loại vấn đề có thể đến từ việc này như tham nhũng
Tom V - Đội ngũ
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.