Freigeben über


LogStore.CreateLogArchiveSnapshot Methode

Definition

Nimmt eine Momentaufnahme des Protokollspeicherzustands auf, der zum Erstellen einer Sicherungskopie erforderlich ist.

Überlädt

CreateLogArchiveSnapshot()

Nimmt zum Erstellen einer Sicherung eine Momentaufnahme des Protokollspeicherzustands auf.

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Nimmt zum Erstellen einer Sicherungskopie eine Momentaufnahme des Protokollspeicherzustands zwischen den angegebenen Sequenznummern auf.

CreateLogArchiveSnapshot()

Nimmt zum Erstellen einer Sicherung eine Momentaufnahme des Protokollspeicherzustands auf.

public:
 System::IO::Log::LogArchiveSnapshot ^ CreateLogArchiveSnapshot();
public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot ();
member this.CreateLogArchiveSnapshot : unit -> System.IO.Log.LogArchiveSnapshot
Public Function CreateLogArchiveSnapshot () As LogArchiveSnapshot

Gibt zurück

Ein LogArchiveSnapshot-Objekt, das den zum Erstellen eines Archivs erforderlichen Zustand enthält.

Ausnahmen

Der Protokollspeicher kann nicht archiviert werden.

Die Methode wurde aufgerufen, nachdem die Sequenz verworfen wurde.

Ein E/A-Fehler tritt auf, wenn die Archivmomentaufnahme erstellt wird.

Ein Argument ist ungültig.

Eine ungültige Operation wurde ausgeführt.

Der Arbeitsspeicher reicht nicht aus, um die Ausführung eines Programms fortzusetzen.

Die Datensatzsequenz ist voll.

Der Zugriff auf den angegebenen Protokollspeicher wird vom Betriebssystem verweigert.

Beispiele

Das folgende Beispiel zeigt, wie ein LogStore in einem XML-Dokument archiviert wird.

class LogBackup
{
    static void ArchiveToXML(LogStore logStore, string fileName)
    {
        LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();

        XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.ASCII);

        writer.WriteStartElement("logArchive");
        foreach(FileRegion region in snapshot.ArchiveRegions)
        {
            writer.WriteStartElement("fileRegion");
            writer.WriteElementString("path", region.Path);
            writer.WriteElementString("length", region.FileLength.ToString());
            writer.WriteElementString("offset", region.Offset.ToString());
            using(Stream dataStream = region.GetStream())
            {
                byte[] data = new byte[dataStream.Length];
                dataStream.Read(data, 0, data.Length);
                writer.WriteElementString("data", Convert.ToBase64String(data));
            }
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.Close();
        logStore.SetArchiveTail(snapshot.LastSequenceNumber);
    }
    static void RestoreFromXML(string fileName)
    {
        using(XmlTextReader reader = new XmlTextReader(fileName))
        {
            reader.ReadStartElement("logArchive");
            while(reader.IsStartElement())
            {
                string path = reader.ReadElementString("path");
                long length = Int64.Parse(reader.ReadElementString("length"));
                long offset = Int64.Parse(reader.ReadElementString("offset"));
                string dataString = reader.ReadElementString("data");
                byte[] data = Convert.FromBase64String(dataString);
                FileStream fileStream;
                using(fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    fileStream.SetLength(length);
                    fileStream.Position = offset; fileStream.Write(data, 0, data.Length);
                }
            }
        reader.ReadEndElement();
        }
    }
}
Friend Class LogBackup
    Private Shared Sub ArchiveToXML(ByVal logStore As LogStore, ByVal fileName As String)
        Dim snapshot As LogArchiveSnapshot = logStore.CreateLogArchiveSnapshot()

        Dim writer As New XmlTextWriter(fileName, Encoding.ASCII)

        writer.WriteStartElement("logArchive")
        For Each region As FileRegion In snapshot.ArchiveRegions
            writer.WriteStartElement("fileRegion")
            writer.WriteElementString("path", region.Path)
            writer.WriteElementString("length", region.FileLength.ToString())
            writer.WriteElementString("offset", region.Offset.ToString())
            Using dataStream As Stream = region.GetStream()
                Dim data(dataStream.Length - 1) As Byte
                dataStream.Read(data, 0, data.Length)
                writer.WriteElementString("data", Convert.ToBase64String(data))
            End Using
            writer.WriteEndElement()
        Next region
        writer.WriteEndElement()
        writer.Close()
        logStore.SetArchiveTail(snapshot.LastSequenceNumber)

    End Sub
    Private Shared Sub RestoreFromXML(ByVal fileName As String)
        Using reader As New XmlTextReader(fileName)
            reader.ReadStartElement("logArchive")
            Do While reader.IsStartElement()
                Dim path = reader.ReadElementString("path")
                Dim length = Int64.Parse(reader.ReadElementString("length"))
                Dim offset = Int64.Parse(reader.ReadElementString("offset"))
                Dim dataString = reader.ReadElementString("data")
                Dim data() = Convert.FromBase64String(dataString)
                Dim fileStream As FileStream
                fileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
                Using fileStream
                    fileStream.SetLength(length)
                    fileStream.Position = offset
                    fileStream.Write(data, 0, data.Length)
                End Using
            Loop
            reader.ReadEndElement()
        End Using
    End Sub
End Class

Gilt für:

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Nimmt zum Erstellen einer Sicherungskopie eine Momentaufnahme des Protokollspeicherzustands zwischen den angegebenen Sequenznummern auf.

public:
 System::IO::Log::LogArchiveSnapshot ^ CreateLogArchiveSnapshot(System::IO::Log::SequenceNumber first, System::IO::Log::SequenceNumber last);
public System.IO.Log.LogArchiveSnapshot CreateLogArchiveSnapshot (System.IO.Log.SequenceNumber first, System.IO.Log.SequenceNumber last);
member this.CreateLogArchiveSnapshot : System.IO.Log.SequenceNumber * System.IO.Log.SequenceNumber -> System.IO.Log.LogArchiveSnapshot
Public Function CreateLogArchiveSnapshot (first As SequenceNumber, last As SequenceNumber) As LogArchiveSnapshot

Parameter

first
SequenceNumber

Die Startsequenznummer im zu archivierenden Bereich.

last
SequenceNumber

Die Endsequenznummer im zu archivierenden Bereich.

Gibt zurück

Ein LogArchiveSnapshot-Objekt, das den zum Erstellen eines Archivs erforderlichen Zustand enthält.

Ausnahmen

first oder last befindet sich nicht zwischen der Basissequenznummer und der letzten Sequenznummer dieser Sequenz.

first ist größer als last.

Eine ungültige Operation wurde ausgeführt.

Ein E/A-Fehler tritt auf, wenn die Archivmomentaufnahme erstellt wird.

Der Protokollspeicher kann nicht archiviert werden.

Die Methode wurde aufgerufen, nachdem die Sequenz verworfen wurde.

Der Arbeitsspeicher reicht nicht aus, um die Ausführung eines Programms fortzusetzen.

Die Datensatzsequenz ist voll.

Der Zugriff auf den angegebenen Protokollspeicher wird vom Betriebssystem verweigert.

Hinweise

Die von dieser Methode zurückgegebene Archivmomentaufnahme umfasst Informationen von der Basissequenznummer oder der Archivsequenznummer, je nachdem, welcher Wert niedriger ist, bis hin zur letzten Sequenznummer. Die letzte Sequenznummer ist nicht inklusive, das Archiv umfasst also nur Datensätze bis zur und nicht einschließlich der letzten Sequenznummer. Bei der Verwendung dieser Methode muss die Startsequenznummer gleich der Basissequenznummer sein, damit das Archiv konsistent ist.

Gilt für: