Как проверить и исправить базу данных (программным путем)
В этом разделе объясняется, как проверить и восстановить поврежденную базу данных MicrosoftSQL Server Compact 4.0 с помощью объекта Engine. Дополнительные сведения об использовании пространства имен SqlServerCe см. в справочной документации по пространству имен SqlServerCe.
Файлы базы данных SQL Server Compact разделены на логические блоки размером по 4 килобайта, именуемые страницами. При записи каждой страницы в файл базы данных SQL Server Compact вычисляет и сохраняет ее контрольную сумму. Если после записи в файл страница была изменена или повреждена, она уже не соответствует ожидаемой контрольной сумме.
Метод Verify класса System.Data.SqlServerCe.SqlCeEngine заново вычисляет контрольные суммы всех страниц в файле базы данных и проверяет полученные контрольные суммы на соответствие ожидаемым величинам. Если метод возвращает значение true, это означает, что файл базы данных не поврежден. Если возвращено значение false, то файл базы данных поврежден и приложению следует вызвать метод Repair.
Если файл базы данных поврежден, можно попытаться восстановить его с помощью метода Repair объекта SqlCeEngine. Метод Repair служит для просмотра базы данных и вычисления контрольных сумм страниц. Если контрольная сумма не совпадает с суммой, вычисленной в момент записи страницы в базу данных, такая страница считается поврежденной.
Метод Repair можно вызывать со следующими параметрами:
RepairOption.RecoverAllOrFail
Если метод Repair вызывается с использованием значения RecoverAllorFail, то восстановление будет успешным, только если отсутствуют потери данных. Если обнаруживается потеря данных, восстановление прекращается и вызывается исключение. Это наиболее эффективный параметр, который позволяет предотвратить потерю данных и повреждение восстановленной базы данных.
RepairOption.RecoverAllPossibleRows
Если метод Repair вызывается с использованием значения RecoverAllPossibleRows, то в базе данных предпринимается попытка читать все данные, включая строки из поврежденных страниц. Это может привести к восстановлению большего объема данных. Тем не менее использование указанного параметра не может гарантировать, что восстановленные данные не будут иметь повреждений того или иного типа.
RepairOption.DeleteCorruptedRows
Если вызвать метод восстановления с параметром DeleteCorruptedRows, все поврежденные страницы будут удалены. Это может привести к значительной потере данных в случае, если поврежденная страница содержит строки данных или схему базы данных. Однако восстановленные в таком режиме данные не будут повреждены.
RepairOption.RecoverCorruptedRows
Эта функция более не используется в SQL Server Compact 4.0. Вместо этого следует использовать параметр RecoverAllPossibleRows. Если вызвать метод восстановления с параметром RecoverCorruptedRows , будет предпринята попытка считать данные на поврежденных страницах. В результате можно восстановить большее количество данных, но нельзя гарантировать, что в восстановленных данных не будет логических повреждений.
Важно!
Администратор должен помнить о следующих особенностях до и после использования метода Repair.
-
Метод Repair не гарантирует полного восстановления данных для каждой базы данных. При некоторых формах повреждения данных полное восстановление невозможно независимо от того, какой параметр Repair выбран приложением.
-
Администратор должен запустить метод Verify на целевой базе данных после восстановления базы данных-источника.
-
Независимо от выбранного параметра исправления, метод Repair записывает подробные сведения обо всех несовместимостях базы данных в файл журнала. Этот файл записывается в тот же каталог, в котором содержится SDF-файл базы данных-источника. Этот файл журнала должен быть исследован приложением или администратором базы данных для определения того, является ли результирующая база данных применимой для эксплуатации.
-
Если в приложении не используется параметр RecoverAllOrFail, то проверка результирующей базы данных приложением или администратором базы данных становится обязательной. Эта проверка выполняется путем исследования файла журнала для определения того, содержит ли база данных достоверные данные.
-
Если нельзя проверить результирующую базу данных самим или с помощью приложения, восстановите базу данных из резервной копии или реконструируйте базу данных вручную.
Процедуры для SQL Server Compact 4.0
Проверка базы данных
Создайте объект Engine.
SqlCeEngine engine = new SqlCeEngine("Data Source = Northwind.sdf");
Вызовите метод Verify , чтобы проверить базу данных на наличие поврежденных строк.
if (false == engine.Verify()) {...}
Восстановление базы данных
Если в базе данных имеются поврежденные строки, вызовите метод Repair для исправления неполадок. Чтобы удалить все поврежденные строки, передайте параметр восстановления DeleteCorruptedRows; чтобы попытаться восстановить поврежденные строки, передайте параметр восстановления RecoverAllorFail.
engine.Repair (null, RepairOption.RecoverAllorFail );
Чтобы создать восстановленную базу данных с учетом регистра, нужно задать свойство учета регистра для строки соединения метода Repair. Дополнительные сведения о базах данных с учетом регистра см. в разделе Работа с параметрами сортировки (SQL Server Compact). Пример.
engine.Repair("Data Source= Test.sdf; LCID= 1049; Case Sensitive=true;", RepairOption.RecoverAllorFail );
Пример
В приведенном примере показано, как проверить базу данных SQL Server Compact, а при обнаружении поврежденных строк — исправить ее путем извлечения данных из этих строк.
SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
if (false == engine.Verify())
{
MessageBox.Show("Database is corrupted.");
engine.Repair(null, RepairOption.RecoverAllorFail);
}
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
If False = engine.Verify() Then
MessageBox.Show("Database is corrupted.")
engine.Repair(Nothing, RepairOption.RecoverAllorFail)
End If