Попытка получить логическую страницу (5: 65424) в базе данных 2 не удалась

11

Я получаю следующее SqlExceptionпри вызове хранимой процедуры:

Попытка получить логическую страницу (5: 65424) в базе данных 2 не удалась. Он принадлежит единице распределения 7349876362857938944, а не 4899918190390149120.

System.Data.SqlClient.SqlException произошла ошибка
Message = "Попытка извлечь логическую страницу (5: 65424) в базе данных 2. Она принадлежит блоку выделения 7349876362857938944, а не 4899918190390149120.

Источник = ". Поставщик данных Net SqlClient"
ErrorCode = -2146232060
Класс = 21
LineNumber = 257
Номер = 605
Процедура = "ispDisplayCount"
Сервер = "10.10.1.1"
Состояние = 3

Что означает это исключение? Есть ли решение по вышеуказанному вопросу?

Хотя база данных, на которую ссылается вышеупомянутая ошибка, указывает на базу данных tempdb, аналогичные ошибки, ссылающиеся на Сообщение 605, могут быть исправлены с помощью ответов ниже.

Сообщение 605, уровень 21, состояние 3, строка 1
Попытка извлечь логическую страницу (1: 8687634) в базе данных 7 не удалась. Он принадлежит блоку распределения 72057594364821504, а не 72057594052476928.

Параг Мешрам
источник

Ответы:

11

Если идентификатор базы данных, указанный в сообщении об ошибке, имеет 2значение база данных tempdb. Один из способов исправить этот тип повреждения в базе данных tempdb - просто перезапустить экземпляр SQL Server. Для идентификаторов базы данных, отличных от 2, следуйте приведенным ниже рекомендациям.

Возможно, вам придется восстановить из резервной копии, однако попробуйте это:

Как член роли sysadmin, выполните DBCC PAGE (2, 5, 65424, 3);и найдите Metadata: IndexIdзначение.

  • Если это 0(куча) или 1(кластерный индекс), вам нужно восстановить из резервной копии.
  • Если это не так 0 или 1вы можете просто перестроить некластеризованный индекс.

Запустите команду DBCC и дайте нам знать, что вы найдете. Проверьте https://www.mssqltips.com/sqlservertip/1578/using-dbcc-page-to-examine-sql-server-table-and-index-data/ для получения подробной информации о DBCC PAGEкоманде

Мэтт М
источник
10

Ваша база данных повреждена. Время восстанавливать из хорошей резервной копии. Если у вас нет резервных копий, самое время узнать о важности тестирования вашего плана восстановления . Также необходимо провести проверку надежности вашего оборудования, следите за предупреждениями и ошибками в системных журналах.

Ремус Русану
источник
9

Ошибка указывает на то, что ваша база данных повреждена. Хорошая новость заключается в том, что идентификатор базы данных 2 указывает, что это база данных tempdb, поэтому исправить это легко - просто перезапустите экземпляр базы данных.

После перезапуска экземпляра вы должны выяснить, почему произошло повреждение. Начните с запуска chkdskна диске, на котором находится файл проблемы. Далее вам нужно посмотреть на само хранилище и посмотреть, есть ли там проблемы. Это может быть проблема с физическим диском, драйверы HBA или карты RAID и т. Д.

mrdenny
источник
Денни, ты считаешь, что проверка работоспособности ОЗУ также будет полезна? Вы видели, как испорченная страница в оперативной памяти также приводила к повреждению на диске?
Али Разеги
1
Если имеется плохая флешка, которая может привести к тому, что страница будет считаться грязной. Шансы намного выше, что это проблема дисковой подсистемы, а не памяти. Это было бы следующее место, чтобы посмотреть, если диски на самом деле в порядке.
Мрденни
2

Я смог решить эту проблему путем очистки кэшей SQL:

DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO

Очевидно, перезапуск службы SQL имел бы такой же эффект.

(через Made By SQL , воспроизведенный здесь, чтобы помочь другим!)

8128
источник
1

В моем случае решением было усечение и повторное заполнение данных в соответствующих таблицах .

Скорее всего, данные внутри таблиц были повреждены.

xameeramir
источник
1

Многие люди слышат, что « база данных повреждена, вам нужно восстановить », даже не рекомендуя потратить несколько минут на выполнение некоторых из следующих действий; просмотрите ваши журналы, выясните, когда проблема возникла впервые, ошибка, которая предшествовала этой строке, проверьте базу данных / таблицу, к которой принадлежит страница.

В моем случае этой ошибке предшествовал;

Не удалось найти запись индекса в индексе ID 9 таблицы 629577281 в базе данных 'XYZ'. Указанный индекс поврежден или существует проблема с текущим планом обновления

Обходной путь должен был отследить упомянутый индекс и временно удалить его.

позже я нашел эту ссылку Microsoft, которая описывает мою точную проблему и предлагает ссылку для решения

надеюсь, что это поможет кому-то еще в будущем

daffyjeje
источник