Freigeben über


Vorgehensweise: Überprüfen und Reparieren einer Datenbank (programmgesteuert)

In diesem Thema erfahren Sie, wie eine beschädigte Microsoft SQL Server Compact 4.0-Datenbank mithilfe des Engine-Objekts überprüfen und reparieren. Weitere Informationen zum Verwenden des SqlServerCe-Namespaces finden Sie in der Referenzdokumentation zum SqlServerCe-Namespace.

SQL Server Compact-Datenbankdateien werden in logische, 4 KB große Einheiten unterteilt, die als Seiten bezeichnet werden. Beim Schreiben einer Seite in die Datenbankdatei berechnet und speichert SQL Server Compact eine Prüfsumme für diese Seite. Wird die Seite, nachdem sie in die Datei geschrieben wurde, geändert oder beschädigt, sind ihre tatsächliche und ihre erwartete Prüfsumme nicht mehr identisch.

Durch Aufrufen der Verify-Methode der System.Data.SqlServerCe.SqlCeEngine-Klasse werden die Prüfsummen aller Seiten in der Datenbankdatei erneut berechnet und überprüft, ob die Prüfsummen mit den erwarteten Werten übereinstimmen. Gibt diese Methode TRUE zurück, ist die Datenbankdatei nicht beschädigt. Gibt diese Methode den Wert FALSE zurück, wurde die Datenbankdatei beschädigt. Von der Anwendung sollte dann die Repair-Methode aufgerufen werden.

Ist eine Datenbankdatei beschädigt worden, können Sie versuchen, diese mithilfe der Repair-Methode des SqlCeEngine-Objekts zu reparieren. Bei der Repair-Methode wird die Datenbank gescannt, und die Prüfsummen der Seiten werden berechnet. Stimmt eine Prüfsumme nicht mit der Prüfsumme überein, die berechnet wurde, als die Seite in die Datenbank geschrieben wurde, wird diese Seite als beschädigt angesehen.

Es gibt folgende Optionen zum Aufrufen der Repair-Methode:

  • RepairOption.RecoverAllOrFail

    Wenn die Reparaturmethode durch Verwendung des RecoverAllorFail-Werts aufgerufen wird, ist die Wiederherstellung nur erfolgreich, wenn keine Daten verloren gehen. Wenn ein Datenverlust erkannt wird, wird die Wiederherstellung angehalten, und es wird eine Ausnahme ausgelöst. Dies ist die effektivste Option für den Schutz vor Datenverlust und Beschädigung der reparierten Datenbank.

  • RepairOption.RecoverAllPossibleRows

    Wenn die Reparaturmethode unter Verwendung des RecoverAllPossibleRows-Werts aufgerufen wird, versucht die Datenbank, alle Daten einschließlich der Zeilen aus den beschädigten Seiten zu lesen. Hierdurch werden möglicherweise mehr Daten wiederhergestellt. Bei dieser Option kann jedoch nicht sichergestellt werden, dass die wiederhergestellten Daten frei von Beschädigungen sind.

  • RepairOption.DeleteCorruptedRows

    Wird die Repair-Methode mit der DeleteCorruptedRows-Option aufgerufen, werden alle beschädigten Seiten verworfen. Dies kann zu einem erheblichen Datenverlust führen, wenn die beschädigte Seite Datenzeilen oder das Datenbankschema enthält. Allerdings ist davon auszugehen, dass Daten, die mit dieser Option wiederhergestellt wurden, unbeschädigt sind.

  • RepairOption.RecoverCorruptedRows

    Die Option ist in SQL Server Compact 4.0 veraltet. Sie sollten stattdessen die Option RecoverAllPossibleRows verwenden. Wird die Repair-Methode mit der RecoverCorruptedRows -Option aufgerufen, wird für die Datenbank versucht, Daten aus beschädigten Seiten zu lesen. Dies kann dazu führen, dass mehr Daten wiederhergestellt werden, stellt aber nicht sicher, dass die wiederhergestellten Daten ohne logische Beschädigungen vorliegen.

Wichtig

Der Administrator sollte während und nach Verwendung der Repair-Methode die folgenden Punkte berücksichtigen.

  • Bei der Repair-Methode ist keine vollständige Datenwiederherstellung für jede Datenbank sichergestellt. Einige Arten von Datenbeschädigungen können unabhängig von der Repair-Option, die von der Anwendung gewählt wird, nicht vollständig repariert werden.

  • Nach Reparatur der Quelldatenbank sollte der Administrator die Verify-Methode für die Zieldatenbank ausführen.

  • Unabhängig von der ausgewählten Reparaturoption schreibt die Repair-Methode Details über jegliche Datenbankinkonsistenz in eine Protokolldatei. Diese Datei wird in dasselbe Verzeichnis geschrieben, das die SDF-Datei der Quelldatenbank enthält. Die Anwendung oder ein Datenbankadministrator sollte diese Protokolldatei untersuchen, um zu bestimmen, ob die resultierende Datenbank gültig ist.

  • Wenn die Anwendung die Option RecoverAllOrFailnicht verwendet, muss die resultierende Datenbank von der Anwendung oder vom Datenbankadministrator überprüft werden. Hierzu wird die Protokolldatei daraufhin überprüft, ob die Datenbank zuverlässig ist.

  • Wenn Sie oder die Anwendung die resultierende Datenbank nicht überprüfen können, stellen Sie die Datenbank mithilfe einer Sicherung wieder her, oder stellen Sie die Datenbank manuell wieder her.

Verfahren für SQL Server Compact 4.0

So überprüfen Sie eine Datenbank

  1. Erstellen Sie ein Engine-Objekt.

    SqlCeEngine engine = new SqlCeEngine("Data Source = Northwind.sdf");
    
  2. Rufen Sie die Verify -Methode auf, um die Datenbank auf beschädigte Zeilen zu untersuchen.

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

So reparieren Sie eine Datenbank

  • Wenn die Datenbank beschädigte Zeilen enthält, rufen Sie die Repair-Methode auf, um die Datenbank zu reparieren. Sie haben die Möglichkeit, alle beschädigten Zeilen zu löschen, indem Sie die DeleteCorruptedRows-Reparaturoption übergeben. Sie können jedoch auch versuchen, die beschädigten Zeilen zu reparieren, indem Sie die RecoverAllorFail-Reparaturoption übergeben.

    engine.Repair (null, RepairOption.RecoverAllorFail );
    
  • Um eine reparierte Datenbank zu erstellen, bei der die Groß-/Kleinschreibung berücksichtigt wird, legen Sie die entsprechende Eigenschaft in der Verbindungszeichenfolgen-Eigenschaft der Repair-Methode fest. Weitere Informationen über Datenbanken, bei denen die Groß-/Kleinschreibung berücksichtigt wird, finden Sie unter Arbeiten mit Sortierungen (SQL Server Compact). Beispiel:

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

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine SQL Server Compact-Datenbank überprüft wird und wie die Datenbank, falls beschädigte Zeilen gefunden werden, repariert wird, indem die Daten der beschädigten Zeilen wiederhergestellt werden.

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

Siehe auch

Konzepte

Verwalten von Datenbanken (SQL Server Compact)