Làm cách nào để khôi phục dữ liệu từ tệp LDF?


9

Chúng tôi đang sử dụng SQL 2005 Express Edition. Chúng tôi muốn đọc dữ liệu từ tệp LDF để khôi phục một số hồ sơ đã xóa.

Chúng tôi đã thử sử dụng phiên bản dùng thử của ApexSQL giúp chúng tôi rất nhiều. Thay vì sử dụng phần mềm của bên thứ ba, chúng tôi đang cố gắng tìm ra cách tự đọc tệp nhật ký.

Làm cách nào chúng ta có thể đọc và khôi phục dữ liệu từ tệp LDF?


Là cơ sở dữ liệu sử dụng mô hình phục hồi đầy đủ hay chỉ đơn giản?
MartinC

Có, chúng tôi sử dụng Mô hình khôi phục hoàn toàn
goofyui

Chúng tôi có thể khôi phục dữ liệu bằng ApexQuery Trial Version. Phiên bản dùng thử chỉ cho phép xem dữ liệu. Chúng tôi không có ngân sách để mua Phiên bản đầy đủ và vì vậy chúng tôi cố gắng tự mình tìm ra nó để khôi phục dữ liệu từ tệp
.ldf

Câu trả lời:


11

Bạn sẽ cần Sao lưu toàn bộ trước đó và mọi bản sao lưu nhật ký được thực hiện kể từ lần sao lưu Toàn bộ cuối cùng

1) Đuôi một bản sao lưu nhật ký

BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE

2) Tìm giao dịch cho các bản ghi đã xóa (Hoạt động sẽ là LOP_DELETE_lawS cho DELETE và LOP_SET_BITS & LOP_MODIFY_law cho BẢNG TRUNCATE)

SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'

3) Khôi phục Sao lưu đầy đủ trước đó và đăng nhập các bản sao lưu cộng với đuôi vào cơ sở dữ liệu mới VỚI BÌNH THƯỜNG và STOPAT = 'Ngay trước khi bắt đầu giao dịch'

RESTORE DATABASE NewDB
FROM DISK='C:\Previous_Full_Backup_Of_OldDB.bak'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM',
MOVE 'OldDB' TO 'C:\DATABASES\NewDB.mdf',
MOVE 'OldDB_Log' TO 'C:\DATABASES\NewDB.ldf'

RESTORE LOG NewDB
FROM DISK='C:\Previous_TranLog_Backup_Of_OldDB.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

RESTORE LOG NewDB
FROM DISK='C:\OldDB_Tail.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

-- This recovers the restored database and allows access
RESTORE DATABASE NewDB WITH RECOVERY

Bài đăng trên blog này bao gồm chi tiết hơn về việc tìm thời gian để DỪNG bằng cách sử dụng fn_dblog. Bài đăng trên blog này có thể phục hồi dữ liệu trực tiếp từ nhật ký nhưng điều này có thể rất tốn thời gian so với thời điểm phục hồi.

Ngoài ra bài đăng trên blog này của Robert L Davis có một ví dụ về việc kết hợp STOP và STANDBY để cho phép bạn truy vấn trạng thái của cơ sở dữ liệu tại các thời điểm khác nhau.


Hồ sơ cắt ngắn thì sao? Tôi cho rằng một số trong số họ cũng bị cắt bớt .. !!
goofyui

1) Cách lấy .trn từ cơ sở dữ liệu cũ của tôi. Tôi đã nhận .ldf, .mdf !! Tôi không có tệp nhật ký giao dịch.
goofyui

Ý tưởng ở đây là khôi phục cơ sở dữ liệu đến điểm trước khi dữ liệu bị mất và sau đó bạn sẽ có thể tạo một bản sao của dữ liệu bị mất. Lệnh BACKUP LOG là thứ tạo ra tệp trn từ phần hoạt động của nhật ký giao dịch (
ldf

Tôi thấy khó hiểu hoàn toàn quan điểm của bạn. Bạn có thể vui lòng chia sẻ cú pháp để tiếp tục .. như giữ nó như OldDB khi xảy ra tai nạn và NewDB mà tệp nhật ký OldDB sẽ được khôi phục ..
goofyui

1
Tôi đã thêm một số chi tiết và liên kết đến các blog để tìm thời điểm khôi phục và một blog khác về việc sử dụng đầu ra của fn_dblog để tạo lại các hàng đã xóa.
MartinC
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.