Kembalikan file mdf. Cara memperbaiki database MS SQL Server yang rusak

Terkadang Anda harus menghadapi situasi di mana buah dari kerja bertahun-tahun yang ada di database SQL berada dalam bahaya. Artikel ini adalah tentang bagaimana mencegah kehilangan data, dan jika itu terjadi, bagaimana memulihkan data dari apa yang tersisa dari database yang dulunya normal.

Jadi mari kita mulai. Situasinya adalah sebagai berikut: ada server yang menjalankan 1C+SQL di atasnya. Saat database SQL berjalan, daya terputus. Hasilnya menyedihkan: basis berada dalam status tersangka, dan ketika 1c mencoba menghubungkannya, kesalahan dihasilkan yang mengatakan bahwa tidak mungkin untuk terhubung karena tidak mungkin untuk terhubung dengannya. database ditandai tersangka untuk pemulihan. Mode ini pada dasarnya berarti bahwa MS Server SQL akan mencoba mengembalikan database dengan cara mereka sendiri. Saya tidak menyentuh apa pun dan meninggalkan semuanya untuk malam itu, dengan harapan pagi hari pangkalan akan dipulihkan, tetapi di pagi hari sama saja, dan, oleh karena itu, tidak ada cara untuk mendekati pangkalan. Ada backup menurut law of meanness, tapi umurnya tiga hari, ditambah banyak dokumen yang hanya disimpan di database, tapi menurut dokumen kertas tidak ada, mis. tidak ada cara untuk memulihkan dokumen secara manual. Setelah menghabiskan banyak kekuatan dan saraf (yang, seperti yang Anda ketahui, tidak pulih :)), saya sampai pada urutan tindakan berikut yang diperlukan untuk memulihkan pangkalan.

1) Prinsip dasar pada awalnya adalah jangan merugikan. Kami menekan server SQL dan menyalin file *.mdf dan *.ldf dari dasar ke samping.
2) Pada prinsipnya, status tersangka terjadi karena jalur ke file dengan basis telah berubah (misalnya, ditambahkan cakram baru dalam sistem, yang kemudian dihapus, folder dengan database diganti namanya, dll.). Kemudian, tentu saja, jalurnya dipulihkan, tetapi basis datanya masih ditandai sebagai tersangka. Inilah yang kami lakukan:
3) Mulai SQL Server.
4) Kami mencoba menghubungkan database melalui Enterprise Manager:
Klik kanan untuk Database, di menu yang muncul, pilih Semua tugas->Lampirkan database, lalu di kotak dialog yang muncul, pilih file dengan database (*.mdf) dan atur parameter yang diperlukan.
5) atau melalui Query Analyzer dengan perintah seperti ini:
A. sp_attach_db @dbname = "DemoXMB",
B. @namaberkas1 = "E:\Data\DemoXMB_Data.MDF",
C. @ namafile2 = "E:\Data\DemoXMB_Log.LDF"
6) Jalur ke pangkalan, tentu saja, perlu diganti dengan jalur Anda sendiri. Jika pangkalan terhubung, maka, kita dapat mengatakan, kita turun dengan sedikit ketakutan, tetapi jika tidak, maka kita akan melanjutkan.
7) Jika file log tidak rusak (*.ldf), tetapi *.mdf rusak (misalnya, saat menghubungkan database, sql bersumpah pada kesalahan dalam file mdf), dan mode pencadangan disetel ke penuh, lalu kami memulihkan database tanpa memulihkan transaksi log, hampir 100% semua siksaan dapat berakhir di sana.
8) Sebaliknya, jika file ldf rusak, tetapi file *.mdf tetap ada, saat menghubungkan, database bersumpah atas tidak adanya/kerusakan log transaksi. Dalam hal ini, Anda dapat menggunakan HP "sp_attach_single_file_db"

Misalnya:
gunakan tuan
EXEC sp_attach_single_file_db@dbname="DemoXMB",
@physname="c:\mssql7\data\DemoXMB_Dat.mdf"

Saat menjalankan perintah ini, file DemoXMB_Log.ldf akan dibuat di direktori yang sama dengan basis, dengan ukuran 1MB dan ekstensi otomatis.
Jika ada file *.MDF dan *.LDF, atau data disimpan di lebih dari satu file fisik (jumlah total file fisik yang dilampirkan tidak boleh lebih dari 16), maka HP "sp_attach_db" harus digunakan

Misalnya:
gunakan tuan
EXEC sp_attach_db@dbname="DemoXMB",
@namaberkas1 = "c:\mssql7\data\DemoXMB_Dat.mdf",
@ namafile1 = "c:\mssql7\data\DemoXMB_Log.ldf"

Untuk menghubungkan lebih dari 16 file fisik ke database, gunakan perintah:
BUAT DATABASE UNTUK MELAMPIRKAN

Namun, jika tidak ada yang membantu, kedua file rusak dan database masih dalam status tersangka, maka Anda dapat mencoba mengatur ulang status database dengan urutan sebagai berikut: (sebelum menggunakan HP ini, Anda harus mengizinkan modifikasi tabel sistem secara langsung )
gunakan tuan
pergi
Kami mengizinkan modifikasi langsung dari tabel sistem:
sp_configure "izinkan pembaruan",1
pergi
mengkonfigurasi ulang dengan menimpa
pergi
Untuk mengatur ulang flag yang dicurigai, jalankan sp_resetstatus di DB master:
sp_resetstatus "DataBaseName"
pergi
Dan sekarang kami akan melarang modifikasi langsung dari tabel sistem:
sp_configure "izinkan pembaruan",0
pergi
mengkonfigurasi ulang dengan menimpa
pergi

Pada dasarnya, ketika saya mengikuti semua langkah ini, status tersangka disetel ulang, TAPI! ketika mencoba melakukan tindakan apa pun, SQL mulai bersumpah bahwa database masih dalam status tersangka. Dan kemudian saya melakukan ini:

Jalankan skrip dari QA:
gunakan tuan
pergi
sp_configure "izinkan pembaruan", 1
mengkonfigurasi ulang dengan menimpa
pergi

Di sana kami melakukan:
perbarui sysdatabases atur status= 32768 di mana nama = " "

Mulai ulang SQL Server. Pada prinsipnya, pangkalan harus terlihat (dalam mode darurat).

Dari QA kami mengeksekusi:
MENGGUNAKAN" "
PERGI
sp_dopsi" ", "pengguna_tunggal", "benar"
pergi
DBCC CHECKDB(" ", REPAIR_ALLOW_DATA_LOSS)
pergi

Jika semuanya baik-baik saja, maka:
sp_dopsi" ", "pengguna_tunggal", "salah"
pergi
gunakan tuan
pergi
sp_configure "izinkan pembaruan", 0
pergi

Setelah itu, dimungkinkan untuk melihat tabel database dari SQL, tetapi tidak mungkin untuk bekerja dengannya. Sekarang Anda perlu menggunakan Layanan Transformasi Data untuk mengekspor data ke database baru. Setelah itu, kami melakukan pemulihan / pengujian database menggunakan 1C. Perhatian! Banyak yang tidak memperhatikan poin yang sangat penting ini. Akibatnya, pada satu titik Anda mungkin menemukan bahwa database dipulihkan, secara halus, tidak sepenuhnya benar. Itu. dalam dokumen, alih-alih nomenklatur, akan ada sesuatu seperti 10122 /<Объект не найден>, ini masalah yang muncul bagi saya, bisa ada banyak pilihan. Oleh karena itu, lebih baik membuang waktu, tetapi periksa database menggunakan 1C.

Jika tidak ada yang membantu sama sekali, dan data gairah perlu dipulihkan, masih ada utilitas pihak ketiga disebut MSSQLRecovery . Utilitasnya berbayar, tetapi dimungkinkan untuk menggunakan versi demo, yang dapat diunduh di sini: http://www.officerecovery.com/mssql/download_demo.htm . Program ini sangat sederhana, dan pemulihan basis data dilakukan dalam tiga langkah: 1) pilih file dengan basis data; 2) pilih jalur tempat menyimpan; 3) Tekan tombol pemulihan; Kami tunggu. Program mem-parsing database SQL sepotong demi sepotong dan memasukkannya ke dalam direktori terpisah. Di sana dia juga menambahkan file .bat untuk memulihkan database dari "potongan" yang diterima. Saya tidak pernah menggunakannya, karena. berhasil memulihkan database dengan langkah sebelumnya.

Tetapi! Jeda harus dibuat di sini. Artikel tersebut tidak akan lengkap jika saya tidak menjelaskan metode untuk mencegah masalah tersebut. Jadi, cara termudah dan paling dapat diandalkan: pengarsipan, pengarsipan, dan pengarsipan lagi. Di Enterprise Manager, buka menu Tools->Wizards->Management->Backup Wizard dan konfigurasikan semua parameter yang diperlukan. Akibatnya, saya punya reset penuh Basis data SQL ke disk terjadi pada malam hari dan kemudian setiap 15 menit cadangan dari perubahan yang dilakukan pada basis data. Pada prinsipnya, jika saya memiliki cadangan seperti itu, saya akan memutar kembali dalam beberapa menit dan terus minum Coca-Cola :).

Jika Anda memiliki pertanyaan / komentar tambahan, tulis di sini:

Kembalikan MDF

Jika basis Data Microsoft SQL Server tidak dapat dioperasikan dan di SQL Management Studio database berstatus "suspend" (ditandai dengan warna abu-abu), maka integritas data di dalamnya dilanggar secara serius. Bagaimana cara memulihkan database yang rusak dari keadaan ditangguhkan? Bagaimana memulihkan informasi yang disimpan dalam file database .mdf?

Deskripsi langkah demi langkah untuk memperbaiki file .mdf yang rusak:

  • Lepaskan (lepaskan) database dari MS SQL Server di SQL Management Studio
  • Buat database kosong baru untuk impor selanjutnya dari data yang dipulihkan ke dalamnya.
  • Berlari Kotak Alat Perbaikan SQL Server dan pilih file .mdf, dinonaktifkan berdasarkan halaman pertama program

Ikuti semua langkah di dalam program dan:

  • atau simpan data sebagai skrip sql. Setelah menyimpan data sebagai skrip sql pada disk, Anda perlu menjalankan file .bat dengan parameter yang tepat untuk mengimpor data ke database baru
  • atau ekspor data langsung ke database baru.
Kotak Alat Perbaikan SQL Server tidak program gratis membuka Kode sumber. Pengguna dapat mencoba program ini sebelum membeli menggunakan versi demo. Program ini tidak dilisensikan di bawah GNU General Public License (GPL) atau GNU Lesser General Public License (LGPL).

Persyaratan sistem: Windows 98 atau lebih tinggi

Suatu hal yang mengerikan terjadi (sekrup lepas, ada lonjakan listrik, dll.) - pangkalan berada dalam status tersangka dan tidak ingin meninggalkannya, apa pun yang kita lakukan ...

Cadangan Tentu saja, kami tidak membuat pangkalan - mungkin akan meledak. Ternyata tidak.

Jadi, untuk memulihkan data, kita perlu:

1. Server MSSQL, MS SQL Enterprise Manager (EM), MS SQL Query Analyzer (QA) dari Microsoft (disertakan dengan MS SQL).

2. 1C: Perusahaan 7.7 versi SQL.

3. Pemulihan MSSQL dari http://www.officerecovery.com

4. Salinan file 1cv7.md dari database 1C yang dihancurkan, salinan file mdf yang dihancurkan, kurang lebih sama ruang bebas pada disk, yang ditempati file tersebut.

5. Waktu luang berdasarkan perhitungan 3 jam per 1 GB berat file mdf.

6. Keyboard, mouse, monitor.

Saya akan menjelaskan secara singkat apa yang dilakukan MSSQLRecovery:

1. Mem-parsing file mdf pada level struktur (MFT), membentuk skrip sql teks yang berisi skema database dan data itu sendiri dari database kami yang dihancurkan.

2. Menciptakan berkas kumpulan commit.bat, yang meluncurkan versi konsol dari MS Query Analyzer, yang mengeksekusi file sql secara berurutan dan benar-benar mengisi database SQL kami yang baru dibuat.

Komentar pada MSSQLRecovery.

Program ini bagus untuk semua orang, dapat membantu dalam situasi tanpa harapan. Namun ada dua momen menjengkelkan yang mengganggu pemulihan database 1C.

Pertama, program membuat skrip schema.sql yang berisi deskripsi struktur tabel, prosedur, fungsi, indeks, dll. Skrip ini dijalankan terlebih dahulu, ia membuat tabel, prosedur, fungsi, indeks, dll. di database kosong kami sehingga jauh. Itu melakukannya dengan sangat baik. Untuk satu "tetapi" - urutan bidang dalam file bingung saat membuat struktur tabel. Mungkin untuk program lain, "campur aduk" seperti itu tidak menakutkan, tetapi 1C tidak mencernanya.

Kedua, file batch yang dibuat commit.bat menggunakan versi konsol dari Query Analyzer (isql.exe), tetapi untuk beberapa alasan tidak ingin bekerja dengan benar dengan halaman kode cp1251 - ini mengubah karakter Rusia menjadi pengkodean OEM. Itu tidak bekerja untuk kita juga.

Sebenarnya tata cara yang harus dilakukan agar bahagia :

1. Setel MSSQLRecovery pada file mdf yang dihancurkan sebagian, berikan waktu untuk memproses, lalu tentukan di mana kita ingin menyimpan skrip yang dihasilkan dengan struktur database dan data yang dipulihkan.

2. Buat database kosong baru di server SQL.

3. Buat struktur basis kita menggunakan salinan 1cv7.md dari basis yang diciutkan menggunakan 1C: Configurator.

4. Edit berkas komit.bat, menghapus baris dengan panggilan untuk mengeksekusi skrip skema.sql- kami telah membuat struktur database menggunakan 1C.

5. Perubahan yang sama komit.bat panggilan isql dalam panggilan isqlw– Versi GUI dari Query Analyzer. Ini diperlukan untuk persepsi yang benar tentang pengkodean Rusia. Itu. garis:
isql -S %1 -d %2 -U %3 -P %4 -E -I data0001.sql
akan terlihat seperti:
isqlw -S %1 -d %2 -U %3 -P %4 -E -i data0001.sql -o keluar.txt
Parameter "-o" dan file "out.txt" diperlukan untuk peluncuran QA versi GUI yang benar, log transaksi yang dilakukan akan ditulis ke file "out.txt". Anda perlu mengganti seluruh file commit.bat, misalnya di manajer file manajer jauh.

6. Jalankan berkas komit.bat untuk eksekusi dengan empat parameter: - Nama server SQL - Nama basis baru SQL yang kita buat sebelumnya - Nama pengguna yang memiliki peran dbowner untuk database ini (biasanya sa) - Kata sandi untuk pengguna ini Akan terlihat seperti ini: commit.bat my_sql_server recovery_1c_db sa gfhjkm

Sebenarnya semuanya. Alih-alih berkas kumpulan Anda dapat menulis pemrosesan sederhana dalam 1C, yang menurut daftar direktori, akan mengeksekusi skrip secara berurutan.

Setelah berolahraga komit.bat Anda dapat menjalankan 1C dan melihat seberapa besar kerugiannya. Biasanya, data yang hilang adalah yang paling sering diakses atau digunakan pada saat terjadi kegagalan.

Dan agar tidak ada kerugian - buat cadangan. Dan lebih sering.

Database adalah tulang punggung banyak perusahaan sistem Informasi. Mereka dapat menyimpan hampir semua informasi, mulai dari operasional hingga dokumentasi akuntansi. Bahkan ketidaktersediaan sementara informasi ini dapat menyebabkan kerugian yang signifikan. Apa yang bisa kami katakan tentang kehilangan total mereka! Sementara itu, situasi ini cukup nyata. Secara fisik, database adalah file paling biasa yang mudah rusak akibat serangan virus, crash perangkat lunak atau berkas sistem, kegagalan perangkat keras, tindakan pengguna yang ceroboh, dll. Dalam salah satu kasus ini, database berhenti membuka dan, karenanya, semua informasi yang ditempatkan di dalamnya menjadi tidak dapat diakses.

Program ini dapat membantu mengatasi masalah ini dan mengembalikan data yang tampaknya benar-benar hilang. Kotak Alat Pemulihan Server SQL(). Ini dirancang untuk mengekstrak dan menyimpan informasi dari database MS SQL Server yang rusak (didukung file Microsoft SQL Server 7.0, 2000, 2005, 2005 64-bit, 2008 dan 2008 R2). Secara alami, Kotak Alat Pemulihan SQL Server tidak dapat menjamin pemulihan lengkap semua data. Harus dipahami bahwa dalam beberapa kasus, kerusakannya bisa begitu kuat sehingga tidak mungkin mengekstraksi beberapa informasi. Proses memulihkan dan menyimpan informasi dari database MS SQL Server yang rusak menggunakan program Kotak Alat Pemulihan Server SQL dilakukan dengan menggunakan panduan langkah demi langkah. Pada setiap tahap, pengguna hanya perlu melakukan satu tindakan, yang sangat nyaman dan praktis.

Langkah pertama adalah memilih database MS SQL Server yang rusak. Cara termudah untuk melakukannya adalah dengan penjelajah jendela, yang diluncurkan saat tombol diklik. Ekstensi *.mdf dan *.ndf (ekstensi standar database MS SQL Server) secara otomatis ditetapkan sebagai filter pilihan. Semua file yang pernah dianalisis dimasukkan ke dalam daftar khusus akses cepat. Di masa mendatang, untuk memilihnya, pengguna hanya perlu mengklik ikon, memindahkan kursor ke dokumen yang diinginkan di daftar yang terbuka, dan mengklik tombol kiri tikus.

Transisi ke tahap berikutnya dilakukan dengan menggunakan tombol Berikutnya. Dalam hal ini, program akan menampilkan kotak dialog yang menanyakan apakah akan menganalisis atau tidak sumber data. Jika jawabannya ya, itu mengekstrak data layanan dari database yang rusak dan menampilkan informasi yang dapat dipulihkannya. Untuk kenyamanan pengguna, jendela dibagi menjadi dua bagian. Yang kiri menampilkan semua kategori informasi yang mungkin: tabel pengguna dan sistem (Tabel Pengguna dan Tabel Sistem), tampilan (Tampilan), prosedur tersimpan (Prosedur Tersimpan), fungsi (Fungsi) dan ditetapkan pengguna jenis (Jenis Data yang Ditentukan Pengguna). Saat menempatkan kursor pada salah satunya, daftar objek yang tersedia dan kontennya akan ditampilkan di sisi kanan. Pengguna harus meninjaunya dengan hati-hati dan memastikan programnya Kotak Alat Pemulihan Server SQL akan mengatasi tugas tersebut dan benar-benar dapat memulihkan data yang hilang.

Langkah selanjutnya adalah memilih cara menyimpan informasi. Faktanya adalah bahwa dalam utilitas yang dimaksud, data yang diekstraksi dari file yang rusak dapat disimpan HDD sebagai sekumpulan skrip bahasa SQL atau diekspor langsung ke database MS SQL Server. Opsi pertama bagus karena memungkinkan Anda mentransfer informasi yang diekstraksi ke server mana pun. Untuk melakukan ini, cukup salin paket skrip yang diperoleh sebagai hasil kerja ke komputer yang diinginkan dan menjalankannya di sana. Dan opsi kedua lebih nyaman jika PC tempat pemulihan dilakukan memiliki koneksi ke database yang diinginkan. Dalam hal ini, informasi diekspor ke sana tanpa langkah tambahan apa pun.

Selanjutnya, pengguna perlu memilih informasi yang perlu dipulihkan dari file yang rusak dan disimpan. Untuk program ini Kotak Pemulihan SQL kembali menampilkan di layar apa yang dapat diekstraksi. Dan pengguna harus menandai data yang dia butuhkan dengan mencentang / menghapus centang pada kotak centang. Anda dapat memilih atau membatalkan pilihan sekaligus dari seluruh database, seluruh kategori informasi atau objek individu(tabel, tampilan, prosedur tersimpan, dll.).

Setelah menyelesaikan pemilihan, Anda dapat memulai proses pemindaian file sumber dan menyimpan informasi yang diambil darinya. Untuk melakukan ini, klik tombol Mulai Pemulihan. Durasi pekerjaan ini tergantung pada dua faktor. Pertama, dari file sumber, struktur dan ukurannya. Dan kedua, pada kinerja komputer yang menjalankannya. Perlu dicatat bahwa dalam beberapa kasus database sangat besar, dan oleh karena itu pemulihan informasi darinya dapat memakan waktu beberapa hari. Segera setelah akhir proses program SQL Kotak Alat Pemulihan Server akan menampilkan log. Ini menyediakan data tentang semua proses pemulihan informasi yang diterapkan selama sesi kerja saat ini.

Dengan demikian, Kotak Alat Pemulihan SQL Server adalah alat yang berhasil untuk memulihkan data dari database MS SQL Server yang rusak. Itu dibedakan oleh dua fitur. Yang pertama adalah efisiensi. Utilitas yang dimaksud mampu memulihkan informasi sebanyak mungkin dari file yang rusak. Fitur kedua dari SQL Server Recovery Toolbox adalah kemudahan penggunaannya yang ekstrem. Dengan bantuan program ini, setiap pengguna dapat mengekstraksi informasi dari database yang rusak dan menyimpannya tanpa pelatihan sebelumnya, bahkan baru mulai belajar tentang komputer.



Memuat...
Atas