Tidak dapat mengembalikan SQL Server db dari cadangan penuh, pemrosesan log gagal, basis data dalam keadaan 'memulihkan'

14

Saya mencoba menyiapkan database untuk keperluan pengembangan di SQL Server Developer Edition 12.0.2000.8 lokal saya. Saya memiliki cadangan basis data lengkap dan file cadangan hanya log transaksi terpisah yang dikirim kepada saya melalui jaringan.

Ketika mencoba memulihkan dari cadangan penuh, setelah beberapa waktu (~ 1 jam mungkin, database berukuran ~ 270 GB), saya mendapatkan kesalahan:

System.Data.SqlClient.SqlError: Terjadi kesalahan saat memproses log untuk database 'nama database'. Jika memungkinkan, pulihkan dari cadangan. Jika cadangan tidak tersedia, mungkin perlu untuk membangun kembali log. (Microsoft.SqlServer.SmoExtended)

Setelah ini, db dalam status 'Memulihkan ..'.

Saya ingin menjalankan sesuatu seperti (mendapatkannya dari pertanyaan ini )

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;

menentangnya, tapi tentu saja saya tidak bisa karena database dalam keadaan 'Memulihkan .. ". Restart proses pemulihan mengarah ke pesan kesalahan yang sama, menjatuhkan dan mengembalikan lagi tidak membantu juga.

Bagaimana cara mendapatkan db dan bekerja? Konsistensi transaksional tidak masalah bagi saya.

Skrip pemulihan SSMS yang dihasilkan secara otomatis:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

Hasil kueri yang disarankan oleh @Craig Efrein

Log tidak dapat dibangun kembali karena ada transaksi terbuka / pengguna ketika database dimatikan, tidak ada pos pemeriksaan terjadi ke database, atau database hanya baca. Kesalahan ini dapat terjadi jika file log transaksi secara manual dihapus atau hilang karena kegagalan perangkat keras atau lingkungan.

diusir
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
Paul White 9

Jawaban:

2

Dari komentar yang dipindahkan ke obrolan, catatan dari OP ini:

Saya baru saja mencoba melampirkannya melalui GUI. Ketika saya memilih file .mdf, SSMS mengidentifikasi database yang terdiri dari 3 file (data, indeks, log), tetapi entah bagaimana meskipun saya memulihkan DENGAN MOVE, rincian database tentang jalur file mengatakan itu salah! Jadi saya hanya mengarahkan mereka ke file log / data / indeks yang lama dan ... Basis datanya online.

RDFozz
sumber
-3

Ubah ke mode pengguna tunggal dan pulihkan.

contoh:
Pemulihan pertama menggunakan opsi NORECOVERY sehingga pemulihan tambahan dapat dilakukan. Perintah kedua mengembalikan log transaksi dan kemudian membawa database online untuk penggunaan pengguna akhir.

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO
Maddy
sumber
1
Pertanyaan tersebut merujuk pada pernyataan RESTORE DATABASE tunggal, tidak ada pengembalian log transaksi terpisah yang dilakukan. Kemungkinan basis data sumber dan / atau file cadangan rusak.
Bryan