Sintaxe do REPAIR TABLE
REPAIR TABLE
funciona somente em tabelas MyISAM
e é a mesma coisa que executar myisamchk -r nome_tabela
na tabela.
Normalmente você nunca deve executar este comando, mas se um disastre ocorrer você vai precisar recuperar seus dados de uma tabela MyISAM utilizando REPAIR TABLE
. Se as suas tabelas estiverem muito corrompidas, você deve encontrar a razão, para eleiminar a necessidade de se usar REPAIR TABLE
! Leia Seção A.4.1, "O Que Fazer Se o MariaDB Continua Falhando". Leia "Problemas com Tabelas MyISAM
".
REPAIR TABLE
repara uma tabela possivelmente corrompida. O comando retorna uma tabela com as seguintes colunas:
Coluna | Valor |
Table | Nome da Tabela |
Op | Sempre repair
|
Msg_type | Um dos seguintes: status , error , info ou warning
|
Msg_text | A mensagem |
Note que a instrução pode produzir várias linhas de informações para cada tabela recuperada. A ultima linha será de Msg_type status
e normalmente deve exibir OK
. Se o retorno não for OK
, você pode tentar reparar a tabela com myisamchk -o
, já que REPAIR TABLE
ainda não implementa todas as opções de myisamchk
. Futuramente iremos torná-lo mais flexível.
Se o parâmetro QUICK
for especificado, REPAIR
tenta reparar somente a árvore de índices.
Se você utilizar EXTENTED
, o MariaDB criará o índice, registro a registro em vez de criar um índice de uma vez com ordenação; Isto pode ser melhor que a ordenação em chaves de tamanho fixo se você tiver grandes chaves do tipo char()
que compactam muito bem.
No MariaDB
4.0.2, existe um modo USE_FRM
para REPAIR
. Use-o se o arquivo .MYI
estiver faltando ou o seu cabeçalho estiver corrompido. Neste modo o MariaDB recriará a tabela, usando a informação do arquivo .frm
. Este tipo de reparo não pode ser feito com myisamchk
.
Aviso: Se o mysqld
morre durante um REPAIR TABLE
, é essencial que você faça imediatamente outro REPAIR
na tabela antes de executar qualquer outro comando nela. (Claro que é sempre bom inciar com um backup). No pior caso você pode ter um novo arquivo de índice limpo sem informação sobre o arquivo de dados e quando você executar o próximo comando o arquivo de dados pode ser sobreescrito. Isto não é um cenário desejável, mas possível.
Antes do MariaDB, o comando REPAIR
não era gravado no log binário. Desde o MariaDB. eles são escritos no log binário a menos que a palavra chave opcional NO_WRITE_TO_BINLOG
(ou seu alias LOCAL
) seja usada.