Todos os produtos
Search
Central de documentação

Object Storage Service:Ativar controle de versão para restauração de dados e controle de versões

Última atualização: Jul 03, 2026

O controle de versão protege dados no nível do bucket ao preservar versões históricas de objetos quando são sobrescritos ou excluídos, permitindo restaurar qualquer objeto para uma versão anterior.

Casos de uso

Use o controle de versão nos seguintes cenários para proteger seus dados.

  • Exclusão acidental de dados

    Como o OSS não possui lixeira, o controle de versão é a principal forma de recuperar dados excluídos acidentalmente.

  • Sobrescrita de arquivos

    Para arquivos modificados com frequência (drives na nuvem, ferramentas colaborativas), o controle de versão permite recuperar qualquer versão anterior.

Observações de uso

  • Faturamento

    O controle de versão em si é gratuito. No entanto, todas as versões de objetos (atuais e históricas) geram custos de armazenamento. Use regras de ciclo de vida para excluir automaticamente versões históricas desnecessárias. Para mais informações, consulte Regras de ciclo de vida. Solicitações e tráfego de download ou restauração de versões históricas também são cobrados. Medição e faturamento.

  • Permissões

    Somente o proprietário do bucket e usuários do Resource Access Management (RAM) com a permissão PutBucketVersioning podem configurar o controle de versão.

  • Recursos mutuamente exclusivos

    Se o controle de versão de um bucket estiver ativado ou suspenso:

    • A regra que proíbe sobrescrita de objetos não entra em vigor. Proibir sobrescrita de objetos.

    • O cabeçalho de solicitação x-oss-forbid-overwrite, usado para impedir que um objeto seja sobrescrito, não entra em vigor durante uploads. Para mais informações, consulte PutObject.

  • Controle de versão e OSS-HDFS

Estados do controle de versão

O controle de versão de um bucket pode estar em um de três estados: Desativado (padrão), Ativado ou Suspenso.

  • Por padrão, o controle de versão está desativado para um bucket. Depois de ativado, o controle de versão não pode retornar ao estado Desativado. Ele só pode ser suspenso.

  • Quando o controle de versão está ativado, o OSS atribui um ID de versão globalmente exclusivo a cada objeto carregado. Operações de objetos com controle de versão ativado.

  • Quando o controle de versão está suspenso, qualquer objeto recém-carregado recebe um ID de versão null. Para mais informações sobre operações de objetos com controle de versão suspenso, consulte Gerenciar objetos em um bucket com controle de versão suspenso.

Nota

Todas as versões de objetos geram custos de armazenamento. Use regras de ciclo de vida para transferir versões para classes de armazenamento de menor custo (como Infrequent Access ou Archive) ou excluir versões históricas desnecessárias. Para mais informações, consulte Reduzir custos de armazenamento com regras de ciclo de vida baseadas na última modificação combinadas com controle de versão.

Proteção de dados

A tabela a seguir descreve como o OSS trata sobrescritas e exclusões em cada estado do controle de versão.

Estado do controle de versão

Sobrescrever um objeto

Excluir um objeto

Desativado

O objeto existente é sobrescrito e não pode ser restaurado. Somente a versão mais recente do objeto pode ser recuperada.

O objeto é excluído permanentemente e não pode ser recuperado.

Ativado

Um novo ID de versão é adicionado ao objeto. As versões históricas não são afetadas.

Um marcador de exclusão é adicionado ao objeto. O marcador de exclusão possui um ID de versão globalmente exclusivo. As versões históricas não são afetadas.

Suspenso

Uma nova versão com o ID null é criada. Essa nova versão sobrescreve qualquer objeto ou marcador de exclusão existente que também tenha um ID de versão null. Todas as outras versões históricas (com IDs exclusivos) são preservadas.

Um marcador de exclusão com ID de versão null é criado para o objeto.

Se já existir uma versão histórica do objeto ou um marcador de exclusão com ID de versão null, ele será sobrescrito pelo novo marcador de exclusão. Outras versões do objeto ou marcadores de exclusão que não possuem um ID de versão null não são afetados.

Os exemplos a seguir com figuras mostram como o OSS trata uploads e exclusões de mesmo nome quando o controle de versão está ativado ou suspenso. Os números de versão foram abreviados para simplificação.

  • Operações de sobrescrita de objetos com controle de versão ativado

    Ao carregar repetidamente um objeto em um bucket com controle de versão ativado, cada operação de upload cria uma nova versão do objeto com um ID de versão exclusivo.

    1

  • Operações de exclusão de objetos com controle de versão ativado

    Ao excluir um objeto de um bucket com controle de versão ativado, as versões históricas são preservadas. O OSS adiciona um marcador de exclusão como versão atual. Carregar um objeto com o mesmo nome cria uma nova versão com um novo ID de versão.

    2

  • Operações de sobrescrita de objetos com controle de versão suspenso

    Ao carregar um objeto em um bucket com controle de versão suspenso, as versões históricas são mantidas. O objeto recém-carregado se torna a versão atual e recebe um ID de versão null. Se você carregar um objeto com o mesmo nome novamente, o novo objeto sobrescreve a versão anterior que tem um ID de versão null.

    3

  • Operações de exclusão de objetos com controle de versão suspenso

    Ao excluir um objeto de um bucket com controle de versão suspenso, as versões históricas não são fisicamente excluídas. Em vez disso, o OSS cria um marcador de exclusão, que se torna a versão atual do objeto.

    4

Em ambos os estados, as operações de sobrescrita e exclusão preservam as versões históricas, permitindo restaurar qualquer objeto para uma versão anterior.

Ativar controle de versão

Usar o console do OSS

Quando o controle de versão está ativado para um bucket, o OSS especifica um ID exclusivo para cada versão de um objeto armazenado no bucket.

  • Ative o controle de versão ao criar um bucket.

    1. Faça login no console do OSS.

    2. Clique em Buckets e depois clique em Create Bucket.

    3. Na página Create Bucket, configure os parâmetros.

      Na seção Versioning, defina a opção Versioning como On. Por padrão, esse recurso está Off. Para mais informações sobre outros parâmetros, consulte Criar buckets.

    4. Clique em Create.

  • Ative o controle de versão para um bucket existente.

    1. No painel de navegação à esquerda, clique em Buckets. Na página Buckets, localize e clique no bucket desejado.

    2. No painel de navegação à esquerda, escolha Content Security > Versioning.

    3. Na página Versioning, clique em Enable Now.

    4. Na caixa de diálogo exibida, clique em Confirm On.

Após ativar o controle de versão, na página Objects, clique em Show ao lado de Previous Versions para visualizar todas as versões dos arquivos. Para ver apenas as versões atuais dos arquivos, clique em Hide ao lado de Previous Versions. Ocultar versões anteriores não melhora o desempenho da listagem de arquivos. Se a página responder lentamente ao listar arquivos, consulte Velocidade de resposta lenta para solucionar o problema.

Usar SDKs do Alibaba Cloud

Os exemplos a seguir mostram como ativar o controle de versão usando vários SDKs. Introdução aos SDKs.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Set the endpoint. Use China (Hangzhou) as an example. Set the endpoint to the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Specify the region where the bucket is located, for example, cn-hangzhou.
        String region = "cn-hangzhou";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Explicitly declare that the V4 signature algorithm is used.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Enable versioning.
            BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
            configuration.setStatus(BucketVersioningConfiguration.ENABLED);
            SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
            ossClient.setBucketVersioning(request);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Set the endpoint. Use Hangzhou as an example. Set the endpoint to the actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

try {
    // Enable versioning.
    $ossClient->putBucketVersioning($bucket, "Enabled");
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require("ali-oss");

const client = new OSS({
  // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
  region: "oss-cn-hangzhou",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Specify the bucket name, for example, examplebucket.
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // Enable versioning.
  const status = "Enabled";
  const result = await client.putBucketVersioning("examplebucket", status);
  console.log(result);
}
putBucketVersioning();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketVersioningConfig
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint based on the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Set yourBucketName to the name of the bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# Create a bucket versioning configuration.
config = BucketVersioningConfig()
# Enable versioning.
config.status = oss2.BUCKET_VERSIONING_ENABLE

result = bucket.put_bucket_versioning(config)
# View the HTTP status code.
print('http response code:', result.status)
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket.
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();

// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;

// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Set the versioning status of the bucket to Enabled.
    client.SetBucketVersioning(new SetBucketVersioningRequest(bucketName, VersioningStatus.Enabled));
    Console.WriteLine("Create bucket Version succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Create bucket Version failed. {0}", ex.Message);
}
package main

import (
  "fmt"
  "os"

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance.
    // Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Set the endpoint to the actual endpoint.
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // Create a bucket.
  // Set yourBucketName to the name of the bucket.
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // The following code provides an example of how to set the versioning state of a bucket to Enabled.
  config := oss.VersioningConfig{Status: "Enabled"}
  err = client.SetBucketVersioning("yourBucketName", config)
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize OSS account information. */

    /* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the bucket name, for example, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* Create a bucket versioning configuration and set the status to Enabled. */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Enabled);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Usar a interface de linha de comando ossutil

Use o ossutil para definir o estado do controle de versão de um bucket. Para obter informações sobre como instalar o ossutil, consulte Instalar ossutil.

O comando a seguir ativa o controle de versão para um bucket especificado.

ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Enabled\"}"

Para mais informações sobre este comando, consulte put-bucket-versioning.

Suspender controle de versão

Se uma política de retenção estiver ativada para um bucket, não é possível alterar o estado do controle de versão de Ativado para Suspenso. No entanto, é possível alterar o estado de Suspenso para Ativado.

Usar o console do OSS

É possível suspender o controle de versão de um bucket versionado para impedir que o OSS gere novas versões para objetos. Se uma nova versão for gerada para um objeto em um bucket com controle de versão suspenso, o OSS define o ID da nova versão como null e mantém as versões anteriores do objeto.

Para suspender o controle de versão de um bucket, execute as etapas a seguir:

  1. No painel de navegação à esquerda, clique em Buckets. Na página Buckets, localize e clique no bucket desejado.

  2. No painel de navegação à esquerda, escolha Content Security > Versioning.

  3. Na página Versioning, clique em Suspend.

  4. Na caixa de diálogo exibida, clique em OK.

Usar SDKs do Alibaba Cloud

Os exemplos a seguir mostram como suspender o controle de versão usando SDKs comuns. Introdução aos SDKs.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Set the endpoint. Use China (Hangzhou) as an example. Set the endpoint to the actual endpoint.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Specify the region where the bucket is located, for example, cn-hangzhou.
        String region = "cn-hangzhou";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the bucket name, for example, examplebucket.
        String bucketName = "examplebucket";

        // Create an OSSClient instance.
        // When the OSSClient instance is no longer used, call the shutdown method to release resources.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Explicitly declare that the V4 signature algorithm is used.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Suspend versioning.
            BucketVersioningConfiguration configuration = new BucketVersioningConfiguration();
            configuration.setStatus(BucketVersioningConfiguration.SUSPENDED);
            SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
            ossClient.setBucketVersioning(request);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\OssClient;
use OSS\Core\OssException;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// Set the endpoint. Use Hangzhou as an example. Set the endpoint to the actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "yourBucketName";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);

try {
    // Suspend versioning.
    $ossClient->putBucketVersioning($bucket, "Suspended");
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require("ali-oss");

const client = new OSS({
  // Specify the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the region to oss-cn-hangzhou.
  region: "oss-cn-hangzhou",
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Specify the bucket name, for example, examplebucket.
  bucket: "examplebucket",
});

async function putBucketVersioning() {
  // Suspend versioning.
  const status = "Suspended";
  const result = await client.putBucketVersioning("examplebucket", status);
  console.log(result);
}
putBucketVersioning();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import BucketVersioningConfig
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Specify the endpoint based on the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
# Set yourBucketName to the name of the bucket.
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'yourBucketName')

# Create a bucket versioning configuration.
config = BucketVersioningConfig()
# Suspend versioning.
config.status = oss2.BUCKET_VERSIONING_SUSPEND

result = bucket.put_bucket_versioning(config)
# View the HTTP status code.
print('http response code:', result.status)
using Aliyun.OSS;
// Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the bucket name, for example, examplebucket.
var bucketName = "examplebucket";
// Initialize the OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // Set the versioning state of the bucket to Suspended.
    client.SetBucketVersioning(new SetBucketVersioningRequest(bucketName, VersioningStatus.Suspended));
    Console.WriteLine("Create bucket Version succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Create bucket Version failed. {0}", ex.Message);
}
package main

import (
  "fmt"
  "os"

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
    // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance.
    // Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Set the endpoint to the actual endpoint.
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // Create a bucket.
  // Set yourBucketName to the name of the bucket.
  err = client.CreateBucket("yourBucketName")
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // Suspend versioning.
  config := oss.VersioningConfig{Status: "Suspended"}
  err = client.SetBucketVersioning("yourBucketName", config)
  if err != nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize OSS account information. */

    /* Set yourEndpoint to the endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Specify the bucket name, for example, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    /* Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* Create a bucket versioning configuration and set the status to Suspended. */
    SetBucketVersioningRequest setrequest(BucketName, VersioningStatus::Suspended);
    auto outcome = client.SetBucketVersioning(setrequest);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketVersioning fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Usar a interface de linha de comando ossutil

Use o ossutil para definir o estado do controle de versão de um bucket. Para obter informações sobre como instalar o ossutil, consulte Instalar ossutil.

O comando a seguir suspende o controle de versão para um bucket especificado.

ossutil api put-bucket-versioning --bucket examplebucket --versioning-configuration "{\"Status\":\"Suspended\"}"

Para mais informações sobre este comando, consulte put-bucket-versioning.

Visualizar versões

Use o ossutil para visualizar todas as versões de um objeto. Para obter informações sobre como instalar o ossutil, consulte Instalar ossutil.

O comando a seguir lista informações sobre todas as versões de todos os objetos no bucket examplebucket.

ossutil api list-object-versions --bucket examplebucket

Para mais informações sobre este comando, consulte list-object-versions.

Restaurar uma versão

Usar o console do OSS

Ao excluir um objeto de um bucket com controle de versão ativado, as versões históricas são preservadas e um marcador de exclusão se torna a versão atual. É possível restaurar uma versão anterior no console.

  1. No painel de navegação à esquerda, clique em Buckets. Na página Buckets, localize e clique no bucket desejado.

  2. No painel de navegação à esquerda, escolha Object Management > Objects.

  3. Clique em Show ao lado de Previous Versions.

  4. Selecione a versão que deseja restaurar e clique em Restore na parte inferior da página.

  5. Na caixa de diálogo exibida, clique em OK.

Usar a interface de linha de comando ossutil

Use o ossutil para restaurar uma versão histórica de um arquivo excluído. Para obter informações sobre como instalar o ossutil, consulte Instalar ossutil.

O comando a seguir restaura o objeto example.txt no bucket examplebucket para a versão 123.

ossutil revert oss://examplebucket/example.txt 123

Para mais informações sobre este comando, consulte revert.

Operações de API relacionadas

As operações acima são implementadas com base em operações de API. Se o seu programa tiver requisitos de personalização elevados, chame diretamente as operações da API REST. Observe que é necessário escrever código manualmente para calcular assinaturas. Para mais informações, consulte PutBucketVersioning.

Trabalhar com políticas de retenção

Em cenários como proteção de backup (Veeam), rastreamento de alterações de ativos (diagramas de circuitos) ou arquivamento por conformidade (finanças), pode ser necessário permitir atualizações de dados mantendo todas as versões históricas imutáveis. Ative tanto o controle de versão quanto uma política de retenção: o controle de versão preserva as versões históricas em caso de sobrescrita ou exclusão, e a política de retenção impede que qualquer versão seja excluída ou modificada durante o período de proteção.

O controle de versão e as políticas de retenção funcionam juntos com base nos seguintes princípios:

  • Ordem de ativação dos recursos: É possível ativar o controle de versão e as políticas de retenção em qualquer ordem.

  • Configurações permitidas:

    • Política de retenção + Controle de versão desativado

    • Política de retenção + Controle de versão ativado

  • Restrições:

    • Não é possível ativar uma política de retenção para um bucket cujo controle de versão esteja suspenso.

    • Depois que uma política de retenção é ativada, as seguintes restrições se aplicam ao estado do controle de versão:

      • Não é possível alterar o estado de Ativado para Suspenso.

      • Não é possível alterar o estado de Desativado para Suspenso.

  • Mecanismo de proteção de versões de objetos:

    • A política de retenção protege todas as versões de um objeto. Nenhuma versão pode ser excluída ou modificada durante o período de proteção.

    • É possível carregar um objeto com o mesmo nome para criar uma nova versão, mas a nova versão também fica protegida pela política de retenção.

    • A política de retenção não se aplica a marcadores de exclusão. A limpeza de marcadores de exclusão não é restringida pela política de retenção.

  • Interação com replicação de dados:

    • Os buckets de origem e de destino suportam configurações independentes para controle de versão e políticas de retenção.

    • As informações de versão são transferidas normalmente durante a replicação. O bucket de destino gerencia as versões com base em sua própria configuração.

    • A tentativa de excluir uma versão replicada no bucket de destino falhará se ela estiver protegida por uma política de retenção, mas terá êxito após a expiração da política.

Referências