Пришлось столкнуться с проблемой, когда у клиента возникали "специфические" ошибки следующего характера:
The following error(s) have occurred: Оригинальное сообщение об ошибке: I/O error (bad page ID) detected during read at offset 0x00000010a5c000 in fileC:\terrasoft\Data\terrasoftCRM 30x15 Rus.mdf
Ошибка сохранения записи. Оригинальное сообщение об ошибке: I/O error (bad page ID) detected during read at offset 0x00000010a58000 in fileC:\terrasoft\Data\terrasoftCRM 30x15 Rus.mdf
Оригинальное сообщение об ошибке: Could not find the index entry for RID '16f1d2207bc9455f408a6e73882fe163ff010000' in index page (1:498400), index ID 0, database 'TSCRM30'. «Call Stack»
Данная ошибка возникает при сбоях сервера базы данных. Для решения нужно выполнить скрипт, на базе данных с помощью Query Analyzer или Management Studio:
go
ALTER DATABASE Название_базы SET single_user
go
USE Название_базы
go
DBCC CHECKDB ('Название_базы', repair_allow_data_loss)
go
ALTER DATABASE Название_базы SET multi_user
go
С помощью данного запроса починили уже две базы клиентов.
Может кому-то еще пригодится!;)
Есть одно небольшое замечание
DBCC CHECKDB с параметром repair_allow_data_loss
может привести к потере данных и, возможно, к нарушению логической целостности системы
Рекомендуется
- использовать резервные копии
- сначала запускать
DBCC CHECKDB с опцией repair_rebuild и только - если данный вариант не поможет (в самом крайнем случае, если нет другого выхода), то с опцией repair_allow_data_loss
См.документацию
DBCC CHECKDB (Transact-SQL)
Тоже поделюсь опытом:)
Конечно такие критические ошибки появляются не просто так, а как правило это происходит когда кто-то изменяет данные в базе данных а при этом .... выключается свет или кто-то кнопочку ВЫКЛ нажал на сервере(бывает даже такое, что вместо сервера используется ПК какого-то сотрудника :)). Все было бы хорошо если бы на сервере баз данных стоял UPS, а как правило на это не обращают пока гром не грянет. dbcc checkdb не всегда может помочь, хотя конечно и меня спасал :) А вот если уж случилась данная проблема, то я бы рекомендовал сделать следующее:
1. Попробовать варианты с dbcc checkdb
2. Если Вам повезло, то создать полную копию базы или из бекапа с инсталяции или sql скриптами и с помощью утилит Import/Export, SSIS "перелить" данные в новую базу и... поставить UPS на сервер, настроить автоматический бекап с верификацией и жить спокойно :)
3. Если все таки некоторые таблицы нельзя восстановить то, у меня получалось вытянуть данные из таких таблиц с помощью select top ... пакетами и "перелить" их в чистую копию.
Может повезет и Вы сможете вытянуть побольше:)