Nội dung MDF và LDF trong SQL Server


8

Giả sử tôi có một cơ sở dữ liệu với một tệp .mdf.ldftệp.

Cơ sở dữ liệu được tách ra, không có giao dịch và SQL Server bị dừng.

Tôi đoán rằng tất cả các dữ liệu đã có trong .mdftập tin?

Các .ldftập tin về cơ bản là trống rỗng? Nếu .ldftập tin không trống thì nó chứa gì?

Nếu tôi xóa .ldftệp và tự tạo một .ldftệp dài 0 byte mới có cùng tên như trước đây, tôi có thể đính kèm lại cơ sở dữ liệu mà không mất dữ liệu không?


Không chắc chắn lý do tại sao nó đã bị hạ cấp ... Bạn có thể cung cấp một số nhận xét? Có lẽ sau đó tôi có thể làm lại câu hỏi

Tại sao không thử những gì bạn đề xuất (xóa .ldftệp nhật ký và tạo tệp mới) và xem điều gì sẽ xảy ra. Khi bạn đã hoàn thành, vui lòng quay lại, cho chúng tôi biết những gì bạn đã tìm thấy và gắn cờ hoặc @ trả lời tôi. Cảm ơn.
Kev

Câu hỏi này có thể giúp: stackoverflow.com/questions/5801675/ từ
EJ Brennan

Bạn đang cố gắng để đạt được điều gì, hay bạn chỉ tò mò về những gì sẽ xảy ra?
Jon Seigel

Tôi tò mò về những gì sẽ xảy ra và quan trọng hơn là tôi muốn có cảm giác về những gì nó có thể chứa. Tôi không có kiến ​​thức sâu về cơ sở dữ liệu nhưng nếu LDF chỉ chứa thông tin giao dịch, khi máy chủ cơ sở dữ liệu bị dừng và cơ sở dữ liệu tách ra, tôi không thấy bất kỳ lý do nào để tệp ldf có bất cứ điều gì cả.
Eduard

Câu trả lời:


6

(Tuyên bố miễn trừ trách nhiệm đối với các peeps bay từ Google: Tôi không khuyên bạn nên sử dụng phương pháp được hỏi trong câu hỏi này để lấy lại không gian tệp nhật ký! DBCC SHRINKFILEThay vào đó, hãy sử dụng .)

Tôi đoán rằng tất cả dữ liệu đã có trong tệp .mdf?

Có, tách ra bắt đầu một CHECKPOINTtrong cơ sở dữ liệu, vì vậy tất cả các trang dữ liệu bẩn làm cho nó vào đĩa.

Cơ sở dữ liệu không thể tách rời nếu nhật ký giao dịch được yêu cầu bởi một quy trình khác (phản chiếu, sao chép, v.v.) hoặc nếu không thể truy cập độc quyền (tất cả các giao dịch mở trong cơ sở dữ liệu cần phải cam kết hoặc khôi phục). Do đó, nhật ký sẽ không bao giờ chứa các giao dịch trên chuyến bay như bạn có thể thấy nếu nguồn bị tắt đột ngột (tức là sự cố).

Tệp .ldf về cơ bản là trống? Nếu tệp .ldf không trống thì nó chứa gì?

  • SIMPLErecovery: tệp nhật ký sẽ chứa các bản ghi nhật ký mô tả sự CHECKPOINTcố xảy ra trước khi cơ sở dữ liệu bị tắt. (A CHECKPOINTcũng xóa nhật ký trong chế độ này.)

  • BULK_LOGGEDFULLphục hồi: tệp nhật ký sẽ chứa tất cả các bản ghi nhật ký chưa bị xóa. (Quá trình duy nhất xóa nhật ký trong chế độ này là sao lưu nhật ký.)

Mẹo: bản ghi nhật ký trong tệp nhật ký có thể được kiểm tra bằng TVF không có giấy tờ sys.fn_dblog.

Nếu tôi xóa tệp .ldf và tự tạo một tệp .ldf dài 0 byte có cùng tên như trước đây, tôi có thể đính kèm lại cơ sở dữ liệu mà không mất dữ liệu không?

Làm điều này sẽ phá hủy thông tin tiêu đề tệp, do đó làm hỏng tệp nhật ký.

Để có được cơ sở dữ liệu để đính kèm, bạn sẽ phải xóa / đổi tên tệp nhật ký và đính kèm cơ sở dữ liệu bằng cách sử dụng ATTACH_REBUILD_LOGSQL Server để tạo tệp nhật ký mới từ đầu ở vị trí mặc định.

Giả sử bạn đã làm điều đó,

  • Trong SIMPLEphục hồi, sẽ không có dữ liệu người dùng nào bị mất vì tất cả những gì đã biến mất là CHECKPOINTcác bản ghi nhật ký tương đối không quan trọng .

  • Trong các mô hình khôi phục khác, nó sẽ phá vỡ chuỗi sao lưu nhật ký và rõ ràng mọi bản ghi nhật ký đã xóa sẽ không còn được sao lưu (và có thể chưa được sao lưu). Điều này có ý nghĩa rõ ràng nên cơ sở dữ liệu cần phải được khôi phục.

Vì vậy, ... về mặt kỹ thuật, không, sẽ không có bất kỳ mất dữ liệu ngay lập tức ; tuy nhiên, phương pháp này chắc chắn không phải là một thực hành tốt, đặc biệt là trong một mô hình phục hồi khác SIMPLE.


Cảm ơn rât nhiều. Tôi sẽ cần đọc thêm một số thông tin về CHECKPOINT và các bản sao lưu. Khi phục hồi ĐẦY ĐỦ, CHECKPOINT xảy ra dữ liệu cũng được lưu vào tệp mdf? Khi thực hiện sao lưu toàn bộ, tệp .bak chỉ giống như tệp mdf? Một bản sao lưu nhật ký trong mô hình phục hồi SIMPLE không có ý nghĩa, phải không?
Eduard

Tôi tìm thấy hai liên kết này rất nhiều thông tin. msdn.microsoft.com/en-us/l Library / ms191164.aspxmsdn.microsoft.com/en-us/l Library / ms190217.aspx
Eduard

@Eduard: CHECKPOINTluôn ghi các trang dữ liệu bẩn vào đĩa, bất kể mô hình khôi phục. Trong SIMPLEphục hồi, a CHECKPOINTcũng xóa nhật ký. Một bản sao lưu đầy đủ chứa tất cả các phạm vi dữ liệu và phần yêu cầu của nhật ký để làm cho dữ liệu trong bản sao lưu được giao dịch nhất quán tại thời điểm phần đọc dữ liệu hoàn thành (tất cả các mô hình khôi phục). Chính xác, một bản sao lưu nhật ký trong SIMPLEphục hồi là không thể.
Jon Seigel

3

Nếu LDF chỉ chứa thông tin giao dịch, khi máy chủ cơ sở dữ liệu bị dừng và cơ sở dữ liệu tách ra, tôi không thấy bất kỳ lý do nào để tệp ldf có bất cứ điều gì cả.

Có vẻ như bạn đang thiếu tầm quan trọng của nhật ký giao dịch lịch sử.

Nhật ký giao dịch chứa đủ thông tin để hoàn tác tất cả các thay đổi được thực hiện đối với tệp dữ liệu như một phần của bất kỳ giao dịch riêng lẻ nào.

Nếu bạn có một bản ghi có giá trị X, được sửa đổi thành giá trị Y, thay đổi này được ghi lại trong nhật ký giao dịch. Nếu bạn chỉ sao lưu tệp dữ liệu của mình và làm trống nhật ký, bạn đã mất giá trị ban đầu của X mãi mãi, vì hiện tại chỉ có một bản ghi của Y. Tệp nhật ký giao dịch cho phép bạn khôi phục thay đổi này nếu cần.

Nhật ký giao dịch là bản ghi về cách bạn xây dựng nội dung hiện tại của tệp dữ liệu và cho phép bạn quay lại bất kỳ thời điểm nào, thay vì chỉ các khoảng thời gian cụ thể mà bạn đã sao lưu tệp dữ liệu của mình.

Có những trường hợp điều này là quan trọng. Ví dụ, cơ sở dữ liệu giao dịch cung cấp năng lượng cho một trang web thương mại điện tử. Bạn có thể muốn giữ bản sao lưu nhật ký giao dịch ngay cả khi bạn đã sao lưu các tệp dữ liệu thực tế.

Có những trường hợp không quá quan trọng, chẳng hạn như các bảng phân tầng cho kho dữ liệu, trong đó "dữ liệu thô" có thể được tải đơn giản từ nguồn do đó bắt đầu mới.


Cảm ơn Matt. Bây giờ tôi nghĩ rằng tôi đã sử dụng FULL (hoặc BULK_LOGGED) làm mô hình khôi phục! Không chỉ cho phép sao lưu tệp "nhỏ" (tệp sao lưu nhật ký), điểm chính là cho phép bạn tua lại đến bất kỳ thời điểm nào! Vì vậy, bạn có một cơ sở dữ liệu kiểm toán đầy đủ. Với SIMPLE, bạn chỉ nhận được những gì bạn lưu trữ trong bản sao lưu vào thời điểm chính xác bạn chạy bản sao lưu.
Eduard

0

Tệp .LDF sẽ không nhất thiết phải trống. Tùy thuộc vào một số yếu tố (bao gồm mô hình khôi phục cơ sở dữ liệu của bạn, khoảng thời gian điểm kiểm tra, cho dù bạn có các tùy chọn như sao chép hoặc bật CDC), cũng có thể có các giao dịch trong nhật ký của bạn cần được áp dụng hoặc khôi phục.

Bạn chắc chắn có thể làm những gì bạn đang yêu cầu và xóa tệp LDF, tuy nhiên bạn gặp phải khả năng mất giao dịch hoặc kết thúc với cơ sở dữ liệu bị hỏng, do đó, hãy tự chịu rủi ro.


Khi máy chủ cơ sở dữ liệu bị dừng và các tệp cơ sở dữ liệu bị xóa, LDF vẫn có thể chứa các giao dịch chưa hoàn thành?
Eduard

Xin lỗi, tôi nên thêm tôi đang suy nghĩ về mô hình phục hồi đơn giản. Xin lỗi
Eduard

Ngay cả trong phục hồi đơn giản, bạn có thể có các giao dịch chuyến bay sẽ ảnh hưởng đến mọi thứ (hoặc như tôi đã đề cập sao chép / CDC, v.v.)
Nic
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.