LogStore.CreateLogArchiveSnapshot Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Делает моментальный снимок состояния хранилища журналов, необходимого для создания резервной копии.
Перегрузки
CreateLogArchiveSnapshot() |
Делает моментальный снимок состояния хранилища журналов для создания резервной копии. |
CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber) |
Делает моментальный снимок состояния хранилища журналов для указанных порядковых номеров для создания резервной копии. |
CreateLogArchiveSnapshot()
Делает моментальный снимок состояния хранилища журналов для создания резервной копии.
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
Возвращаемое значение
Объект LogArchiveSnapshot, содержащий состояние, необходимое для создания архива.
Исключения
Данное хранилище журналов не может быть архивировано.
Метод был вызван после удаления последовательности.
При создании моментального снимка архива произошла ошибка ввода-вывода.
Аргумент является недопустимым.
Выполнена недопустимая операция.
Недостаточно памяти, чтобы продолжать выполнение программы.
Последовательность записей заполнена.
Доступ к заданному хранилищу журнала запрещен операционной системой.
Примеры
В следующем примере показано, как архивировать хранилище LogStore в документ 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
Применяется к
CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)
Делает моментальный снимок состояния хранилища журналов для указанных порядковых номеров для создания резервной копии.
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
Параметры
- first
- SequenceNumber
Начальный порядковый номер находится в диапазоне для архивирования.
- last
- SequenceNumber
Конечный порядковый номер находится в диапазоне для архивирования.
Возвращаемое значение
Объект LogArchiveSnapshot, содержащий состояние, необходимое для создания архива.
Исключения
Значение параметраfirst
или last
не лежит между основным и последним порядковыми номерами этой последовательности.
Значение first
больше, чем значение last
Выполнена недопустимая операция.
При создании моментального снимка архива произошла ошибка ввода-вывода.
Данное хранилище журналов не может быть архивировано.
Метод был вызван после удаления последовательности.
Недостаточно памяти, чтобы продолжать выполнение программы.
Последовательность записей заполнена.
Доступ к заданному хранилищу журнала запрещен операционной системой.
Комментарии
Моментальный снимок экрана, возвращаемый этим методом, включает сведения, начинающиеся от базового порядкового номера или порядкового номера архива (что меньше) до последнего порядкового номера. Сведения для последнего порядкового номера не включаются, что означает, что архив включает все записи, за исключением последней. Кроме того, при использовании этого метода начальный порядковый номер SequenceNumber должен быть равен порядковому номер BaseSequenceNumber, чтобы архив был согласованным.