Freigeben über


JetReadFile-Funktion

Letzte Änderung: Freitag, 27. Februar 2015

Gilt für: Windows | Windows Server

JetReadFile-Funktion

Die JetReadFile -Funktion ruft den Inhalt einer Datei mit JetOpenFilegeöffnet.

JET_ERR JET_API JetReadFile(
  __in          JET_HANDLE hfFile,
  __out         void* pv,
  __in          unsigned long cb,
  __out_opt     unsigned long* pcbActual
);

Parameter

hfFile

Das Handle der Datei, die gelesen werden.

BW

Der Ausgabepuffer, die die Daten empfängt.

CB

Die maximale Größe des Ausgabepuffers in Bytes.

pcbActual

Den tatsächlichen Betrag der abgerufenen Dateidaten empfängt.

Return Value

Diese Funktion gibt den Datentyp der JET_ERR mit einem der folgenden Rückgabecodes. Weitere Informationen zu den möglichen ESE-Fehlern finden Sie unter Extensible Storage Engine-Fehler und Fehler behandeln Parameter.

Rückgabecode

Beschreibung

JET_errSuccess

Der Vorgang wurde erfolgreich abgeschlossen.

JET_errBackupAbortByServer

Der Vorgang ist fehlgeschlagen, da ein Aufruf von JetStopServicedie aktuelle externe Sicherung abgebrochen wurde. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben werden.

JET_errClientRequestToStopJetService

Es ist nicht möglich, um den Vorgang abzuschließen, da alle Aktivitäten in der Instanz dieser Sitzung aufgrund eines Aufrufs von JetStopServiceeingestellt hat.

JET_errInstanceUnavailable

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

JET_errInvalidParameter

Einer der bereitgestellten Parameter einen unerwarteten Wert enthalten oder enthalten einen Wert, der nicht mit dem Wert eines anderen Parameters kombiniert keinen Sinn. Dies kann passieren, für JetReadFile bei:

  • Die angegebene Instanz-Zugriffsnummer ist ungültig. Windows XP und späteren Versionen.

  • Die Ausgabepuffergröße ist kein Vielfaches der Seitengröße der Datenbank (JET_paramDatabasePageSize). Windows XP und späteren Versionen.

  • Die Ausgabepuffergröße ist kleiner als drei Datenbankseiten (JET_paramDatabasePageSize), und dies ist der erste Aufruf von JetReadFile für das angegebene Handle. Windows XP und späteren Versionen.

JET_errNoBackup

Der Vorgang ist fehlgeschlagen, da keine externe Sicherung ausgeführt wird.

JET_errNotInitialized

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

JET_errReadVerifyFailure

Der Vorgang ist fehlgeschlagen, da beim Lesen einer Datenbankseite aus einer Datenbankdatei oder Patch-Datenbankdatei nicht wiederherstellbaren Datenbeschädigung erkannt wurde.

JET_errLogReadVerifyFailure

Der Vorgang ist fehlgeschlagen, da beim Lesen einer Transaktionsprotokolldatei nicht wiederherstellbaren Datenbeschädigung erkannt wurde. Dieser Fehler wird nur von Windows XP und späteren Versionen zurückgegeben werden.

JET_errRestoreInProgress

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

JET_errRunningInMultiInstanceMode

Der Vorgang ist fehlgeschlagen, da versucht wurde, verwenden Sie die Engine im legacy-Modus (Windows 2000-Kompatibilitätsmodus), wird nur eine einzige Instanz unterstützt, wenn tatsächlich mehrere Instanzen vorhanden.

JET_errTermInProgress

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

Bei Erfolg wird in den Ausgabepuffer des nächsten Datenblocks aus der Datei gelesen werden. Die tatsächliche Anzahl von Bytes abgerufen wird auch zurückgegeben werden. Die Datei-offset, an der der nächste Lesevorgang stattfindet, wird um diesen Betrag versetzt werden.

Bei einem Fehler ist der Zustand des Ausgabepuffers undefiniert. Der Fehler führt zu den Abbruch der gesamten backup-Prozess für die Instanz. Unter Windows XP und späteren Versionen wird die Sicherung nicht abgebrochen werden, wenn ein beim Lesen einer Datei Fehler. Allerdings die Sicherung dieser Datenbankdatei noch abgebrochen, und das zugehörige Handle automatisch geschlossen.

Anmerkungen

Jeder Aufruf von JetReadFile mit, dass ein Handle, der bereits alle Daten in der zugrunde liegenden Datei zurückgegeben wurde (z. B. ein vorherigen Aufruf weniger Bytes als die Größe des Ausgabepuffers zurückgegeben) wird immer erfolgreich ausgeführt, aber es gibt NULL Bytes der Daten zurück.

Ein großen Ausgabepuffer sollte verwendet werden, um backup-Performance zu optimieren. Hierbei müssen den richtigen Kompromiss zwischen Ressourcenverbrauch und den Durchsatz für eine bestimmte Situation zu finden. Der Ausgabepuffer muss in jedem Fall nicht weniger als 64 KB wird.

Mehrere gleichzeitige Aufrufe von JetReadFile mit der gleichen Datei-Handle werden nicht unterstützt. Dies bedeutet, dass es nicht möglich, in die Warteschlange mehrere Puffer zum Lesen gleichzeitig auf dieselbe Datei, hohen sequenziellen Durchsatz zu erreichen. Ein großer Puffer sollte stattdessen verwendet werden.

Wenn die Instanz so konfiguriert ist, dass Datenbank Seite Bereinigen aktiviert ist (Siehe JET_paramZeroDatabaseDuringBackup in den Systemparametern) gelöscht Daten werden als Nebenwirkung eines Aufrufs von JetReadFile für die Datenbankdatei aus der Datenbank entfernt.

Es ist sehr wichtig zu verstehen, wie Backup und Korruption interagieren. Wenn Datenbankmodul Beschädigung von Daten während einer Sicherung erkennt, dann wird es nicht entweder die Sicherung der betroffenen Datenbank oder der gesamten Instanz. Dies ist eine bewusste Entwicklungsentscheidung zum Schutz vor Datenverlust bestimmt. Wenn das Datenbankmodul eine Sicherung erfolgreich ausgeführt werden kann, wo die Datenbeschädigung vorhanden war zulässig ist möglich, dass eine ältere, unbeschädigte Sicherung daher verworfen werden kann. Dies wäre schlecht, da es möglich wäre, beheben die Beschädigung von Daten auf die aktive Instanz von dieser Sicherung wiederherstellen und alle Transaktionsprotokolldateien für diese Datenbank wiedergeben. Diese Null Datenverlust wird davon ausgegangen, dass die zirkuläre Protokollierung nicht aktiviert ist (siehe JET_paramCircularLog in Den Systemparametern).

Es ist auch wichtig zu verstehen, dass bei Datenbeschädigung streaming-Sicherung der wahrscheinlich Ort sein wird, dass er zuerst erkannt werden. Dies ist der Fall, da die streaming-Sicherung der einzige Prozess ist, der jede einzelne Seite der Datenbankdatei regelmäßig scannt. Auch ist es wahrscheinlich, dass die streaming-Sicherung der erste Prozess frühen Anzeichen eines Hardwarefehlers erkennt, sobald durch unterbrochene von Datenbeschädigungsfehlern manifestiert werden. Dies ist auf die Menge der Daten, die abgerufen, indem die Sicherung als auch die Geschwindigkeit, mit der sie abgerufen werden.

Beschädigung von Daten wird vom Datenbankmodul mithilfe von Block-Prüfsummen erkannt. Diese Prüfsummen sind kurz vor einer Datenbank Seite schreiben, und werden auf einer Datenbankseite zu lesen. Dieses Schema ermöglicht das Datenbankmodul bestimmt, dass Daten, zu einem bestimmten Zeitpunkt beschädigt wurde jedoch bestimmen, dass eine Beschädigung die Datenbank-Engine ist nicht möglich. In der Vergangenheit wurde die vorherrschende Ursache für solche Beschädigungen kommen aus anderen Quellen als der Datenbank-Engine selbst gefunden.

Voraussetzungen

-Client,

Erfordert Windows Vista, Windows XP oder Windows 2000 Professional.

Server

Erfordert WindowsServer 2008, WindowsServer 2003 oder Windows 2000 Server.

Kopfzeile

In Esent.h deklariert.

Library

Verwenden Sie ESENT.lib.

DLL

"ESENT.dll" erfordert.

Siehe auch

JET_ERR
JET_HANDLE
JET_INSTANCE
JetOpenFile
JetStopService
Systemparameter