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).
Saya melihat Anda telah mencoba berbagai metode termasuk bekerja dengan "ahli" pemulihan data untuk memperbaiki basis data yang rusak ini terutama dengan ukuran lebih dari 1 TB. Ini membuat prosesnya jauh lebih sulit dan berpacu dengan waktu. Sebagai seorang DBA yang berpengalaman, saya telah menemukan situasi yang serupa di mana sebagian besar waktu, ada cadangan yang baik untuk dipulihkan. Dalam kasus mewarisi cadangan buruk dan database korup, saya sangat bergantung pada alat pihak ketiga yang disebut alat Perbaikan Database Stellar Phoenix SQL . Alat ini terkenal untuk memperbaiki database yang korup (.mdf dan .ndf). Berikut adalah beberapa fungsi alat:
Melakukan Pemulihan catatan yang dihapus dari SQL Database
Menyimpan hasil Pemindaian Basis Data untuk Melakukan Pemulihan di Tahap Selanjutnya
Alat ini membutuhkan file .mdf dan .ndf agar offline sehingga berfungsi dengan baik bahwa Anda memiliki salinan basis data PROD yang rusak dan tidak harus menghentikan layanan SQL Server.
Bagian terbaiknya adalah versi percobaan memberi Anda fungsionalitas penuh alat kecuali bahwa database yang diperbaiki tidak dapat diekspor / disimpan. Anda masih dapat melihat semua objek basis data yang dipulihkan dan file log perbaikan yang luas yang memberikan perincian tentang berbagai tahapan proses perbaikan.
Jangan ragu untuk mengunduh dan melihat apakah itu membantu. Unduh disini
Saya juga menulis blog tentang cara alat ini bekerja di situs ini: blog samosql
Terima kasih dan HTH menjadikan Anda PAHLAWAN hari ini!
PS. Ketika badai ini berakhir, ingatlah untuk memberi tahu manajemen bahwa perlu ada perombakan besar atas prosedur pencadangan mereka terutama untuk database seperti itu. Pengulangan skenario ini sama sekali tidak bisa diterima! :)
sumber