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

Metode Gratis untuk Memperbaiki Korupsi Indeks SQL Server

Artikel ini membagikan pentingnya indeks dalam database SQL. Juga, ini memberikan gambaran singkat tentang indeks berkerumun dan tidak berkerumun. Selanjutnya, artikel tersebut membahas alasan korupsi indeks SQL Server, faktor untuk mengidentifikasi indeks yang rusak, dan metode untuk memperbaikinya.

Indeks di SQL Server membantu mempercepat proses mengambil baris dari tabel atau tampilan. Namun, pilihan indeks yang benar sangat penting untuk meningkatkan kinerja kueri. SQL Server mendukung indeks berkerumun dan tidak berkerumun. Korupsi di salah satu indeks ini dapat menyebabkan penundaan dalam mengambil baris. Selain itu, Anda mungkin mendapatkan nilai yang berbeda atau dihapus saat mengambil beberapa baris. Selain itu, kueri yang berjalan paling lama dapat menjadi rusak karena indeks pada tabel rusak.

Apapun situasinya, Anda harus memperbaiki kerusakan indeks pada waktunya untuk mencegah alur kerja database SQL Server terpengaruh.

Sebelum membahas metode untuk memecahkan masalah korupsi indeks, mari kita tinjau secara singkat indeks berkerumun dan tidak berkerumun.

Ikhtisar Indeks Clustered dan Non-Clustered

Menerapkan batasan kunci utama pada kolom dalam tabel membuat indeks berkerumun pada kolom. Indeks berkerumun mengurutkan data secara fisik dan menyimpan data dalam tabel berdasarkan kunci indeks yang ditentukan. Karena kita dapat mengurutkan data hanya dalam satu urutan, tidak mungkin untuk memiliki lebih dari satu indeks berkerumun.

Namun, indeks nonclustered mengurutkan dan menyimpan data secara terpisah dari baris dalam tabel. Pada dasarnya, ini adalah salinan kolom data tabel yang memiliki tautan ke tabel terkait. Tidak seperti indeks berkerumun, Anda dapat memiliki satu atau lebih indeks yang tidak berkerumun.

Apa Penyebab Korupsi Indeks SQL Server?

Indeks dapat menjadi sangat terfragmentasi dari waktu ke waktu (karena operasi penyisipan, pembaruan, atau penghapusan massal) dan memerlukan pemeliharaan berkala. Indeks yang terfragmentasi dapat menyebabkan kinerja kueri yang buruk dan mungkin rusak. Juga, faktor-faktor seperti memutakhirkan versi SQL Server, bug dalam program SQL, sistem mati mendadak, dll. dapat menyebabkan korupsi indeks SQL Server. Khususnya, menjalankan 'pernyataan UPDATE kompleks dengan petunjuk NOLOCK' di atas tabel dapat menyebabkan korupsi indeks non-cluster.

Sebelum membahas metode untuk memperbaiki kerusakan pada indeks SQL Server, mari kita lihat cara mengidentifikasi indeks yang rusak.

Bagaimana Mengidentifikasi Korupsi dalam Indeks SQL Server?

Anda dapat menentukan apakah indeks rusak menggunakan metode berikut:

  • Ambil baris yang memiliki nilai berbeda atau dihapus, lalu jalankan perintah 'ROWID' untuk mengidentifikasi entri yang hilang. Anda juga dapat melacak entri yang hilang dengan memeriksa log kesalahan SQL.
  • Menjalankan DBCC CHECKDB akan melaporkan pesan kesalahan berikut jika Anda memiliki indeks nonclustered yang rusak.

Msg 2511, Level 16, State 1, Line 31

Kesalahan tabel:ID Objek 613577224, ID indeks 2, ID partisi 72057594041401344,

alokasikan ID unit 72057594047037440 (ketik data baris IN).

Kunci rusak di halaman (1:264), slot 2 dan 3.

  • Jika Anda memiliki indeks berkerumun, Anda mungkin menerima pesan berikut yang menunjukkan kesalahan:

Server:Msg 1902, Level 16, State 3, Line 1

Tidak dapat membuat lebih dari satu indeks berkerumun pada tabel 'Nama Tabel'. Jatuhkan indeks berkerumun yang ada 'Nama Indeks Tergugus' sebelum membuat yang lain.

Bagaimana Cara Memperbaiki Korupsi Indeks SQL Server?

Ikuti metode gratis berikut yang dapat Anda gunakan untuk memperbaiki korupsi indeks SQL Server:

Metode 1 – Pulihkan dari Cadangan

Baik Anda mencurigai adanya korupsi dalam indeks berkerumun atau tidak, gunakan cadangan untuk memulihkan data yang terpengaruh sebelum korupsi terjadi.

Namun, memulihkan dari cadangan tidak akan berfungsi jika cadangan tidak memiliki pembaruan terbaru. Bahkan dapat menyebabkan hilangnya data. Jika demikian, coba metode berikutnya.

Metode 2 – Jatuhkan dan Buat Ulang Indeks yang Rusak

Catatan: Ini hanya berfungsi untuk indeks yang tidak berkerumun.

Hapus semua atau indeks tertentu yang menunjukkan kerusakan dengan mengikuti langkah-langkah berikut:

  • Hubungkan ke instance server di SQL Server Management Studio (SSMS) .
  • Di 'Penjelajah Objek' jendela, perluas database yang berisi tabel dengan indeks yang rusak.
  • Klik kanan pada tabel, pilih 'Script Table as' pilihan, arahkan kursor ke 'DROP Dan BUAT Ke' dan klik Editor Kueri Baru

Jika Anda gagal membuat ulang indeks yang rusak, Anda dapat mencoba memperbaiki indeks.

Metode 3 – Memperbaiki Database SQL

Sebagai upaya terakhir, jalankan perintah DBCC CHECKDB dengan 'REPAIR_ALLOW_DATA_LOSS' untuk database yang telah rusak (clustered atau nonclustered) indeks pada tabel. Tetapi ini dapat menyebabkan hilangnya data. Sebagai solusi alternatif, coba gunakan alat perbaikan SQL seperti Stellar Repair untuk MS SQL. Alat ini membantu memperbaiki file database (.mdf dan .ndf) dan memulihkan indeks, tampilan, prosedur tersimpan, dan semua komponen lainnya. Anda dapat mengimpor indeks yang dipulihkan dan objek database lainnya langsung ke database langsung atau baru.

Unduh versi demo perangkat lunak perbaikan database SQL untuk melihat indeks yang dapat dipulihkan sebelum menyimpan file yang diperbaiki.

Kesimpulan

Jika Anda mencurigai adanya korupsi dalam suatu indeks, gunakan faktor-faktor yang diuraikan dalam artikel untuk menentukan apakah indeks tersebut rusak atau tidak. Juga, periksa kemungkinan alasan di balik korupsi indeks SQL Server dan metode untuk memperbaiki korupsi. Metode termasuk memulihkan database dari cadangan, menjatuhkan dan membuat ulang indeks, dan memperbaiki database dan memulihkan semua komponennya. Anda juga dapat mempertimbangkan untuk menggunakan alat perbaikan SQL untuk memperbaiki indeks SQL cluster dan non-cluster yang rusak serta memulihkan objek database yang tidak dapat diakses.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memperbaiki "Prosedur mengharapkan parameter '@ pernyataan' dari jenis 'ntext/nchar/nvarchar'." Kesalahan dalam SQL Server

  2. Mengkueri data dengan menggabungkan dua tabel dalam dua database di server yang berbeda

  3. Kondisi Balapan Antrian Proses SQL Server

  4. Ujian Tip dan Petunjuk administrasi Azure SQL Database (DP-300)

  5. Cara Menangani Kesalahan dalam Transaksi Bersarang SQL Server