Поделиться через


Как проверить и исправить базу данных (программным путем)

В этом разделе объясняется, как проверить и восстановить поврежденную базу данных Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5) с помощью объекта Engine. Дополнительные сведения об использовании пространства имен SqlServerCe см. в справочной документации по пространству имен SqlServerCe.

Файлы базы данных SQL Server Compact 3.5 разделены на логические блоки размером по 4 килобайта, именуемые страницами. При записи каждой страницы в файл базы данных SQL Server Compact 3.5 вычисляет и сохраняет ее контрольную сумму. Если после записи в файл страница была изменена или повреждена, она уже не соответствует ожидаемой контрольной сумме.

Метод Verify класса System.Data.SqlServerCe.SqlCeEngine заново вычисляет контрольные суммы всех страниц в файле базы данных и проверяет полученные контрольные суммы на соответствие ожидаемым величинам. Если метод возвращает значение true, это означает, что файл базы данных не поврежден. Если возвращено значение false, то файл базы данных поврежден и приложению следует вызвать метод Repair.

Если файл базы данных поврежден, можно попытаться восстановить его с помощью метода Repair объекта SqlCeEngine. Метод Repair служит для просмотра базы данных и вычисления контрольных сумм страниц. Если контрольная сумма не совпадает с суммой, вычисленной в момент записи страницы в базу данных, такая страница считается поврежденной.

Метод Repair можно вызвать с одним из двух приведенных ниже параметров.

  • RepairOption.DeleteCorruptedRows
    Если вызвать метод восстановления с параметром DeleteCorruptedRows, все поврежденные страницы будут удалены. Это может привести к значительной потере данных в случае, если поврежденная страница содержит схему базы данных. Однако восстановленные в таком режиме данные не будут повреждены.
  • RepairOption.RecoverCorruptedRows
    Если вызвать метод восстановления с параметром RecoverCorruptedRows , будет предпринята попытка считать данные на поврежденных страницах. В результате можно восстановить большее количество данных, но нельзя гарантировать, что в восстановленных данных не будет логических повреждений.
ms172420.note(ru-ru,SQL.100).gifПримечание.
Метод Repair следует применять, только если SQL Server Compact 3.5 возвращает ошибку с собственным номером ошибки 25017 (SSCE_M_DATABASECORRUPTED) либо метод Verify объекта SqlCeEngine возвращает значение false.

Процедуры SQL Server Compact 3.5

Проверка базы данных

  1. Создайте объект Engine.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Вызовите метод Verify , чтобы проверить базу данных на наличие поврежденных строк.

     if (false == engine.Verify()) {...}
    

Восстановление базы данных

  • Если в базе данных имеются поврежденные строки, вызовите метод Repair для исправления неполадок. Чтобы удалить все поврежденные строки, передайте параметр восстановления DeleteCorruptedRows; чтобы попытаться восстановить поврежденные строки, передайте параметр восстановления RecoverCorruptedRows.

    engine.Repair(null, RepairOption.RecoverCorruptedRows);
    
  • Чтобы создать восстановленную базу данных с учетом регистра, нужно задать свойство учета регистра для строки соединения метода Repair. Дополнительные сведения о базах данных с учетом регистра см. в разделе Работа с параметрами сортировки (SQL Server Compact). Пример.

    engine.Repair("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true;", RepairOption.RecoverCorruptedRows);
    

Пример

В приведенном примере показано, как проверить базу данных SQL Server Compact 3.5, а при обнаружении поврежденных строк — исправить ее путем извлечения данных из этих строк.

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");

if (false == engine.Verify())
{
   MessageBox.Show("Database is corrupted.");
   engine.Repair(null, RepairOption.RecoverCorruptedRows);
}
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")

If False = engine.Verify() Then
   MessageBox.Show("Database is corrupted.")
   engine.Repair(Nothing, RepairOption.RecoverCorruptedRows)
End If

См. также

Другие ресурсы

Обслуживание баз данных (SQL Server Compact)

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)