it-swarm.asia

Membangun kembali log transaksi

Kami memiliki database yang sangat besar (~ 6TB), yang file log transaksinya dihapus (sementara SQL Server dimatikan. Kami telah mencoba:

  1. Melepaskan dan memasang kembali basis data; dan
  2. Membatalkan penghapusan file log transaksi

... tapi tidak ada yang berhasil sejauh ini.

Kami sedang menjalankan:

ALTER DATABASE <dbname> REBUILD 
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

... tetapi mengingat ukuran database, ini mungkin akan memakan waktu beberapa hari untuk selesai.

Pertanyaan

  • Apakah ada perbedaan antara perintah di atas dan yang berikut?

    DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
    
  • Haruskah kita mengeksekusi REPAIR_ALLOW_DATA_LOSS sebagai gantinya?

Perlu dicatat bahwa data tersebut berasal dari sumber lain sehingga database dapat dibangun kembali, namun kami menduga akan jauh lebih cepat untuk memperbaiki database daripada memasukkan kembali semua data lagi.


Perbarui

Bagi mereka yang menyimpan skor: the ALTER DATABASE/REBUILD LOG perintah selesai setelah sekitar 36 jam dan dilaporkan:

Peringatan: Log untuk database 'dbname' telah dibangun kembali. Konsistensi transaksional telah hilang. Rantai RESTORE terputus, dan server tidak lagi memiliki konteks pada file log sebelumnya, jadi Anda perlu tahu apa itu.
Anda harus menjalankan DBCC CHECKDB untuk memvalidasi konsistensi fisik. Basis data telah dimasukkan ke mode dbo-only. Saat Anda siap untuk membuat database tersedia untuk digunakan, Anda perlu mengatur ulang opsi database dan menghapus file log tambahan.

Kami kemudian menjalankan DBCC CHECKDB (butuh sekitar 13 jam) yang berhasil. Anggap saja kita semua telah belajar pentingnya cadangan basis data (dan memberikan manajer proyek akses ke server ...).

20

Jangan pernah melepaskan basis data Suspect. Bagaimanapun, bagaimana Anda melampirkan database setelah melepaskannya? Anda menggunakan CREATE DATABASE Dengan opsi FOR ATTACH_REBUILD_LOG?

Perintah-perintah ini seharusnya melakukan trik:

ALTER DATABASE recovery_test_2 SET EMERGENCY;   
ALTER DATABASE recovery_test_2 SET SINGLE_USER;  

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) 
WITH NO_INFOMSGS, ALL_ERRORMSGS;

Saya menulis posting untuk situasi ini:

SQL 2005/2008 Prosedur Pemulihan Basis Data - File Log Dihapus (Bagian 3)

Anda bertanya tentang perbedaan antara:

  • DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS) dan
  • ALTER DATABASE <dbname> REBUILD LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')

Masalahnya adalah Anda dapat menjalankan keduanya untuk membangun kembali file log, tetapi dengan CHECKDB Anda membangun kembali log dan memeriksa database untuk kesalahan integritas juga.

Juga yang kedua (ubah database) tidak akan berfungsi jika ada transaksi aktif (tidak ditulis ke disk) ketika file log hilang. Saat start-up atau melampirkan, SQL Server akan ingin melakukan pemulihan (rollback dan rollforward) dari file log yang tidak ada. Itu terjadi ketika disk crash atau shutdown server yang tidak terduga terjadi dan database tidak shutdown bersih. Saya kira itu bukan kasus Anda dan semua beres untuk Anda.

  1. DBCC CHECKDB (DBNAME, REPAIR_ALLOW_DATA_LOSS) berjalan pada database dalam status darurat memeriksa database untuk kesalahan inkonsistensi, coba dulu untuk menggunakan file log untuk memulihkan dari setiap inkonsistensi. Jika ini tidak ada, log transaksi dibangun kembali.

  2. ALTER DATABASE REBUILD LOG ON... Adalah prosedur tidak berdokumen dan membutuhkan DBCC CHECKDB Selanjutnya untuk memperbaiki kesalahan.

20
yrushka

Ya, itu adalah dua pernyataan yang berbeda, masing-masing melakukan hal yang sangat berbeda.

Bergantung pada keadaan basis data saat file dihapus, Anda dapat dapat bangkit dan berjalan dengan melampirkan database dan membangun kembali log dengan menggunakan :

EXEC sp_attach_single_file_db 'dbname here', 'file path and name here'

Lihat sp_attach_single_file_db (Transact-SQL) dalam dokumentasi produk.

Lihat juga posting blog ini dengan Paul S. Randal :

Perbaikan mode DARURAT: pilihan terakhir, yang terakhir

12
SQLRockstar