JetDefragment-Funktion

Gilt für: Windows | Windows Server

JetDefragment-Funktion

Die JetDefragment-Funktion startet und beendet Datenbankdefragmentierungstasks, die die daten organization innerhalb einer Datenbank verbessern. Dies erfolgt, um das Datenbankwachstum zu begrenzen, indem die vorhandene Datenträgerzuordnung innerhalb der Datenbank effizienter verwendet wird. Es kann auch den Arbeitssatz reduzieren, indem sichergestellt wird, dass die Daten enger gepackt sind. Schließlich kann die Anwendungsleistung verbessert werden, indem allgemeine Vorgänge durch bessere Daten organization beschleunigt werden.

Die Datenbank-Defragmentierung ist ein Onlinevorgang und unterbricht keine reguläre Datenbankaktivität, z. B. Abfragevorgänge oder Datenupdates. JetDefragment macht auch keine Kopie aller vorhandenen Daten. Stattdessen wird eine Datenbank defragmentiert. Schließlich stellt JetDefragment internen Datenbankspeicherplatz zur Wiederverwendung wieder her, gibt jedoch keinen überschüssigen 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 Wiederverwendung beschränkt, die bereits logisch gelöschte Daten enthalten. Durch die Defragmentierung können Datenbankseiten in einigen Fällen auch wiederverwenden, indem Daten aus 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 durchgeführt, die durch die angegebene Datenbank-ID beschrieben wird.

pcPasses

Beim Starten eines Online-Defragmentierungstasks legt dieser Eingabeparameter die maximale Anzahl von Defragmentierungsdurchläufen fest. Beim Beenden eines Onlinedefragmentierungstasks 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 eines Online-Defragmentierungstasks legt dieser Eingabeparameter die maximale Zeit für die Defragmentierung fest. Beim Beenden eines Onlinedefragmentierungstasks wird dieser Ausgabepuffer auf die Dauer festgelegt, die für die Defragmentierung verwendet wird.

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-Datenbankspeicherplatzzuordnung. Der Datenbankspeicherplatz ist in zwei Typen unterteilt: in den eigenen Speicherplatz und den verfügbaren 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 viel dynamischer im Verhalten und erfordert eine Onlinedefragmentierung mehr als eigene Speicherplatz- oder Tabellen- oder Indexdaten.

JET_bitDefragmentBatchStart

Startet einen neuen Defragmentierungstask.

JET_bitDefragmentBatchStop

Beendet einen Defragmentierungstask.

Rückgabewert

Diese Funktion gibt den Datentyp JET_ERR mit einem der folgenden Rückgabecodes zurück. Weitere Informationen zu möglichen ESE-Fehlern finden Sie unter Erweiterbare Speichermodulfehler und Fehlerbehandlungsparameter.

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 instance, die der Sitzung zugeordnet sind, aufgrund eines Aufrufs von JetStopService beendet wurden.

JET_errDatabaseFileReadOnly

Die für die Defragmentierung ausgewählte Datenbank ist schreibbeschützt und kann in keiner Weise aktualisiert werden, einschließlich der Defragmentierung.

JET_errDistributedTransactionAlreadyPreparedToCommit

Die angegebene Sitzung befindet sich im Commit-Zustand vorbereitet und kann erst dann mit neuen Updates beginnen, wenn für die aktuelle Transaktion ein Commit ausgeführt oder ein Rollback ausgeführt wurde.

JET_errInstanceUnavailable

Es ist nicht möglich, den Vorgang abzuschließen, da für die instance, 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 im instance überein.

JET_errNotInitialized

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

JET_errRestoreInProgress

Es ist nicht möglich, den Vorgang abzuschließen, da ein Wiederherstellungsvorgang für die instance 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 instance 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 der 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 wird bereits für die angegebene Datenbank ausgeführt.

JET_wrnDefragNotRunning

Die Option JET_bitDefragmentBatchStop wurde übergeben, aber derzeit wird kein Defragmentierungstask ausgeführt.

Bei Erfolg wird die angeforderte Aktion ausgeführt, entweder einen Defragmentierungstask für eine bestimmte Daten mit den angegebenen Optionen zu starten, oder die Aktion zum Beenden eines vorhandenen Defragmentierungstasks wird ausgeführt.

Bei einem Fehler wird die angeforderte Aktion des Startens oder Beendens eines Online-Defragmentierungsauftrags nicht ausgeführt. Es treten keine anderen Nebenwirkungen 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. Mit JetSetSystemParameter ist es jedoch möglich, die Onlinedefragmentierung zu deaktivieren oder sie selektiv nur für Datenbankbereichsstrukturen, 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.

Für jede Datenbank kann höchstens eine Aufgabe ausgeführt werden. Der Task wird als Thread im Prozess ausgeführt, der ESE hosten soll.

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 Taskstartsitzung zugeordnet sind, und wird nicht für die Defragmentierungsvorgänge selbst verwendet.

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.

Kopfzeile

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