Bagaimana saya bisa memulihkan data dari file LDF?

9

Kami menggunakan SQL 2005 Express Edition. Kami ingin membaca data dari file LDF untuk mengembalikan beberapa catatan yang dihapus.

Kami mencoba menggunakan versi percobaan dari ApexSQL yang banyak membantu kami. Alih-alih menggunakan perangkat lunak pihak ketiga, kami mencoba mencari tahu cara membaca file log sendiri.

Bagaimana kita bisa membaca dan memulihkan data dari file LDF?

goofyui
sumber
Apakah database menggunakan model pemulihan penuh atau hanya sederhana?
MartinC
Ya, kami menggunakan Model Pemulihan Penuh
goofyui
Kami dapat memulihkan data menggunakan Versi Percobaan ApexSQL. Versi percobaan hanya memungkinkan untuk melihat data. Kami tidak punya anggaran untuk membeli Edisi Lengkap dan jadi berusaha mencari tahu sendiri untuk memulihkan data dari file
.ldf

Jawaban:

11

Anda akan memerlukan Full Backup sebelumnya dan semua backup log diambil sejak Full backup terakhir

1) Ambil ekor cadangan log

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

2) Temukan Transaksi untuk Catatan yang Dihapus (Pengoperasian akan menjadi LOP_DELETE_ROWS untuk DELETEs dan LOP_SET_BITS & LOP_MODIFY_ROW untuk Tabel TRUNCATE)

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

3) Kembalikan Kembali Penuh Sebelumnya dan log cadangan ditambah ekor ke database baru DENGAN NORECOVERY dan STOPAT = 'Sebelum Memulai Waktu untuk Transaksi'

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

Posting blog ini mencakup lebih detail menemukan waktu untuk STOPAT menggunakan fn_dblog. Posting blog ini bertujuan memulihkan data langsung dari log tetapi ini mungkin sangat memakan waktu dibandingkan dengan titik pemulihan waktu.

Juga posting blog ini oleh Robert L Davis memiliki contoh tentang menggabungkan STOP dan STANDBY untuk memungkinkan Anda untuk menanyakan keadaan basis data pada berbagai titik waktu.

MartinC
sumber
Bagaimana dengan Truncate Records? Saya berasumsi beberapa dari mereka terpotong juga .. !!
goofyui
1) Cara mengambil .trn dari basis data lama saya. Saya mendapat .ldf, .mdf !! Saya tidak punya file log transaksi.
goofyui
Idenya di sini adalah untuk memulihkan basis data ke titik sebelum data hilang dan kemudian Anda akan dapat membuat salinan dari data yang hilang. Perintah BACKUP LOG adalah apa yang membuat file trn dari bagian aktif dari log transaksi (
ldf
Saya merasa sulit untuk memahami maksud Anda sepenuhnya. Bisakah Anda berbagi sintaks untuk melanjutkan .. seperti menjaganya sebagai OldDB di mana kecelakaan terjadi dan NewDB tempat file log OldDB akan dipulihkan ..
goofyui
1
Saya telah menambahkan beberapa detail dan tautan ke blog untuk menemukan titik waktu pemulihan dan blog lain tentang penggunaan output fn_dblog untuk membuat ulang baris yang dihapus.
MartinC