Đặt thủ công kích thước tệp nhật ký sau khi thu nhỏ SQL Server 2008 R2


10

Đang trở thành một DBA không tự nguyện trong công việc tại một số người và thực sự cần sự giúp đỡ về một cái gì đó.

Chúng tôi có cơ sở dữ liệu 40 GB ở Chế độ khôi phục hoàn toàn, không có bản sao lưu nhật ký được định cấu hình và tệp nhật ký khổng lồ 84GB. Kế hoạch của tôi cho đến nay để cứu vãn tình huống này là chạy một bản sao lưu nhật ký đầy đủ trên cơ sở dữ liệu, thu nhỏ tệp nhật ký và thực hiện kế hoạch bảo trì để chạy bản sao lưu nhật ký mỗi đêm với bản sao lưu cơ sở dữ liệu để giúp kiểm soát nó.

Vấn đề của tôi là tôi không muốn tệp nhật ký thu nhỏ lại thành không có gì và dành buổi sáng đầu tiên vào thứ Hai liên tục phát triển. Tôi có một ước tính sơ bộ về việc tập tin sẽ là gì (khoảng 20% ​​cơ sở dữ liệu) và muốn thiết lập điều này từ việc di chuyển để đảm bảo càng nhiều không gian liền kề càng tốt. Đây có phải chỉ là một trường hợp thay đổi "Kích thước ban đầu" trong Thuộc tính cơ sở dữ liệu -> Tệp? Tôi cũng đoán rằng cơ sở dữ liệu sẽ cần phải ngoại tuyến để điều này xảy ra?

Cảm ơn trước


2
Bạn có kế hoạch sao lưu cơ sở dữ liệu một lần một đêm và chạy sao lưu nhật ký một lần một đêm? Có lẽ bạn nên xem xét mô hình phục hồi đơn giản để nhật ký tự quản lý.
Aaron Bertrand

Aaron, tôi đồng ý với bạn về quan điểm phục hồi DR nhưng để phục hồi hoạt động, họ vẫn có thể muốn nó đầy đủ. Đừng quên rằng mặc dù họ chỉ thực hiện sao lưu nhật ký một lần một ngày nhưng nó vẫn cho phép khôi phục kịp thời.
Kenneth Fisher

1
@Kenneth vì vậy nếu bạn thực hiện sao lưu toàn bộ vào nửa đêm, thì sao lưu nhật ký lúc 12:05, tôi thấy điều đó khá giả. YMMV.
Aaron Bertrand

@Aaron một lần nữa, tất cả đều hoạt động nhưng trừ khi tôi nhầm, bạn có thể sử dụng bản sao lưu đầy đủ từ tối hôm trước và nhật ký được thực hiện vào lúc 12:05 và để khôi phục lại bất kỳ điểm nào trong ngày hôm trước. Ngoài ra, nếu họ gặp phải vấn đề, sẽ không có vấn đề gì lớn để thực hiện đăng nhập lại, khôi phục từ tối hôm trước và kịp thời quay lại vài phút trước. Tôi không nói rằng họ nên giữ nó đầy đủ, chỉ nói có liên quan nhiều hơn quan điểm DR. Điều đó được nói rằng nếu họ đang giữ đầy đủ thì họ nên thực hiện sao lưu nhật ký thường xuyên hơn một lần một ngày.
Kenneth Fisher

2
@Kenneth nhưng nếu bạn chỉ sao lưu nhật ký một lần một ngày, đây là lý do tại sao nó rất lớn ở nơi đầu tiên! Nếu bạn cần khôi phục đến 12:07 sáng ngày hôm qua, bạn cần tải toàn bộ nhật ký trong cả ngày để phục hồi 2 phút. Không hữu ích lắm.
Aaron Bertrand

Câu trả lời:


6

Chỉ cần thu nhỏ đến những gì bạn nghĩ là kích thước tối ưu. Không sử dụng UI, chỉ cần làm điều này - giả sử 200 MB là kích thước tối ưu của bạn:

USE yourdb;
GO
DBCC SHRINKFILE(yourdb_log, 200);

Nếu bạn chỉ quan tâm đến việc sao lưu nhật ký một lần một ngày và không quan tâm đến việc khôi phục tại thời điểm, thì bạn nên chuyển sang mô hình khôi phục đơn giản. Điều này có nghĩa là sao lưu nhật ký là không cần thiết (thực tế là không thể) nhưng nội dung của nhật ký sẽ tự quản lý.

Nếu bạn muốn sao lưu nhật ký có ý nghĩa, đừng lên kế hoạch sao lưu toàn bộ vào ban đêm và sau đó là một bản sao lưu nhật ký duy nhất ngay sau đó. Điều này giữ cho bạn trong mô hình khôi phục hoàn toàn, làm cho nhật ký hoạt động thực sự khó khăn và không mua cho bạn bất cứ thứ gì. Vì vậy, nếu bạn muốn phục hồi tại thời điểm, hãy chạy sao lưu nhật ký thường xuyên hơn với tốc độ thỏa mãn khả năng chịu mất dữ liệu của bạn. Nếu bạn không muốn mất hơn 15 phút dữ liệu, hãy chạy sao lưu nhật ký cứ sau 15 phút.


Cảm ơn vì điều đó. Tôi hoàn toàn hiểu tất cả các ý kiến ​​về việc chuyển sang mô hình phục hồi đơn giản. Thật không may, đây là một quyết định mà tôi không thể đưa ra và cần phải được điều hành qua nhiều cấp độ quan liêu. Nó chắc chắn là một cái gì đó tôi sẽ đề nghị mặc dù.
Tim Alexander

12

Quản lý tập tin của bạn có thể là một hoạt động hoàn toàn trực tuyến. Bạn có hai đường dẫn, tùy thuộc vào nhu cầu giữ lại thông tin nhật ký của bạn cho mục đích khôi phục:

Không cần thời gian phục hồi

  1. Chuyển đổi cơ sở dữ liệu để SIMPLEphục hồi. Thực hiện một điểm kiểm tra để ghi các giao dịch vào đĩa.
  2. Làm phẳng các bản ghi.
  3. Thay đổi kích thước nhật ký để kích thước phù hợp.

Tôi cũng khuyên bạn nên đặt số tiền tăng trưởng cố định và tăng trưởng không giới hạn (để giúp quản lý nhật ký của bạn tốt hơn). Lưu ý, số tiền tăng trưởng cố định rất nhiều, tùy thuộc vào số tiền, tôi khuyên bạn nên sử dụng 1-2 GB ban đầu tùy thuộc vào mức tăng trưởng mà bản ghi có thể mong đợi. Lý tưởng nhất là nhật ký của bạn sẽ không phát triển nhiều, vì vậy điều này sẽ không ảnh hưởng nhiều. Nếu nhật ký của bạn đang phát triển thường xuyên, bạn có thể cần phải xem lại kích thước của mình.

Hoàn thành sử dụng:

ALTER DATABASE [foo] 
SET RECOVERY SIMPLE;

CHECKPOINT;

DBCC SHRINKFILE (foo_log,0);

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

--Optional if you want the database in full recovery mode 
--for point in time recovery going forward
ALTER DATABASE [foo] 
SET RECOVERY FULL;

Cần phục hồi thời gian

Hangout lớn nhất sẽ là bạn không thể thu nhỏ tệp nhật ký của mình qua phân đoạn VLF hiện đang hoạt động. Để thấy điều này, bạn có thể sử dụng DBCC LOGINFOtrong bối cảnh cơ sở dữ liệu. Bất kỳ phân đoạn nào có Status = 2 đều hoạt động. Để xóa các phân đoạn hoạt động, bạn sẽ cần chạy bản sao lưu nhật ký giao dịch khi không có giao dịch nào đang hoạt động trong phân khúc đó. Các bước của bạn là:

  1. Chạy một bản sao lưu nhật ký giao dịch.
  2. Thu nhỏ tập tin của bạn. (Lý tưởng làm phẳng, nhưng nếu cơ sở dữ liệu của bạn đang hoạt động thì điều này sẽ khó thực hiện).
  3. Lặp lại bước 1 và 2 cho đến khi nhật ký của bạn có kích thước phù hợp, lý tưởng là càng nhỏ càng tốt.
  4. Thay đổi kích thước nhật ký để kích thước phù hợp.

Hoàn thành sử dụng:

BACKUP LOG [foo] TO DISK='<Location of t-log backup>';

DBCC SHRINKFILE (foo_log,0);

--Repeat the above until your log file is small "enough"

ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);

Một số tài nguyên bổ sung để hiểu những gì đang diễn ra ở đây:


2

Trên thực tế không, cơ sở dữ liệu không cần ngoại tuyến để thu nhỏ nhật ký. Và tôi sẽ nói rằng đây có lẽ là một trong số ít trường hợp thu nhỏ nhật ký là một ý tưởng tốt. Bạn có thể đặt kích thước ban đầu, nhưng việc thu nhỏ sẽ dễ dàng hơn và bảo nó thu nhỏ xuống một kích thước cụ thể.

USE [DBName]
GO
DBCC SHRINKFILE (N'LogName' , SizeInMg)
GO

Bạn cũng có thể làm điều đó bằng cách sử dụng GUI và sử dụng nút radio thứ hai và hộp kiểm cho biết cuối cùng bạn muốn bản ghi lớn đến mức nào. Bạn có thể truy cập GUI bằng cách nhấp chuột phải vào cơ sở dữ liệu trong trình thám hiểm đối tượng trong SSMS, chọn tác vụ, thu nhỏ, tệp.


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.