Share via


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

In diesem Thema erfahren Sie, wie eine beschädigte Datenbank von Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5 ) mithilfe des Engine -Objekts überprüft und repariert werden kann. Weitere Informationen zum Verwenden des SqlServerCe -Namespaces finden Sie in der Referenzdokumentation zum SqlServerCe -Namespace.

SQL Server Compact 3.5 -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 3.5 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 FALSE zurück, wurde die Datenbankdatei beschädigt und sollte die Anwendung die Repair -Methode aufrufen.

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.

Für einen Aufruf der Repair -Methode gibt es zwei Optionen:

  • 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 das Datenbankschema enthält. Allerdings ist davon auszugehen, dass Daten, die mit dieser Option wiederhergestellt wurden, unbeschädigt sind.
  • RepairOption.RecoverCorruptedRows
    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.

Hinweis

Die Repair -Methode lässt sich nur dann sinnvoll verwenden, wenn SQL Server Compact 3.5 einen Fehler mit der systemeigenen Fehlernummer 25017 (SSCE_M_DATABASECORRUPTED) zurückgibt oder wenn ein Aufruf der Verify -Methode des SqlCeEngine -Objekts false zurückgibt.

Verfahren für SQL Server Compact 3.5

So überprüfen Sie eine Datenbank

  1. Erstellen Sie ein Engine -Objekt.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.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 RecoverCorruptedRows -Reparaturoption übergeben.

    engine.Repair(null, RepairOption.RecoverCorruptedRows);
    
  • 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.RecoverCorruptedRows);
    

Beispiel

Im folgenden Beispiel wird gezeigt, wie eine SQL Server Compact 3.5 -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.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

Siehe auch

Andere Ressourcen

Verwalten von Datenbanken (SQL Server Compact)

Hilfe und Informationen

Informationsquellen (SQL Server Compact 3.5 Service Pack 1)