JetDefragment-Funktion

Gilt für: Windows | Windows Server

JetDefragment-Funktion

Die JetDefragment-Funktion startet und beendet Datenbankdefragmentierungsaufgaben, die die Datenorganisation innerhalb einer Datenbank verbessern. Dies wird durchgeführt, um das Wachstum der Datenbank zu begrenzen, indem die vorhandene Datenträgerzuordnung innerhalb der Datenbank effizienter verwendet wird. Sie kann auch den Arbeitssatz reduzieren, indem sichergestellt wird, dass die Daten genauer gepackt werden. Schließlich kann sie die Anwendungsleistung verbessern, indem allgemeine Vorgänge durch eine bessere Datenorganisation beschleunigt werden.

Die Datenbankdefragmentierung ist ein Onlinevorgang und unterbricht keine regulären Datenbankaktivitäten, z. B. Abfragevorgänge oder Datenaktualisierungen. JetDefragment erstellt auch keine Kopie aller vorhandenen Daten. Stattdessen wird eine Datenbank an Ort und Stelle defragmentiert. Schließlich stellt JetDefragment den internen Datenbankspeicherplatz für die Wiederverwendung wieder her, gibt jedoch keinen zusätzlichen Speicherplatz für das Betriebssystemdateisystem frei.

Das resultierende Format der Daten kann viel effizienter sein, ist aber im Allgemeinen nicht optimal. Die Defragmentierung ist auf die Freigabe von Datenbankseiten zur erneuten Verwendung beschränkt, die Daten enthalten, die bereits logisch gelöscht wurden. Durch die Defragmentierung können Datenbankseiten auch in einigen Fällen wiederverwendet werden, indem Daten von zwei Seiten kombiniert werden, wenn sie auf eine einzelne Seite passen.

Dieser Vorgang unterscheidet sich von JetCompact, bei dem eine Kopie einer schreibgeschützten Datenbank in eine äußerst optimale Form umgewandelt wird.

    JET_ERR JET_API JetDefragment(
      __in          JET_SESID sesid,
      __in          JET_DBID dbid,
      __in          JET_PCSTR szTableName,
      __out_opt     unsigned long* pcPasses,
      __out_opt     unsigned long* pcSeconds,
      __in          JET_GRBIT grbit
    );

Parameter

sesid

Die Sitzung, die für diesen Aufruf verwendet werden soll.

Dbid

Die Datenbank, die defragmentiert wird.

szTableName

Nicht verwendeter Parameter. Die Defragmentierung wird für die gesamte Datenbank ausgeführt, die von der angegebenen Datenbank-ID beschrieben wird.

pcPasses

Beim Starten einer Onlinedefragmentierungsaufgabe legt dieser Eingabeparameter die maximale Anzahl von Defragmentierungsdurchläufen fest. Beim Beenden einer Onlinedefragmentierungsaufgabe wird dieser Ausgabepuffer auf die Anzahl der ausgeführten Durchläufe festgelegt.

Wenn dieser Parameter auf NULL festgelegt ist, ist die Anzahl der Onlinedefragmentierungsdurchläufe unbegrenzt.

pcSeconds

Beim Starten einer Onlinedefragmentierungsaufgabe legt dieser Eingabeparameter die maximale Zeit für die Defragmentierung fest. Beim Beenden einer Onlinedefragmentierungsaufgabe wird dieser Ausgabepuffer auf die Für die Defragmentierung verwendete Zeit festgelegt.

Wenn dieser Parameter auf NULL festgelegt ist oder pcSeconds auf einen negativen Wert zeigt, ist die maximale Zeit für die Defragmentierung unbegrenzt.

grbit

Eine Gruppe von Bits, die null oder mehr der folgenden Optionen angibt.

Wert

Bedeutung

JET_bitDefragmentAvailSpaceTreesOnly

Defragmentiert den verfügbaren Speicherplatzteil der ESE-Datenbank-Speicherplatzzuordnung. Der Datenbankspeicherplatz ist in zwei Typen unterteilt: eigener Speicherplatz und verfügbarer Speicherplatz. Der eigene Speicherplatz wird einer Tabelle oder einem Index zugeordnet, während der verfügbare Speicherplatz für die Verwendung innerhalb der Tabelle bzw. des Indexes bereit ist. Der verfügbare Speicherplatz ist im Verhalten viel dynamischer und erfordert eine online defragmentierung mehr als der eigene Speicherplatz oder Tabellen- oder Indexdaten.

JET_bitDefragmentBatchStart

Startet eine neue Defragmentierungsaufgabe.

JET_bitDefragmentBatchStop

Beendet eine Defragmentierungsaufgabe.

Rückgabewert

Diese Funktion gibt den JET_ERR Datentyp mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine Errors and Error Handling Parameters.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errClientRequestToStopJetService

Es ist nicht möglich, den Vorgang abzuschließen, da alle Aktivitäten auf der Instanz, die der Sitzung zugeordnet ist, als Ergebnis eines Aufrufs von JetStopServiceaufgetreten sind.

JET_errDatabaseFileReadOnly

Die für die Defragmentierung ausgewählte Datenbank ist schreibgeschützte Datenbank und kann nicht aktualisiert werden, einschließlich der Defragmentierung.

JET_errDistributedTransactionAlreadyPreparedToCommit

Die angegebene Sitzung befindet sich im Zustand bereit für den Commit und kann keine neuen Updates starten, bis für die aktuelle Transaktion ein Commit oder Rollback ausgeführt wurde.

JET_errInstanceUnavailable

Es ist nicht möglich, den Vorgang abzuschließen, da für die instanz, die der Sitzung zugeordnet ist, ein schwerwiegender Fehler aufgetreten ist, der erfordert, dass der Zugriff auf alle Daten widerrufen wird, um die Integrität dieser Daten zu schützen. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben.

JET_errInvalidDatabaseId

Die angegebene Datenbank-ID stimmt nicht mit einer bekannten Datenbank in der -Instanz überein.

JET_errNotInitialized

Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete Instanz noch nicht initialisiert wurde.

JET_errRestoreInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da ein Wiederherstellungsvorgang für die Instanz ausgeführt wird, die der Sitzung zugeordnet ist.

JET_errSessionSharingViolation

Dieselbe Sitzung kann nicht für mehrere Threads gleichzeitig verwendet werden. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben.

JET_errTermInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da die der Sitzung zugeordnete Instanz heruntergefahren wird.

JET_errTransReadOnly

Die angegebene Sitzung verfügt nur über schreibgeschützte Berechtigungen und kann keine Aufgabe starten, die möglicherweise ein Update ausführt, einschließlich Defragmentierung.

JET_errVersionStoreOutOfMemory

Dieser Fehler tritt auf, wenn die konfigurierte Größe des Versionsspeichers nicht ausreicht, um alle ausstehenden Updates zu speichern.

JET_wrnDefragAlreadyRunning

Die option JET_bitDefragmentBatchStart wurde übergeben, aber eine Defragmentierungsaufgabe führt bereits eine Defragmentierung für die angegebene Datenbank aus.

JET_wrnDefragNotRunning

Die option JET_bitDefragmentBatchStop wurde übergeben, aber derzeit wird keine Defragmentierungsaufgabe ausgeführt.

Bei Erfolg wird die angeforderte Aktion ausgeführt, entweder eine Defragmentierungsaufgabe für bestimmte Daten mit angegebenen Optionen zu starten, oder die Aktion zum Beenden einer vorhandenen Defragmentierungsaufgabe wird ausgeführt.

Bei einem Fehler wird die angeforderte Aktion zum Starten oder Beenden eines Onlinedefragmentierungsauftrags nicht ausgeführt. Es treten keine weiteren Nebeneffekte auf.

Bemerkungen

Die Onlinedefragmentierung wird sowohl durch eine Parametereinstellung als auch durch diese API gesteuert. Der Standardwert des Systemparameters ist JET_OnlineDefragAll. Dies bedeutet, dass die Defragmentierung für alle unterstützten Datenstrukturen aktiviert ist. Bei Verwendung von JetSetSystemParameterist es jedoch möglich, die Onlinedefragmentierung zu deaktivieren oder sie selektiv nur für Datenbankspeicherplatzstrukturen, nur Datenbanken, nur Streamingdateien oder eine beliebige Kombination dieser Optionen zu aktivieren. Wenn die Systemeinstellung für die Onlinedefragmentierung auf eine veraltete Einstellung festgelegt ist, behandelt JetDefragment die Einstellung als JET_OnlineDefragAll.

Es kann höchstens eine Aufgabe für jede Datenbank ausgeführt werden. Die Aufgabe wird als Thread im Prozess ausgeführt, der ESE hostet.

Die Sitzung, die zum Starten des Onlinedefragmentierungstasks verwendet wird, kann anschließend für Datenbankvorgänge verwendet werden, während der Defragmentierungstask fortgesetzt wird, da der Defragmentierungstask eine eigene Sitzung zuordnet. Die angegebene Sitzung wird nur verwendet, um die Berechtigungen zu überprüfen, die der Startsitzung des Tasks zugeordnet sind, und wird nicht tatsächlich für die Defragmentierungsvorgänge selbst verwendet.

Requirements (Anforderungen)

Anforderung Wert

Client

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

Erfordert Windows Server 2008, Windows Server 2003 oder Windows 2000 Server.

Header

Deklariert in Esent.h.

Bibliothek

Verwenden Sie ESENT.lib.

DLL

Erfordert ESENT.dll.

Unicode

Implementiert als JetDefragmentW (Unicode) und JetDefragmentA (ANSI).

Weitere Informationen

JET_ERR
JET_SESID
JetCompact
JetDefragment2
JetSetSystemParameter
JetStopService