Partilhar via


LogStore.CreateLogArchiveSnapshot Método

Definição

Captura um instantâneo do estado do repositório de log necessário fazer um backup.

Sobrecargas

CreateLogArchiveSnapshot()

Captura um instantâneo do estado do repositório de log para fazer um backup.

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Captura um instantâneo do estado do repositório de log entre os números de sequência especificado para fazer um backup.

CreateLogArchiveSnapshot()

Captura um instantâneo do estado do repositório de log para fazer um backup.

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

Retornos

Um objeto LogArchiveSnapshot que contém o estado necessário para criar um arquivo morto.

Exceções

O repositório de log não pode ser arquivado.

O método foi chamado depois que a sequência foi descartada.

Ocorrerá um erro de E/S ao criar o instantâneo do arquivo.

Um argumento não é válido.

Uma operação inválida foi executada.

Não há memória suficiente para continuar a execução de um programa.

A sequência de registros está cheia.

O acesso ao repositório de log especificado é negado pelo sistema operacional.

Exemplos

O exemplo a seguir mostra como arquivar um LogStore em um documento XML.

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

Aplica-se a

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Captura um instantâneo do estado do repositório de log entre os números de sequência especificado para fazer um backup.

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

Parâmetros

first
SequenceNumber

O número de sequência inicial no intervalo para arquivar.

last
SequenceNumber

O número de sequência final no intervalo para arquivar.

Retornos

Um objeto LogArchiveSnapshot que contém o estado necessário para criar um arquivo morto.

Exceções

first ou last não está entre os números de base e de última sequência dessa sequência.

first é maior que last.

Uma operação inválida foi executada.

Ocorrerá um erro de E/S ao criar o instantâneo do arquivo.

O repositório de log não pode ser arquivado.

O método foi chamado depois que a sequência foi descartada.

Não há memória suficiente para continuar a execução de um programa.

A sequência de registros está cheia.

O acesso ao repositório de log especificado é negado pelo sistema operacional.

Comentários

O arquivo instantâneo retornado desse método abrange informações do número de sequência base ou do número de sequência de arquivos, o que for menor, até o último número de sequência. Ele não é inclusivo para o último número de sequência, o que significa que o arquivo morto inclui apenas registros até, mas não incluindo por último. Além disso, ao usar esse método, o SequenceNumber inicial deve ser igual ao BaseSequenceNumber para que o arquivo seja consistente.

Aplica-se a