次の方法で共有


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 オブジェクト。

例外

ログ ストアはアーカイブできません。

シーケンスが破棄された後にメソッドが呼び出されました。

アーカイブ スナップショットの作成時に I/O エラーが発生しました。

引数が有効ではありません。

無効な操作が実行されました。

プログラムの実行を継続する十分なメモリがありません。

レコード シーケンスがいっぱいです。

指定のログ ストアへのアクセスは、オペレーティング システムにより拒否されました。

次の例では、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 が、このシーケンスの基本シーケンス番号と最後のシーケンス番号との間にありません。

firstlast を超えています。

無効な操作が実行されました。

アーカイブ スナップショットの作成時に I/O エラーが発生しました。

ログ ストアはアーカイブできません。

シーケンスが破棄された後にメソッドが呼び出されました。

プログラムの実行を継続する十分なメモリがありません。

レコード シーケンスがいっぱいです。

指定のログ ストアへのアクセスは、オペレーティング システムにより拒否されました。

注釈

このメソッドから返されるアーカイブ スナップショットには、基本シーケンス番号またはアーカイブ シーケンス番号のどちらか小さい方から最後のシーケンス番号までの情報が含まれます。 ただし、アーカイブのレコードには、最後のシーケンス番号は含まれません。 また、このメソッドを使用する場合、アーカイブの一貫性を保つには、開始 SequenceNumber を BaseSequenceNumber と同じ値にする必要があります。

適用対象