A lixeira de tabelas protege contra perda acidental de dados causada por instruções DROP TABLE. O sistema move as tabelas excluídas para um banco de dados oculto chamado ADB_RECYCLE_BIN e as retém por três dias, por padrão. Esse período permite recuperar os dados antes da exclusão definitiva.
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster do AnalyticDB for MySQL com a versão V3.2.3.0 ou posterior
Para verificar a versão secundária de um cluster Data Lakehouse Edition, execute SELECT adb_version();. Para atualizar a versão secundária, entre em contato com o suporte técnico. Para clusters Data Warehouse Edition, consulte Atualizar a versão secundária de um cluster.
Limitações
Tipos de tabela compatíveis: apenas tabelas internas com engine XUANWU ou XUANWU_V2. Não há suporte para tabelas externas.
As tabelas na lixeira continuam a consumir espaço de armazenamento em disco.
A execução de
DROP TABLEdurante uma instruçãoINSERT OVERWRITE SELECTmove a tabela para a lixeira e causa falha na instruçãoINSERT OVERWRITE SELECT.A execução de
DROP TABLEdurante uma instruçãoBUILDmove a tabela para a lixeira sem interromper a instruçãoBUILD.Para executar qualquer instrução da lixeira (SHOW, RESTORE, PURGE), é necessária a permissão
DROPna tabela de origem. Apenas as instruções PURGE, RESTORE e SHOW são compatíveis com tabelas na lixeira.
Como funciona
Na primeira execução de uma instrução DROP TABLE, o AnalyticDB for MySQL cria um banco de dados oculto chamado ADB_RECYCLE_BIN e move a tabela excluída para esse local. Instruções DROP TABLE subsequentes movem as tabelas para o mesmo banco de dados.
O comando DROP TABLE ... FORCE exclui a tabela permanentemente e ignora a lixeira.
Retenção e limpeza
Por padrão, as tabelas permanecem na lixeira por três dias (259.200.000 ms). Após o término do período de retenção, o AnalyticDB for MySQL as exclui automaticamente por meio de um thread de limpeza em segundo plano executado a cada 60 segundos. Você também pode executar a instrução PURGE para limpar manualmente a lixeira. Para mais informações, consulte a seção Excluir tabelas da lixeira.
Defina um período de retenção adequado para evitar o esgotamento do armazenamento em disco.
Convenção de nomenclatura
Tabelas de diferentes bancos de dados são armazenadas em uma única lixeira. Para garantir nomes exclusivos, o sistema renomeia cada tabela seguindo o formato NomeDoBancoDeDadosOrigem_NomeDaTabelaOrigem_Timestamp.
Exemplo: Uma tabela customer do banco de dados adb_demo, excluída em 1º de janeiro de 2024 às 00:00:00, recebe o nome adb_demo_customer_1704038400000.
Se o nome combinado exceder o comprimento máximo, o nome do banco de dados de origem e o nome da tabela serão truncados sequencialmente e poderão aparecer incompletos.
Caso a mesma tabela seja excluída novamente do mesmo banco de dados, ela será armazenada com um timestamp diferente.
Configurar a lixeira
Use SET ADB_CONFIG para configurar a lixeira.
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Defina como |
|
|
|
Período de retenção em milissegundos. Aplica-se apenas a tabelas excluídas após a alteração desta configuração. Tabelas já existentes na lixeira mantêm seu período de retenção original. |
|
|
|
Ativa ou desativa o thread de limpeza em segundo plano. Não desative este recurso a menos que seja necessário para solução de problemas. |
|
|
|
Intervalo em milissegundos no qual o thread de limpeza é executado. |
Alterar o período de retenção
SET adb_config RECYCLE_BIN_EXPIRED_TIME=<RetentionPeriodInMilliseconds>;
O novo período de retenção aplica-se apenas a tabelas excluídas após esta alteração. Tabelas que já estão na lixeira mantêm seu tempo de expiração original.
Exemplo: Definir o período de retenção para dois dias:
-- 2 days = 2 × 24 × 3600 × 1000 = 172,800,000 ms
SET adb_config RECYCLE_BIN_EXPIRED_TIME=172800000;
Consultar tabelas na lixeira
Sintaxe
-- List all tables in the recycle bin
SHOW RECYCLE_BIN ALL;
-- List tables from a specific source database and table name
SHOW RECYCLE_BIN TABLE <SourceDatabaseName>.<SourceTableName>;
-- List tables by source table name (across all databases)
SHOW RECYCLE_BIN TABLE <SourceTableName>;
-- List all tables from a specific source database
SHOW RECYCLE_BIN DATABASE <SourceDatabaseName>;
Exemplos
Listar todas as tabelas na lixeira:
SHOW RECYCLE_BIN ALL;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
| testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Listar uma tabela específica de adb_demo.customer:
SHOW RECYCLE_BIN TABLE adb_demo.customer;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Listar todas as versões da tabela customer em todos os bancos de dados:
SHOW RECYCLE_BIN TABLE customer;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | testdb_customer_1720085752664 | testdb | customer | 2024-07-04 17:35:56 | 2024-07-07 17:35:56 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Listar todas as tabelas do banco de dados adb_demo:
SHOW RECYCLE_BIN DATABASE adb_demo;
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| userName | schemaName | tableName | originSchemaName | originTableName | recycledTime | expiredTime |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
| testUser | ADB_RECYCLE_BIN | adb_demo_customer_1720086117277 | adb_demo | customer | 2024-07-04 17:42:00 | 2024-07-07 17:42:00 |
| testUser | ADB_RECYCLE_BIN | adb_demo_orders_1720086094102 | adb_demo | orders | 2024-07-04 17:41:37 | 2024-07-07 17:41:37 |
+----------+-----------------+---------------------------------+------------------+-----------------+---------------------+---------------------+
Restaurar tabelas da lixeira
Regras de restauração
As tabelas restauradas recuperam seus nomes originais anteriores à exclusão.
Se o banco de dados de origem já contiver uma tabela com o mesmo nome, renomeie, exclua ou mova essa tabela existente antes de restaurar.
Quando existem múltiplas versões de uma tabela na lixeira (mesmo banco de dados e nome de tabela de origem, mas timestamps diferentes), o comando
RESTORE RECYCLE_BIN ALLrestaura a versão com o timestamp mais recente e reporta um erro para as versões restantes.
Sintaxe
-- Restore all tables to their source databases
RESTORE RECYCLE_BIN ALL;
-- Restore a specific table using its recycle bin name
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
O <RecycleBinTableName> corresponde ao nome exibido na coluna tableName da saída do comando SHOW RECYCLE_BIN (formato: SourceDatabaseName_SourceTableName_Timestamp).
Restaurar uma versão específica de uma tabela
Quando houver várias versões de uma tabela excluída na lixeira, siga os passos abaixo para restaurar uma versão específica:
-
Consulte a lixeira para encontrar todas as versões e seus respectivos nomes:
SHOW RECYCLE_BIN TABLE <SourceTableName>; Identifique a versão desejada comparando a coluna
recycledTimecom o sufixo de timestamp emtableName.-
Restaure a versão específica utilizando seu nome na lixeira:
RESTORE RECYCLE_BIN TABLE <RecycleBinTableName>;
Exemplo: Para restaurar a tabela customer conforme existia antes da exclusão em 2024-07-04 17:42:00:
RESTORE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;
Excluir tabelas da lixeira
Use o comando PURGE para excluir permanentemente tabelas da lixeira antes que elas expirem.
Sintaxe
-- Permanently delete all tables from the recycle bin
PURGE RECYCLE_BIN ALL;
-- Permanently delete a specific table from the recycle bin
PURGE RECYCLE_BIN TABLE <RecycleBinTableName>;
Exemplo
Excluir permanentemente a tabela adb_demo_customer_1720086117277:
PURGE RECYCLE_BIN TABLE adb_demo_customer_1720086117277;