Удаление и восстановление большого двоичного объекта с помощью .NET

В этой статье приводятся сведения об удалении и восстановлении больших двоичных объектов с помощью клиентской библиотеки службы хранилища Azure для .NET. Если вы включили обратимое удаление для больших двоичных объектов, вы можете восстановить удаленные BLOB-объекты в течение периода хранения.

Предварительные требования

Удаление большого двоичного объекта

Чтобы удалить большой двоичный объект, вызовите один из следующих методов:

В следующем примере выполняется удаление большого двоичного объекта:

public static async Task DeleteBlobAsync(BlobClient blob)
{
    await blob.DeleteAsync();
}

Если большой двоичный объект имеет связанные моментальные снимки, необходимо удалить все его моментальные снимки, чтобы удалить большой двоичный объект. В следующем примере выполняется удаление большого двоичного объекта и его моментальных снимков:

public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
    // Delete a blob and all of its snapshots
    await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);

    // Delete only the blob's snapshots
    //await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}

Чтобы удалить только моментальные снимки, а не сам BLOB-объект, можно передать параметр DeleteSnapshotsOption.OnlySnapshots.

Восстановление удаленного BLOB-объекта

Обратимое удаление защищает BLOB-объект и его версии, а также моментальные снимки и метаданные от случайного удаления или перезаписи, сохраняя удаленные данные в системе в течение заданного периода времени. В течение срока хранения BLOB-объект можно восстановить до его состояния на момент удаления. По истечении срока хранения BLOB-объект удаляется окончательно. Дополнительные сведения об обратимом удалении BLOB-объектов см. в статье Обратимое удаление BLOB-объектов.

Клиентские библиотеки службы хранилища Azure позволяют восстановить обратимо удаленный BLOB-объект или моментальный снимок.

Способ восстановления обратимо удаленного BLOB-объекта зависит от того, включена ли в вашей учетной записи хранения управление версиями BLOB-объектов. Дополнительные сведения об управлении версиями BLOB-объектов см. в статье Управление версиями BLOB-объектов. В зависимости от сценария ознакомьтесь с одним из следующих разделов:

Восстановление обратимо удаленных объектов, если управление версиями отключено

Чтобы восстановить удаленные большие двоичные объекты, если не используется управление версиями, вызовите один из следующих методов.

Эти методы восстанавливают обратимо удаленные большие двоичные объекты и связанные с ними удаленные моментальные снимки. Вызов любого из этих методов для большого двоичного объекта, который не был удален, не выполняет никаких действий. В следующем примере восстанавливаются все обратимо удаленные большие двоичные объекты и их моментальные снимки в контейнере.

public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
    foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
    {
        await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
    }
}

Чтобы восстановить определенный обратимо удаленный моментальный снимок, сначала вызовите операцию Undelete или UndeleteAsync для базового BLOB-объекта, а затем скопируйте необходимый моментальный снимок в базовый BLOB-объект. В следующем примере блочный BLOB-объект восстанавливается до недавно созданного моментального снимка.

public static async Task RestoreSnapshotsAsync(
    BlobContainerClient container,
    BlobClient blob)
{
    // Restore the deleted blob
    await blob.UndeleteAsync();

    // List blobs in this container that match prefix
    // Include snapshots in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Snapshots,
        prefix: blob.Name);

    // Get the URI for the most recent snapshot
    BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
    {
        Snapshot = blobItems
            .OrderByDescending(snapshot => snapshot.Snapshot)
            .ElementAtOrDefault(0)?.Snapshot
    };

    // Restore the most recent snapshot by copying it to the blob
    await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}

Восстановление обратимо удаленных BLOB-объектов при включенном управлении версиями

Если учетная запись хранения настроена для включения управления версиями BLOB-объектов, удаление большого двоичного объекта приведет к тому, что текущая версия большого двоичного объекта станет предыдущей. Чтобы восстановить обратимо удаленный BLOB-объект при включении управления версиями, скопируйте предыдущую версию в основной BLOB-объект. Для этого можно использовать один из следующих методов:

В следующем примере кода показано, как получить последнюю версию удаленного большого двоичного объекта и восстановить последнюю версию, скопировав ее в базовый BLOB-объект:

public static void RestoreBlobWithVersioning(
    BlobContainerClient container,
    BlobClient blob)
{
    // List blobs in this container that match prefix
    // Include versions in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Version,
        prefix: blob.Name);

    // Get the URI for the most recent version
    BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
    {
        VersionId = blobItems.
            OrderByDescending(version => version.VersionId).
            ElementAtOrDefault(0)?.VersionId
    };

    // Restore the most recently generated version by copying it to the base blob
    blob.StartCopyFromUri(blobVersionUri.ToUri());
}

Ресурсы

Дополнительные сведения об удалении и восстановлении удаленных BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для .NET см. в следующих ресурсах.

Операции REST API

Пакет Azure SDK для .NET содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы .NET. Методы клиентской библиотеки для удаления больших двоичных объектов и восстановления удаленных BLOB-объектов используют следующие операции REST API:

Примеры кода

Ресурсы клиентской библиотеки

См. также раздел