Partner index description is not found

1 comentario

Este problema ocurre cuando se definió una Primary Key o una Foreign Key y su índice no se encuentra, no existe. Y debería existir. Para descubrir cual es el índice faltante puedes escribir la siguiente consulta:

SELECT
   I.RDB$RELATION_NAME   AS "Nombre de la Tabla",
   R.RDB$CONSTRAINT_NAME AS "Nombre de la restricción",
   R.RDB$INDEX_NAME      AS "Nombre del índice",
   I.RDB$INDEX_NAME      AS "Nombre real",
   I.RDB$INDEX_INACTIVE  AS "Estado"
FROM
   RDB$INDICES I
RIGHT JOIN
   RDB$RELATION_CONSTRAINTS R
      ON I.RDB$INDEX_NAME = R.RDB$INDEX_NAME
WHERE
   R.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' OR
   R.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY'
ORDER BY
   R.RDB$CONSTRAINT_NAME

El índice faltante es aquel que en la columna “Nombre real” está vacío. Para solucionar el problema debes recrear esa restricción.

En general este error ocurre cuando hay corrupción física en la Base de Datos. Sería una buena idea que hagas un backup, que restaures el backup, y que de ahí en adelante utilices la versión restaurada.

NOTA: En la columna “Estado” el valor 0 (cero) significa que el índice está ACTIVO, un valor de 1 significa que el índice está INACTIVO y un valor de NULL significa que es un nuevo índice.

 

Anuncios

Page 99999 is an orphan

1 comentario

Si encuentras este error (por ejemplo, en el archivo FIREBIRD.LOG que se encuentra en la carpeta donde instalaste el Firebird) el problema es el siguiente:

  • Un índice está corrupto

En general ocurre cuando hay intensivos insert/delete/update en una sola transacción.

Deshabilitar los índices antes de intensivos insert/delete/update es bueno por dos razones:

  1. Las operaciones de insert/delete/update serán mucho más rápidas
  2. No se corromperán los índices

Al finalizar las operaciones de insert/delete/update hay que volver a habilitar los índices.

Observación: el número 99999 del título representa a cualquier número entero. Por ejemplo en tu caso podrías encontrar el mensaje: “Page 124062 is an orphan”

Uso de la Primary Key

2 comentarios

Como sabes, una Primary Key es una clave que tiene estas dos características:

  • Sus valores son únicos (jamás se pueden repetir)
  • Sus valores no pueden ser NULL

Eso nos permite identificar a cada fila (a cada registro) de una forma unívoca, es decir con la total seguridad de que estamos identificando a la fila correcta.

¿Cuándo deberíamos utilizar una Primary Key?

1. Cuando deseamos consultar la tabla en el mismo orden en que las filas fueron cargadas

Por ejemplo, escribiendo:

SELECT
   PRD_IDENTI,     -- Identificador y Primary Key
   PRD_NOMBRE,     -- Nombre del producto
   PRD_PRECTO      -- Precio de costo del producto
FROM
   PRODUCTOS
ORDER BY
   PRD_IDENTI

2. Cuando hacemos búsquedas y queremos asegurarnos de obtener las filas correctas, sin la posibilidad de equivocarnos. Por ejemplo, supongamos que queremos borrar de la tabla de PRODUCTOS al producto cuyo identificador es 12345 y cuyo nombre es ‘Jugo de naranjas’. Si escribimos:

DELETE FROM
   PRODUCTOS
WHERE
   PRD_IDENTI = 12345

estaremos seguros de borrar a un solo producto, el que tiene como identificador al número 12345.

En cambio, si escribimos algo como:

DELETE FROM
   PRODUCTOS
WHERE
   PRD_PROCED = 'Japón'

Estaríamos borrando a todos los productos cuyo país de procedencia es Japón. Podríamos creer que hay un solo producto que tiene esa procedencia pero en realidad hay varios y en ese caso los estaríamos borrando a todos, lo cual sería un error grave.

Por ese motivo, en general, cuando de borrar se trata deberíamos usar la Primary Key, es más seguro.