

# Solucionar problemas de versionamento
<a name="troubleshooting-versioning"></a>

Os tópicos a seguir podem ajudar a solucionar alguns problemas comuns de versionamento do Amazon S3.

**Topics**
+ [Quero recuperar objetos que foram excluídos acidentalmente em um bucket com versionamento ativado](#recover-objects)
+ [Quero excluir permanentemente objetos com versionamento](#delete-objects-permanent)
+ [Ocorreu uma degradação do desempenho depois de ativar o versionamento do bucket](#performance-degradation)

## Quero recuperar objetos que foram excluídos acidentalmente em um bucket com versionamento ativado
<a name="recover-objects"></a>

Em geral, quando as versões do objeto são excluídas dos buckets do S3, não há como o Amazon S3 recuperá-las. No entanto, se você habilitou o versionamento do S3 no bucket do S3, uma solicitação `DELETE` que não especifica um ID de versão não pode excluir permanentemente um objeto. Em vez disso, um marcador de exclusão é adicionado como espaço reservado. Esse marcador de exclusão torna-se a versão atual de objeto. 

Para verificar se os objetos excluídos foram excluídos permanentemente ou temporariamente (com um marcador de exclusão em seu lugar), faça o seguinte: 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. No painel de navegação à esquerda, escolha **Buckets**.

1. Na lista **Buckets**, escolha o nome do bucket que contém o objeto.

1. Na lista **Objetos**, ative a opção **Mostrar versões** à direita da barra de pesquisa e, depois, pesquise o objeto excluído na barra de pesquisa. Essa alternância estará disponível somente se o versionamento tiver sido habilitado anteriormente no bucket.

   Você também pode usar o [Inventário do S3 para pesquisar objetos excluídos](storage-inventory.md#storage-inventory-contents).

1. Se você não conseguir encontrar o objeto depois de ativar **Mostrar versões** ou criar um relatório de inventário, e também não conseguir encontrar um [marcador de exclusão](DeleteMarker.md) do objeto, a exclusão será permanente e o objeto não poderá ser recuperado.



Você também pode verificar o status de um objeto excluído usando a operação de API `HeadObject` do AWS Command Line Interface (AWS CLI). Para fazer isso, use o comando `head-object` a seguir e substitua `user input placeholders` por suas próprias informações: 

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html`

Se você executar o comando `head-object` em um objeto com versionamento, cuja versão atual é um marcador de exclusão, você receberá um erro 404 Não encontrado. Por exemplo: 

Ocorreu um erro (404) ao chamar a operação HeadObject: não encontrado

Se você executar o comando `head-object` em um objeto com versionamento e fornecer o ID da versão do objeto, o Amazon S3 recuperará os metadados do objeto, confirmando que ele ainda existe e não foi excluído permanentemente.

`aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

```
{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}
```

Se o objeto for encontrado e a versão mais recente for um marcador de exclusão, a versão anterior do objeto ainda existirá. Como o marcador de exclusão é a versão atual do objeto, você pode recuperá-lo excluindo o marcador de exclusão. 

Depois de remover permanentemente o marcador de exclusão, a segunda versão mais recente do objeto se torna a versão atual dele, tornando-o disponível novamente. Para obter uma descrição visual de como os objetos são recuperados, consulte [Remover marcadores de exclusão](ManagingDelMarkers.md#RemDelMarker).

Para remover uma versão específica de um objeto, você deve ser o proprietário do bucket. Para excluir permanentemente um marcador de exclusão, inclua seu respectivo ID de versão em uma solicitação `DeleteObject`. Para excluir o marcador de exclusão, use o comando a seguir e substitua `user input placeholders` por suas próprias informações: 

****  
`aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID`

Para obter mais informações sobre o comando `delete-object`, consulte [https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html](https://docs.aws.amazon.com//cli/latest/reference/s3api/delete-object.html) na *Referência de comandos da AWS CLI*. Para obter mais informações sobre como excluir permanentemente os marcadores de exclusão, consulte [Gerenciamento de marcadores de exclusão](ManagingDelMarkers.md).

## Quero excluir permanentemente objetos com versionamento
<a name="delete-objects-permanent"></a>

Em um bucket com versionamento, uma solicitação `DELETE` sem um ID de versão não pode excluir permanentemente um objeto. Em vez disso, essa solicitação insere um marcador de exclusão.

Para excluir permanentemente objetos com versionamento, você pode escolher entre os seguintes métodos:
+ Crie uma regra de ciclo de vida do S3 para excluir permanentemente as versões não atuais. Para excluir permanentemente versões não atuais de objetos, selecione **Excluir permanentemente versões não atuais de objetos**, e insira um número em **Dias após os objetos ficarem desatualizados**. Opcionalmente, você pode especificar o número de versões mais recentes a serem retidas inserindo um valor em **Number of newer versions to retain** (Número de versões mais novas a serem mantidas). Para obter mais informações sobre como criar essa regra, consulte [Definir uma configuração de ciclo de vida do S3](how-to-set-lifecycle-configuration-intro.md).
+ Exclua uma versão especificada incluindo o ID da versão na solicitação `DELETE`. Para obter mais informações, consulte [Como excluir permanentemente objetos com versionamento](DeletingObjectVersions.md#delete-request-use-cases).
+ Crie uma regra de ciclo de vida para expirar as versões atuais. Para expirar as versões atuais dos objetos, selecione **Expirar versões atuais de objetos** e adicione um número em **Dias após a criação do objeto**. Para obter mais informações sobre como criar essa regra de ciclo de vida, consulte [Definir uma configuração de ciclo de vida do S3](how-to-set-lifecycle-configuration-intro.md).
+ Para excluir permanentemente todos os objetos com versionamento e excluir marcadores, crie duas regras de ciclo de vida: uma para expirar as versões atuais e excluir permanentemente as versões não atuais dos objetos, e outra para excluir marcadores de exclusão de objetos expirados.

Em um bucket com versionamento ativado, uma solicitação `DELETE` que não especifica um ID de versão pode remover somente objetos com um ID de versão `NULL`. Se o objeto foi carregado quando o versionamento estava ativado, uma solicitação `DELETE` que não especifica um ID de versão cria um marcador de exclusão desse objeto.

**nota**  
Para buckets com o bloqueio de objetos do S3 ativado, uma solicitação de `DELETE` objeto com um ID de versão de objeto protegido causa um erro 403 Acesso negado. Uma solicitação de `DELETE` objeto sem um ID de versão adiciona um marcador de exclusão como a versão mais recente do objeto com uma resposta 200 OK. Objetos protegidos pelo bloqueio de objetos não podem ser excluídos permanentemente até que seus períodos de retenção e retenções legais sejam removidos. Para ter mais informações, consulte [Como o bloqueio de objetos do S3 funciona](object-lock.md#object-lock-overview).

## Ocorreu uma degradação do desempenho depois de ativar o versionamento do bucket
<a name="performance-degradation"></a>

A degradação do desempenho poderá ocorrer em buckets com versionamento ativado se houver muitos marcadores de exclusão ou objetos com versionamento e se as práticas recomendadas não forem seguidas.

**Marcadores de exclusão em excesso**  
Depois que você habilita o versionamento em um bucket, uma solicitação `DELETE` sem um ID de versão feita a um objeto cria um marcador de exclusão com um ID de versão exclusivo. As configurações do ciclo de vida com a regra **Expirar versões atuais de objetos** adicionam um marcador de exclusão com um ID de versão exclusivo a cada objeto. Marcadores de exclusão excessivos podem reduzir o desempenho no bucket.

Quando o versionamento é suspenso em um bucket, o Amazon S3 marca o ID da versão como `NULL` em objetos recém-criados. Uma ação de expiração em um bucket com versionamento suspenso faz com que o Amazon S3 crie um marcador de exclusão com `NULL` como o ID da versão. Em um bucket com versionamento suspenso, um marcador de exclusão `NULL` é criado para qualquer solicitação de exclusão. Esses marcadores de exclusão `NULL` também são chamados de marcadores de exclusão de objeto expirado quando todas as versões de objeto são excluídas e resta apenas um único marcador de exclusão. Se muitos marcadores de exclusão `NULL` se acumularem, ocorrerá uma degradação do desempenho no bucket.

**Objetos com versionamento em excesso**  
Se um bucket com versionamento ativado contiver objetos com milhões de versões, poderá ocorrer um aumento nos erros 503 Serviço indisponível. Se você perceber um aumento significativo do número de respostas HTTP 503 Serviço indisponível recebidas para solicitações `PUT` ou `DELETE` de objetos a um bucket com o versionamento ativado, talvez tenha um ou mais objetos no bucket com milhões de versões. Quando você tem objetos com milhões de versões, o Amazon S3 limita automaticamente as solicitações ao bucket. As solicitações de controle de utilização protegem o bucket de uma quantidade excessiva de tráfego de solicitação, o que pode potencialmente impedir outras solicitações feitas ao mesmo bucket. 

Para determinar quais objetos têm milhões de versões, use o inventário do S3. O inventário do S3 gera um relatório que fornece uma lista de arquivos simples dos objetos em um bucket. Para ter mais informações, consulte [Catalogar e analisar seus dados com o Inventário S3](storage-inventory.md).

Para verificar se há um grande número de objetos com versionamento no bucket, use as métricas da Lente de Armazenamento do S3 para visualizar a **Contagem de objetos da versão atual**, o **Número de objetos de versões não atuais** e a **Contagem de objetos do marcador de exclusão**. Para obter mais informações sobre métricas da Lente de Armazenamento, consulte [Glossário de métricas de lente de armazenamento do Amazon S3](storage_lens_metrics_glossary.md).

A equipe do Amazon S3 incentiva os clientes a investigarem aplicações que sobrescrevem repetidamente o mesmo objeto, criando potencialmente milhões de versões desse objeto, para determinar se a aplicação está funcionando conforme o esperado. Por exemplo, uma aplicação que sobrescreve o mesmo objeto a cada minuto durante uma semana pode criar mais de dez mil versões. Recomendamos armazenar menos de cem mil versões para cada objeto. Se você tiver um caso de uso que exija milhões de versões para um ou mais objetos, entre em contato com a equipe do AWS Support a fim de obter ajuda para determinar uma solução melhor.

**Práticas recomendadas**  
Para evitar problemas de degradação do desempenho relacionada ao versionamento, recomendamos aplicar as seguintes práticas recomendadas:
+ Habilite uma regra de ciclo de vida para expirar as versões anteriores dos objetos. Por exemplo, você pode criar uma regra de ciclo de vida para expirar versões não atuais após 30 dias de inatividade do objeto. Você também poderá manter várias versões não atuais se não quiser excluir todas elas. Para obter mais informações, consulte [Definir uma configuração do ciclo de vida do S3](how-to-set-lifecycle-configuration-intro.md).
+ Habilite uma regra de ciclo de vida para excluir marcadores de exclusão de objetos expirados que não tenham objetos de dados associados no bucket. Para obter mais informações, consulte [Remover marcadores de exclusão de objeto expirado](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7).

Para ver mais práticas recomendadas de otimização de desempenho do Amazon S3, consulte [Padrões de design de melhores práticas](optimizing-performance.md).