Bagikan melalui


MSSQLSERVER_605

Berlaku untuk: SQL Server

Detail

Atribut Nilai
Nama Produk SQL Server
ID Peristiwa 605
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis HALAMAN SALAH
Teks Pesan Upaya untuk mengambil halaman logis %S_PGID dalam database %d gagal. Ini milik unit alokasi %I64d bukan ke %I64d.

Penjelasan

Kesalahan ini umumnya menandakan halaman atau kerusakan alokasi dalam database yang ditentukan. SQL Server mendeteksi kerusakan saat membaca halaman milik tabel baik dengan mengikuti tautan halaman atau dengan menggunakan Peta Alokasi Indeks (IAM). Semua halaman yang dialokasikan ke tabel harus milik salah satu unit alokasi yang terkait dengan tabel. Jika ID unit alokasi yang terdapat di header halaman tidak cocok dengan ID unit alokasi yang terkait dengan tabel, pengecualian ini akan dinaikkan. ID unit alokasi pertama yang tercantum dalam pesan kesalahan adalah ID yang ada di header halaman, dan nilai unit alokasi kedua adalah ID yang terkait dengan tabel.

Kesalahan Kerusakan Data

Tingkat keparahan 21 menunjukkan potensi kerusakan data. Kemungkinan penyebabnya adalah rantai halaman yang rusak, IAM yang rusak, atau entri yang tidak valid dalam tampilan katalog sys.objects untuk objek tersebut. Kesalahan ini sering disebabkan oleh kegagalan driver perangkat keras atau perangkat disk.

Kesalahan Sementara

Tingkat keparahan 12 menunjukkan potensi kesalahan sementara; artinya, itu terjadi di cache dan tidak menunjukkan kerusakan pada data pada disk. Kesalahan sementara 605 dapat disebabkan oleh kondisi berikut:

  • Sistem operasi secara prematur memberi tahu SQL Server bahwa operasi I/O telah selesai; pesan kesalahan ditampilkan meskipun tidak ada kerusakan data aktual.

  • Menjalankan kueri dengan petunjuk Pengoptimal NOLOCK atau mengatur tingkat isolasi transaksi ke READ UNCOMMITTED. Saat kueri yang menggunakan TINGKAT isolasi transaksi NOLOCK atau READ UNCOMMITTED mencoba membaca data yang sedang dipindahkan atau diubah oleh pengguna lain, kesalahan 605 terjadi. Untuk memverifikasi bahwa itu adalah kesalahan sementara 605, jalankan ulang kueri nanti.

Secara umum, jika kesalahan terjadi selama akses data tetapi operasi DBCC CHECKDB berikutnya selesai tanpa kesalahan, kesalahan 605 mungkin sementara.

Tindakan Pengguna

Jika kesalahan 605 tidak sementara, masalahnya parah dan harus dikoreksi dengan melakukan tugas-tugas berikut:

  1. Identifikasi tabel yang terkait dengan unit alokasi yang ditentukan dalam pesan dengan menjalankan kueri berikut. Ganti allocation_unit_id dengan unit alokasi yang ditentukan dalam pesan kesalahan.

    USE [database_name];  
    
    GO  
    
    SELECT au.allocation_unit_id, OBJECT_NAME(p.object_id) AS table_name, fg.name AS filegroup_name,  
    
    au.type_desc AS allocation_type, au.data_pages, partition_number  
    
    FROM sys.allocation_units AS au  
    
    JOIN sys.partitions AS p ON au.container_id = p.partition_id  
    
    JOIN sys.filegroups AS fg ON fg.data_space_id = au.data_space_id  
    
    WHERE au.allocation_unit_id = '<allocation_unit_id>' OR au.allocation_unit_id = '<allocation_unit_id>'  
    
    ORDER BY au.allocation_unit_id;  
    
    GO  
    
  2. Jalankan DBCC CHECKTABLE tanpa klausa REPAIR pada tabel yang terkait dengan ID unit alokasi kedua yang ditentukan dalam pesan kesalahan.

  3. Jalankan DBCC CHECKDB tanpa klausul REPAIR sesegera mungkin untuk menentukan tingkat lengkap kerusakan di seluruh database.

  4. Periksa log kesalahan untuk kesalahan lain yang sering menyertai kesalahan 605 dan periksa Log Peristiwa Windows untuk masalah terkait sistem atau perangkat keras apa pun. Perbaiki masalah terkait perangkat keras yang terkandung dalam log.

Jika masalah tidak terkait dengan perangkat keras, lakukan salah satu tugas berikut:

  1. Pulihkan database dari cadangan bersih yang diketahui. Anda dapat memanfaatkan fitur pencadangan pemulihan halaman untuk memulihkan halaman yang rusak saja.

  2. Jalankan DBCC CHECKDB dengan klausul REPAIR yang direkomendasikan oleh operasi DBCC CHECKDB yang dilakukan pada langkah 3 untuk memperbaiki kerusakan. Jika menjalankan DBCC CHECKDB dengan salah satu klausa REPAIR tidak memperbaiki masalah, hubungi penyedia dukungan utama Anda. Memiliki output dari DBCC CHECKDB yang tersedia untuk ditinjau.

    Perhatian

    Jika Anda tidak yakin apa efek DBCC CHECKDB dengan klausa REPAIR pada data Anda, hubungi penyedia dukungan utama Anda sebelum menjalankan pernyataan ini.

Lihat Juga

DBCC CHECKTABLE (Transact-SQL)