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 geschieht, um das Datenbankwachstum zu begrenzen, indem vorhandene Datenträgerzuweisungen effizienter innerhalb der Datenbank verwendet werden. Außerdem kann die Arbeitsmenge reduziert werden, indem sichergestellt wird, dass Daten genauer verpackt sind. Schließlich kann die Anwendungsleistung verbessert werden, indem gemeinsame Vorgänge durch bessere Datenorganisation beschleunigt werden.
Die Datenbankdefragmentierung ist ein Onlinevorgang und unterbrochen keine reguläre Datenbankaktivität, z. B. Abfragevorgänge oder Datenupdates. JetDefragment macht auch keine Kopie aller vorhandenen Daten. Stattdessen wird eine Datenbank defragiert. Zuletzt stellt JetDefragment den internen Datenbankspeicher für die erneute Verwendung wieder her, stellt jedoch keinen übermäßigen Speicherplatz für das Betriebssystemdateisystem bereit.
Das resultierende Format der Daten kann viel effizienter sein, ist aber im Allgemeinen nicht optimal. Die Defragmentierung ist beschränkt auf das Freigeben von Datenbankseiten für die erneute Verwendung, die Daten enthalten, die bereits logisch gelöscht wurden. Die Defragmentierung stellt auch Datenbankseiten für die erneute Verwendung in einigen Fällen zur Verfügung, indem Daten aus zwei Seiten kombiniert werden, wenn sie auf eine einzelne Seite passen können.
Dieser Vorgang unterscheidet sich von JetCompact , der eine Kopie einer schreibgeschützten Datenbank in ein sehr optimales Formular macht.
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 Online-Defragmentierungsaufgabe legt dieser Eingabeparameter die maximale Anzahl der Defragmentierungsübergänge fest. Beim Beenden einer Onlinedefragmentierungsaufgabe wird dieser Ausgabepuffer auf die Anzahl der übergebenen Übergeben festgelegt.
Wenn dieser Parameter auf NULL festgelegt ist, ist die Anzahl der Onlinedefragmentierungsübergänge unbegrenzt.
pcSeconds
Beim Starten einer Online-Defragmentierungsaufgabe legt dieser Eingabeparameter die maximale Zeit für die Defragmentierung fest. Beim Beenden einer Onlinedefragmentierungsaufgabe 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 verweist, ist die maximale Zeit für die Defragmentierung unbegrenzt.
grbit
Eine Gruppe von Bits, die null oder mehr der folgenden Optionen angeben.
Wert |
Bedeutung |
---|---|
JET_bitDefragmentAvailSpaceTreesOnly |
Defragmentiert den verfügbaren Speicherplatzteil der ESE-Datenbankspeicherzuweisung. Der Datenbankraum wird in zwei Typen unterteilt, besitzeigener Speicherplatz und verfügbarer Speicherplatz. Der Besitzbereich wird einer Tabelle oder einem Index zugewiesen, während der verfügbare Speicherplatz für die Verwendung innerhalb der Tabelle oder des Indexes bereit ist. Der verfügbare Speicherplatz ist viel dynamischer im Verhalten und erfordert die On-Line-Defragmentierung mehr als den Besitz von Leerzeichen 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 Modulfehler 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 Instanz, die der Sitzung zugeordnet ist, aufgrund eines Aufrufs von JetStopService beendet wurde. |
JET_errDatabaseFileReadOnly |
Die für die Defragmentierung ausgewählte Datenbank ist schreibgeschützt und kann nicht auf beliebige Weise aktualisiert werden, einschließlich Defragmentierung. |
JET_errDistributedTransactionAlreadyPreparedToCommit |
Die angegebene Sitzung befindet sich in der vorbereitungsbereiten Commit-Status und kann erst beginnen, wenn die aktuelle Transaktion übernommen oder zurückgesetzt wird. |
JET_errInstanceUnavailable |
Es ist nicht möglich, den Vorgang abzuschließen, da die Instanz, die der Sitzung zugeordnet ist, einen tödlichen 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 instanz, die der Sitzung zugeordnet ist, noch nicht initialisiert wurde. |
JET_errRestoreInProgress |
Es ist nicht möglich, den Vorgang abzuschließen, da ein Wiederherstellungsvorgang in Der Instanz ausgeführt wird, die der Sitzung zugeordnet ist. |
JET_errSessionSharingViolation |
Die gleiche Sitzung kann nicht gleichzeitig für mehrere Thread 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 Instanz, die der Sitzung zugeordnet ist, heruntergefahren wird. |
JET_errTransReadOnly |
Die angegebene Sitzung verfügt nur über schreibgeschützte Berechtigungen und kann keine Aufgabe starten, die ein Update ausführen kann, einschließlich Defragmentierung. |
JET_errVersionStoreOutOfMemory |
Dieser Fehler tritt auf, wenn die konfigurierte Größe des Versionsspeichers nicht ausreichend ist, um alle ausstehenden Updates zu halten. |
JET_wrnDefragAlreadyRunning |
Die option JET_bitDefragmentBatchStart wurde übergeben, aber eine Defragmentierungsaufgabe wird bereits in der angegebenen Datenbank defragmentiert. |
JET_wrnDefragNotRunning |
Die option JET_bitDefragmentBatchStop wurde übergeben, aber es wird derzeit keine Defragmentierungsaufgabe ausgeführt. |
Bei Erfolg wird die angeforderte Aktion zum Starten einer Defragmentierungsaufgabe für eine bestimmte Daten mit bestimmten Optionen ausgeführt, oder die Aktion zum Beenden einer vorhandenen Defragmentierungsaufgabe wird ausgeführt.
Fehler beim Starten oder Beenden eines Online-Defragmentierungsauftrags ist nicht abgeschlossen. Es treten keine anderen Nebenwirkungen auf.
Bemerkungen
Die Online-Defragmentierung wird sowohl durch eine Parametereinstellung als auch durch diese API gesteuert. Der Standardparameterwert ist JET_OnlineDefragAll, was bedeutet, dass die Defragmentierung für alle unterstützten Datenstrukturen aktiviert ist. Mithilfe von JetSetSystemParameter ist es jedoch möglich, die Onlinedefragmentierung zu deaktivieren oder sie selektiv für Datenbankraumbäume zu aktivieren, nur Datenbanken, nur Streamingdateien oder eine beliebige Kombination dieser Optionen. Wenn die Systemeinstellung für die Onlinedefragmentierung auf eine veraltete Einstellung festgelegt ist, behandelt JetDefragment die Einstellung als JET_OnlineDefragAll.
Es kann maximal eine Aufgabe für jede Datenbank ausgeführt werden. Die Aufgabe wird als Thread im Prozess gehostete ESE ausgeführt.
Die Sitzung, die zum Starten der Onlinedefragmentierungsaufgabe verwendet wird, kann anschließend für Datenbankvorgänge verwendet werden, während die Defragmentierungsaufgabe fortgesetzt wird, da die Defragmentierungsaufgabe eine eigene Sitzung zuordnet. Die angegebene Sitzung wird nur verwendet, um die Berechtigungen zu überprüfen, die der Vorgangsstartsitzung zugeordnet sind und nicht tatsächlich für die Defragmentierungsvorgänge selbst verwendet werden.
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. |
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