Saya telah ditugaskan untuk mencoba memulihkan database yang menderita korupsi (karena kegagalan I / O, yang telah diperbaiki sejak itu). Saya tidak terbiasa dengan database atau apa yang ada di dalamnya.
Saya telah diberi cadangan penuh lama (~ 3 minggu) dan serangkaian log transaksi ... namun ada log transaksi yang hilang, jadi saya hanya dapat memulihkan hingga tanggal tertentu. Ada sekitar 2,5 minggu data hilang (dan ada banyak data yang ditambahkan ke database ini secara konstan).
Saya juga telah diberikan salinan dari database korup (yang dapat diakses, tetapi dengan banyak halaman rusak / hilang).
Saya sudah mencoba DBCC CHECKDB
perintah khas (masih belum repair_allow_data_loss
, itu akan menjadi pilihan terakhir saya jika tidak ada yang berfungsi).
Setelah banyak yang datang dan pergi ke database (db adalah monster kecil 1,5 terabyte dan semua yang saya lakukan lambat dan memakan waktu cukup lama), saya sudah mencoba untuk melakukan pemulihan halaman online dari cadangan baik yang terakhir diketahui untuk halaman yang korup.
Untuk melakukan itu, saya telah melakukan skrip yang menciptakan banyak RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'
perintah dari DBCC CHECKDB
output (pada dasarnya sebuah regex dan berbeda) ... sejauh ini bagus, ini bekerja sampai pada titik di mana dikatakan saya telah mencapai batas 1000 halaman per file (ada 8 file pada db ini) per perintah restore.
Jadi ia meminta saya untuk "menyelesaikan pengembalian online", tetapi saya bingung bagaimana melakukan itu ... Saya tidak memiliki log ekor atau apa pun yang lebih lengkap daripada cadangan lengkap yang saya mulai, jadi Saya pada dasarnya tidak tahu bagaimana menyelesaikan pemulihan untuk terus mencoba dengan halaman lainnya.
Saya sudah mencoba RESTORE DATABASE <foo> WITH RECOVERY
tetapi itu tidak berhasil, ia meminta saya untuk log yang tidak saya miliki.
Adakah yang punya tips bagaimana saya bisa memulihkan apa saja dari sini? Atau cara "menyelesaikan" pengembalian online agar saya dapat terus mencoba memulihkan lebih banyak halaman? Apakah saya akan memiliki masalah yang sama jika saya mencoba pemulihan offline (pada dasarnya menambahkan WITH NORECOVERY
semuanya dan kemudian mencoba mengembalikannya di akhir?)
Mengerjakan basis data dengan tangan pada dasarnya tidak dapat diurungkan ... ada ratusan tabel dengan jutaan baris dan tidak ada arti yang jelas dari semua itu. DB korup akan gagal pada SELECT
kueri setelah beberapa juta baris, tetapi saya tidak yakin saya bisa mencari tahu di mana. Saya telah mencoba membangun kembali semua indeks yang tidak berkerumun, tetapi ada halaman yang rusak dengan data baris, sehingga tidak berfungsi juga.
Beberapa kehilangan data dapat diterima, tetapi konsistensi pada DB setidaknya harus berusaha untuk dicapai.
Basis data yang rusak adalah -still- online dan klien sedang mengusahakannya (sehingga terus mendapatkan data baru), jadi setiap proses yang saya lakukan di bangku laboratorium harus dapat direproduksi pada basis data produksi sesudahnya (downtime akan sulit untuk itu).
Ini adalah SQL Server 2014 Enterprise
PS: Saya bukan DBA ... Saya seorang programmer, tetapi klien telah mencoba beberapa layanan pemulihan bencana "ahli" sql dan mereka telah menyerah, jadi saya diminta untuk melihatnya dan melihat apakah saya bisa lakukan apapun.
Pembaruan : setelah banyak tes, pengembalian halaman demi halaman tidak dapat dilakukan, jadi kami membuang idenya. Kami akan melakukan pemulihan manual (secara manual memilih catatan yang hilang dari tabel korup dan memasukkannya ke dalam cadangan baik yang terakhir diketahui), melakukan beberapa alat otomatis untuk itu (sekali lagi, ada ratusan dan ratusan tabel).