Sante Caserio
pubblicato più di 2 anni fa

L'istruzione REPAIR TABLE

L’istruzione REPAIR TABLE serve a tentare di riparare una tabella il cui file dei dati, o degli indici, è corrotto ....

L’istruzione REPAIR TABLE serve a tentare di riparare una tabella il cui file dei dati, o degli indici, è corrotto. Se si ottengono strani errori, è possibile verificare lo stato di salute della tabella tramite l’istruzione CHECK TABLE.
Vedi: http://www.mysqlitalia.it/recipes/121-l-istruzione-check-table

Gli Storage Engine che supportano REPAIR TABLE sono MyISAM, Maria, Archive e CSV – quest’ultimo non lo supportava nelle versioni più vecchie. Per gli SE MyISAM e Maria esistono anche dei programmi chiamati myisamchk e mariachk.

REPAIR TABLE funziona anche sulle tabelle partizionate (se non si utilizza l’opzione USE_FRM), tuttavia è possibile tentare la riparazione di una singola partizione tramite ALTER TABLEREPAIR PARTITION.

Nonostante CHECK TABLE possa essere eseguito su una vista, REPAIR funziona solo sulle tabelle. I problemi relativi alle definizioni delle viste devono essere corretti manualmente.

L’uso di REPAIR TABLE richiede i permessi SELECT e INSERT.

Sintassi

La sintassi è la seguente:

1REPAIR [ NO_WRITE_TO_BINLOG ] TABLE nome_tabella
2       [ QUICK ] [ EXTENDED ] [ USE_FRM ]

nome_tabella è il nome della tabella che si desidera riparare; può anche essere un elenco di tabelle separate da virgola, nel qual caso ognuna delle tabelle verrà verificata con una sola istruzione. Esempio:

1REPAIR TABLE utenti, permessi, log_accessi EXTENDED;

Le opzioni

Le opzioni di REPAIR TABLE funzionano su tutti gli Storage Engine che supportano questa istruzione.

Normalmente, quando si esegue REPAIR TABLE, questa istruzione viene scritta nel binlog e replicata sugli eventuali slave. Se non si vuole che ciò avvenga, occorre utilizzare l’opzione NO_WRITE_TO_BINLOG. Lo stesso risultato si può ottenere con il sinonimo LOCAL.

QUICK tenta di riparare soltanto gli indici, escludendo i dati. EXTENDED ricostruisce gli indici riga per riga. Queste due opzioni possono sembrare in contraddizione, ma è possibile utilizzarle insieme.

USE_FRM deve essere usato solo nel caso in cui la riparazione fallisce a causa di un problema nell’intestazione del file degli indici. In questo caso, il server la ignorerà e leggerà le informazioni necessarie nel file di definizione della tabella (.frm). Questo significa che l’ultimo valore AUTO_INCREMENT andrà perso e che i collegamenti ai record cancellati non verranno letti, causando così una perdita di spazio disponibile su disco e frammentando i dati. USE_FRM non deve essere utilizzato sulle tabelle MyISAM / Maria compresse perchè si rovinerebbero, in quanto MySQL non saprebbe che sono appunto compresse.

Nelle vecchie versioni di MySQL, l’uso di REPAIR TABLE con USE_FRM su una tabella creata da una versione di MySQL più vecchia di quella utilizzata poteva rovinare irrimediabilmente i dati. Nelle versioni recenti, il server non tenterà di riparare la tabella e restituirà il messaggio “Failed repairing incompatible .FRM file”. Sempre nelle versioni recenti, se non si utilizza la clausola USE_FRM, MySQL tenta di correggere eventuali problemi di compatibilità con le tabelle create da versioni più vecchie. Si tratta degli stessi problemi che è possibile correggere con CHECK TABLEFOR UPGRADE.

L’output

L’output di REPAIR TABLE è un recordset simile a quello restituito da altre istruzioni amministrative (CHECK, ANALYZE…).

Le colonne restituite sono le seguenti:

  • Table è il nome della tabella a cui si riferisce il record; utile quando si specificano più tabelle in una sola istruzione.
  • Op è l’operazione eseguita e il valore è sempre repair.
  • Msg_type può avere i seguenti valori: status, info, error, warning; rappresenta il tipo di messaggio.
  • Msg_text è un messaggio informativo.

Per ogni tabella coinvolta nella REPAIR TABLE potrebbe essere restituito più di un messaggio.

L’ultimo record è di tipo /status/ e dovrebbe avere come valore OK, che significa che la tabella è stata controllata e non sono stati riscontrati errori. Se non si ottiene un messaggio di questo tipo relativo ad una tabella coinvolta nella CHECK TABLE, significa che è stato rilevato un errore che non è stato possibile correggere automaticamente. In questo caso, per le tabelle MyISAM e Maria, si può provare ad utilizzare i programmi myisamchk e mariachk che, sebbene non supportino un’equivalente di USE_FRM, supportano invece altre opzioni che non hanno corrispondenza in REPAIR TABLE.

I messaggi di tipo info, warning ed error (in ordine crescente di gravità) rappresentano problemi riscontrati nella riparazione di una tabella.

Precauzioni

Prima di eseguire REPAIR TABLE è bene effettuare un backup della tabella danneggiata. Vi è sempre la possibilità che la tabella venga ulteriormente rovinata a causa di errori del filesystem o di MySQL.

Se il server va in crash durante una riparazione, dopo il riavvio è necessario eseguire subito un nuovo REPAIR TABLE sulla tabella corrotta.

REPAIR TABLE, se possibile, dovrebbe essere preferito a myisamchk e mariachk.

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve, dopo tante storie ho studiato il php e mysql .. . che in questo forum parlavo php e campo mysql timestamp di gigi Vai al topic

ciao a tutti ho creato un forum su aruba ma non so come farlo visualizzare nel mio aruba di albertodiprima Vai al topic

Salve a tutti gente, questo è il mio primo post su questo forum e questo a causa Problema Gravissimo con AutoIncrement di stefanoadsl Vai al topic

Salve! Mi presento, mi chiamo Adriano e sono uno studente di ingegneria informatica Problema Trigger di Xanakro Vai al topic

Ciao a tutti!
Volevo chiedere una informazione.
Ho una query che lanciata la prima Query Eseguita più volte di OltreLeStelle Vai al topic