Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memperbaiki SQL Server Mendeteksi Kesalahan I/O Berbasis Konsistensi Logis

Ringkasan: Masalah tidak dapat diaksesnya Database SQL adalah masalah umum yang dihadapi oleh pengguna database. Jadi blog yang menangani masalah ini akan membahas SQL Server Detected A Logical Consistency-Based I/O Error. Kami akan membahas alasan di balik kesalahan ini dan cara terbaik untuk mengetahui cara mengatasi masalah ini. Untuk mengakses dan memulihkan database SQL yang tidak dapat diakses maka pengguna dapat mengambil bantuan Recover SQL Server Database Tool.

Alasan Dibalik Kesalahan I/O berbasis Konsistensi Logis Basis Data:

  • Shutdown/crash sistem mendadak atau shutdown terbatas
  • Administrator SQL mencoba membuat kueri atau mengubah data SQL

Saat database SQL Server menemukan kesalahan berbasis konsistensi logis, langkah awal adalah mendeteksi kesalahan.

Strategi yang menyertainya dapat membantu dalam mendeteksi kesalahan:

  • Gunakan alat Penganalisis Praktik Terbaik (BPA) – Alat BPA membantu dalam mengidentifikasi kesalahan konsistensi dasar. Alat ini eksplisit untuk varian SQL, yang berarti BPA 2008 dapat diakses dengan SQL 2008, dll.
  • Periksa Sistem Windows pada tingkat kerangka kerja Log Peristiwa, driver, atau kesalahan terkait disk
  • Periksa kelayakan kerangka file dengan menjalankan perintah chkdsk
  • Jalankan diagnostik yang disarankan oleh produsen perangkat keras untuk kerangka kerja atau disk
  • Untuk SQL Server 2008, jalankan utilitas SQLIOSim pada drive database yang telah mengumumkan kesalahan I/O.
  • Hubungi penjual perangkat keras atau produsen perangkat untuk memeriksa bahwa prasyarat perangkat keras sesuai dengan kebutuhan I/O dari server SQL.

Cara Manual untuk Mengatasi SQL Server Mendeteksi Kesalahan I/O Berbasis Konsistensi Logis

Teknik 1 – Periksa perangkat keras dan jaringan aplikasi

Kesalahan ketidakteraturan basis data dapat diperbaiki dengan membangun jaringan yang sesuai antara basis data dan aplikasi SQL.

Teknik 2 – Pulihkan dari cadangan SQL

Solusi yang paling dapat dicapai adalah dengan memanfaatkan cadangan untuk reklamasi database SQL. Sebelum memulihkan dari cadangan, pastikan bahwa:

  • Anda memiliki cadangan lengkap yang sedang berlangsung
  • Cadangan diperbarui, hanya sebelum kerusakan, dan tidak terlalu lama untuk menjaga jarak strategis dari kehilangan data dasar.
  • Korupsi ada di tingkat halaman, karena masalah korupsi tingkat halaman dapat diselesaikan dengan bantuan pemulihan tingkat halaman.

Langkah 1: Gunakan urutan terlampir untuk memulihkan database SQL dari cadangan penuh

Cadangkan log transaksi

Laman LOG Cadangan Dipulihkan KE

Plate =‘g:PageLevelRestores_LOG1.bak’

DENGAN INI

PERGI

Langkah 2: Lakukan perubahan pemulihan untuk mencerminkan kemajuan secara online.

Cadangkan ekor log…

Laman LOG Cadangan Dipulihkan KE

Lingkaran =‘g:PageLevelRestores_LOG_TAIL.bak’

DENGAN INI

PERGI

Catatan:Tidak ada alasan kuat untuk memulihkan database server SQL lengkap jika kerusakan terikat pada satu halaman. Anda dapat memulihkan database dari cadangan yang dapat diakses untuk halaman yang rusak. Melakukan perintah yang menyertainya akan membantu memulihkan cadangan untuk satu halaman:

Pulihkan semua cadangan log yang dapat diakses dalam permintaan yang tepat

Pulihkan LOG PageLevelRestores DARI

Lingkaran =‘g:PageLevelRestores_LOG1.bak’

DENGAN NORECOVERY

PERGI

Terakhir, Pulihkan cadangan log ekor

Pulihkan LOG PageLevelRestores DARI

Lingkaran =‘g:PageLevelRestores_LOG_TAIL.bak’

DENGAN NORECOVERY

PERGI

Terakhir, selesaikan urutan Restore

Pulihkan DATABASE PageLevelRestores WITH RECOVERY

PERGI

Ketika cadangan database telah memulihkan database SQL, jalankan kueri DBCC CHECKDB lagi untuk melihat bahwa proklamasi pilih berlaku tanpa kesalahan I/O berbasis konsistensi logis Database SQL. Perintah ini juga memperhatikan bahwa tidak ada kehilangan data dalam tabel ini.

Batasan backup database SQL:

  1. Tidak masuk akal untuk mengharapkan Memulihkan dari cadangan database SQL ketika cadangan yang dapat diakses sudah kedaluwarsa.
  2. Jika kesalahan I/O berbasis konsistensi logis tersebar di database server SQL, maka strategi ini tidak sah.
  3. Untuk situasi di mana halaman yang rusak ada dalam indeks non-cluster, database SQL dapat diperbaiki dengan menghapus dan membuat ulang indeks database SQL.

Teknik 3:Perbaiki database SQL yang rusak dengan REPAIR_ALLOW_DATA_LOSS

REPAIR_ALLOW_DATA_LOSS adalah tingkat tetap dasar untuk kesalahan yang dianalisis.

Catatan:Sebelum menggunakan REPAIR_ALLOW_DATA_LOSS, lakukan hal berikut:

Ambil cadangan database server SQL dan simpan dengan nama lain

Setel database SQL dalam mode pengguna tunggal

Dapatkan semua jumlah catatan Tabel dengan menggunakan perintah yang menyertainya

Umumkan @COUNT INT

Proklamasikan @SQL VARCHAR(2000)

Buat TABEL #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)

Umumkan KURSOR TINFO_CUR UNTUK

PILIH TABLE_NAME DARI INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE='BASE TABLE'

BUKA TINFO_CUR

Dapatkan BERIKUTNYA DARI TINFO_CUR KE @T_Name

SELAMA @@FETCH_STATUS =0

Mulai

SET @SQL='INSERT INTO #T_Info(T_Name,D_Count) SELECT ”'[email protected]_Name+”’,COUNT(*) FROM ‘[email protected]_Name+”

EKSEKUSI (@SQL)

Dapatkan BERIKUTNYA DARI TINFO_CUR KE @T_Name

AKHIR

TUTUP TINFO_CUR

DEALLOCATE TINFO_CUR

PILIH * DARI #T_Info PESAN OLEH T_NAME

Kemajuan yang menyertainya membantu memperbaiki database SQL dan menyelesaikan kesalahan I/O berbasis konsistensi yang koheren:

Jalankan perintah:

DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)

Setelah database SQL diperbaiki, ulangi prosedur 'Table Record Count' dan kontras dengan jumlah record lama.

Tidak boleh ada perbedaan antara jumlah catatan Tabel awal dan terakhir.

Batasan :

REPAIR_ALLOW_DATA_LOSS dapat memperbaiki kesalahan IO berbasis konsistensi logis basis data namun ada masalah kehilangan data yang signifikan, di mana koneksi mungkin mengalami kehilangan data dasar.

Solusi Pilihan

Jika teknik di atas tidak berhasil, pada saat itu, periksa alat Perbaikan File SQL SysTools . Alat ini memperbaiki file MDF dan NDF yang rusak dan Pulihkan semua objek database. Selain itu, alat ini membantu memulihkan semua objek database seperti Tabel, Pemicu, Indeks, Kunci, Aturan, file yang dihapus, dan Prosedur Tersimpan. Ini adalah bantuan yang luar biasa di tengah keadaan darurat, karena produk memberikan solusi perbaikan yang pasti dan mendukung semua versi database SQL.

Kesimpulan

Baca Juga: Cara memeriksa apakah Database SQL Rusak 

Dalam posting ini, kami telah menampilkan alasan SQL Server Detected A Logical Consistency-Based I/O Error dan teknik untuk mengatasi masalah ini.

Mengingat kesalahan, kami telah berusaha untuk menemukan teknik yang tepat. Jika perangkat keras atau kerangka kerja bertanggung jawab atas kesalahan, itu ditentukan untuk menentukan masalah terkait perangkat keras, dan jika DBCC CHECKDB melaporkan kesalahan konsistensi, maka cobalah untuk memulihkan database SQL dengan menggunakan cadangan yang diperbarui.

Jika masalah tidak diperbaiki dengan perangkat keras dan cadangan, maka coba perbaiki database dengan bantuan REPAIR_ALLOW_DATA_LOSS. Ini adalah tingkat dasar perbaikan untuk menentukan semua kesalahan dari CHECKDB, namun ini tidak berarti bahwa itu benar-benar akan memperbaiki kesalahan. Selain itu, dapat menyebabkan hilangnya data.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perilaku Rencana Kueri Tabel Temporal SQL Server 2016

  2. SQL Server:PILIH hanya baris dengan MAX(DATE)

  3. Panggilan ODBC Gagal dengan prosedur tersimpan - Lewati kueri

  4. Fungsi LEN tidak termasuk spasi tambahan di SQL Server

  5. Cara menggunakan Template di SQL Server Management Studio (SSMS) - Tutorial SQL Server / TSQL Bagian 16