Publicado el Dejar un comentario

MySQL: Error “Incorrect key file for table xxxxx.MYI” y cómo repararlo

Recientemente, un cliente experimentó el siguiente error al intentar ejecutar un UPDATE sobre una tabla en MySQL:

Incorrect key file for table 'xxxxx'.MYI; try to repair it

Este tipo de error generalmente indica que el archivo de índice (.MYI) de la tabla se ha dañado. En este caso específico, el problema ocurrió después de un corte inesperado de energía eléctrica, lo que sugiere que la tabla no fue cerrada correctamente y requiere reparación.


🛠️ Cómo reparar la tabla afectada

Para resolverlo desde el cliente de MySQL, se puede ejecutar el siguiente comando:

mysql> REPAIR TABLE nombre_tabla USE_FRM;

📌 Nota importante:

  • Reemplaza nombre_tabla con el nombre real de la tabla que está generando el error.
  • Este nombre normalmente coincide con el del archivo .MYI afectado.

⏳ ¿Cuánto tiempo tarda?

El tiempo de ejecución depende directamente de la cantidad de registros que contenga la tabla. Durante el proceso, MySQL devolverá dos filas indicando el estado de la reparación. Si todo sale bien, se mostrarán mensajes de éxito en ambas.


🗂️ Recomendación para prevenir futuras incidencias

Es fundamental realizar respaldo diario de la base de datos, especialmente si se trata de tablas con información crítica. Si el proceso de reparación falla, tener una copia de seguridad puede ser la única forma de recuperar los datos perdidos.


¡Saludos!

Publicado el 3 comentarios

SQL: Obtener último(s) caracteres de un campo texto.

Hola, en nuestro quehacer diario con bases de datos relacionales nos topamos a veces con que hay que extraer el o los últimos caracteres de un campo de tipo texto o string de una tabla. Según la base de datos usada la instrucción puede variar.

Enseguida veremos algunos ejemplos, en las distintas bases de datos, donde extraeremos los útimos 2 caracteres del texto constante “texto ejemplo”:

SQLite:

SELECT SUBSTR(‘texto ejemplo’, -2);

Postgresql:

SELECT SUBSTRING(‘texto ejemplo’ from ‘.{2}$’);

SELECT RIGHT(‘texto ejemplo’,2);

MySQL o MariaDB:

SELECT SUBSTRING(‘texto ejemplo’,-2);

SELECT RIGHT(‘texto ejemplo’,2);

SQL Server:

SELECT RIGHT(‘texto ejemplo’, 2);

ORACLE:

SELECT SUBSTR(‘texto ejemplo’, -2) FROM dual;

Todas las sentencias sql descritas anteriormente ejecutadas en la respectiva base de datos regresarán la cadena de caractares ‘lo’.

Dependiendo del número de caracteres a la derecha que queramos obtener sólo tendremos que cambiar el número dos por el número de caracteres deseado en cada una de las sentencias anteriores.

Espero y les séa de utilidad este artículo. Agradezco sus comentarios. ¡Saludos!

Publicado el Dejar un comentario

Listar tablas desde SQL en Oracle, Postgresql y MySQL

Una vez conectados a la base de datos desde un cliente SQL, para listar las tablas a las que tenemos acceso en Oracle sería:

SELECT table_name FROM user_tables;

En Postgresql:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

En la sentencia anterior sustituimos ‘public‘ por el nombre del esquema correspondiente si se tiene más esquemas en la base de datos.

En MySQL:

SELECT table_name FROM information_schema.tables WHERE table_schema = 'nombre_base_de_datos';

Donde nombre_base_de_datos se sustituye por el nombre de la base de datos a la que estamos conectados.

¡Saludos!