Registros corruptos en Catalis

Ocasionalmente, las bases bibliográficas de Catalis presentan un fenómeno de corrupción de registros. Si bien no comprendemos la causa del problema, hemos aprendido algunas cosas sobre él, y gracias a eso hemos logrado que deje de fastidiarnos. Lo que sigue puede ser de ayuda a otros que se topen con este problema, y también para que aquellos que, sin haberlo sufrido aún, deseen aplicar una medida de prevención.

Características del problema. Síntomas

El daño en los registros se puede presentar de diversas maneras. En algunos casos sólo hay un campo afectado; en otros, casi todo el registro está dañado y puede resultar imposible identificar su contenido.

La característica más notable (y, como veremos enseguida, más útil) de este fenómeno es que solamente afecta a registros con MFN bajos, en general con MFN menor que 30.

Esta es una lista parcial de los síntomas que pueden estar indicando la presencia de registros corruptos en la base bibliográfica:

en la pantalla de búsquedas el registro se visualiza en forma defectuosa (presencia de caracteres extraños, campos incompletos/truncados).

al intentar editar el registro, se produce un mensaje de error

Para sacarse la duda, lo mejor es tratar de detectar los registros corruptos tal como se indica más adelante, en el PASO 1 del procedimiento.

Causa

Desconocida. Quizás sea un bug de WXIS, pero no hemos explorado suficientemente el problema como para tener una certeza.

Solución

La solución que hemos puesto en práctica con éxito consiste en reemplazar la base biblio original por una nueva base cuyos primeros N registros están vacíos. N = 100 parece ser un valor seguro. Esto ha evitado que el problema se vuelva a presentar en nuestras bases. En consecuencia, creemos que la molestia de aplicar esta “inmunización” sólo ocurre una vez. A continuación se describe el procedimiento que hemos seguido.

PASO 0. Copia de resguardo

Como corresponde, antes de modificar la base creamos un backup de los archivos biblio.mst y biblio.xrf.

PASO 1. Detectar registros dañados

Los registros dañados pueden detectarse por la presencia de caracteres de control (aquellos con código ASCII inferior a 32). Los saltos de línea no cuentan.

Una técnica para detectar estos caracteres consiste en convertir la base a un archivo de texto, usando i2id, y luego examinar ese archivo con un editor que permita visualizar caracteres de control de manera destacada, p.ej. vi o mcedit en Linux, o SciTE en Windows.

Así generamos un archivo de texto a partir de los primeros 100 registros de la base:

i2id biblio to=100 > biblio.id

En las imágenes siguientes se puede apreciar cómo se visualizan los caracteres de control en un registro corrupto, al examinar biblio.id con tres editores distintos. En los tres casos se trata del mismo registro (MFN 2), cuyo campo 859 está dañado:

vi (Linux)

mcedit (el editor del Midnight Commander, Linux). Las marcas de fin de línea, así como la ausencia de caracteres con diacríticos, no son indicación de problemas.

SciTE (Windows)

Por otra parte, en esta imagen vemos el registro tal como lo presenta MX en Windows:

Como se puede apreciar, en una rápida mirada a la salida del MX no resulta tan evidente que este registro tenga un serio problema. Es por eso que recomendamos utilizar alguno de los editores sugeridos, en lugar de MX. (Desde luego, hay casos en que el registro está tan estropeado que también con MX salta a la vista el error.)

Si bien en el archivo biblio.id no hay espacio entre cada registro y el siguiente, es fácil detectar el comienzo de un nuevo registro, indicado por las líneas que tienen esta forma:

!ID <MFN>

Por ejemplo, la línea

!ID 000002

señala el comienzo del MFN 2.

Anotamos los MFN de los registros dañados.

Recuperación de registros dañados

Una vez que tenemos la lista de MFNs dañados, podemos intentar recuperar una versión sana de esos registros a partir de un backup anterior de la base biblio.

PASO 2. Crear base auxiliar con los registros sanos

Creamos una base auxiliar llamada sanos:

mx seq=nul create=sanos (windows)

mx seq=/dev/null create=sanos (linux)

En esta base copiaremos todos los registros de biblio, excepto los que hayamos encontrado en mal estado.

Supongamos que en el PASO 1 hemos detectado sólo dos registros dañados, el MFN 7 y el MFN 12. Tendremos que ejecutar estos comandos:

mx biblio from=1 to=6 append=sanos now -all
mx biblio from=8 to=11 append=sanos now -all
mx biblio from=13 append=sanos now -all

Según cuántos y cuáles sean los registros dañados en nuestra base, deberemos hacer las modificaciones apropiadas en esa secuencia de comandos.

En el caso de haber podido recuperar algún registro a partir de un backup de biblio, se los puede agregar a sanos; p.ej. si logramos rescatar una copia buena del MFN 7, ejecutamos este comando:

mx biblio_backup from=7 count=1 append=sanos

PASO 3. Crear base nueva

Comenzamos por crear una base que sólo contenga 100 registros vacíos:

mx tmp to=100 create=nueva now -all

Marcamos los 100 registros como (lógicamente) borrados:

mx nueva "proc='d.'" copy=nueva now -all

A esa base le agregamos todos los registros “sanos” que habíamos guardado en el PASO 2:

mx sanos append=nueva now -all

Luego, reemplazamos la base biblio original con esta base nueva (¡siempre y cuando no hayamos ignorado el PASO 0!):

mx nueva create=biblio now -all

PASO 4. Regenerar archivo invertido

Siguiendo las indicaciones de Generación del archivo invertido en Catalis, generamos el archivo invertido de biblio.

PASO 5. Limpiar

Eliminamos las bases auxiliares: sanos, nueva. También podemos eliminar el archivo biblio.id, aunque recomiendo conservarlo como evidencia de la corrupción de registros. Posiblemente en algún momento nos resulte útil poder contar con un muestrario de registro corruptos para investigar mejor el problema.

PASO 6. Verificación. Re-creación de los registros perdidos

Ingresamos a Catalis, verificamos que podemos acceder a los registros (especialmente a los primeros de la base), y que las búsquedas funcionan bien.

Luego, cuando tengamos ganas y tiempo, volvemos a ingresar los registros que no pudimos salvar.

Observaciones

Notarán que se produce un desfasaje entre la secuencia de MFNs y de números de control. Sin embargo, eso no representa ningún problema, ya que el único identificador persistente que nos interesa es el campo 001. Los MFN pueden cambiar en cualquier momento, como acabamos de presenciar.

Al compactar la base biblio (tarea usual de mantenimiento para cualquier base CDS/ISIS), no se debe utilizar un archivo iso como paso intermedio, pues esto haría desaparecer los registros vacíos que colocamos al inicio de la base. La compactación se puede realizar creando una nueva copia de la base:

mx biblio create=biblio1 now -all

y luego renombrando biblio1.{mst,xrf} como biblio.{mst,xrf}.

No es necesario modificar el archivo cn.txt, pues el reacomodamiento de registros sólo altera los MFNs, no los números de control (campo 001).

Hay un efecto colateral que debería corregirse en Catalis: en la pantalla de búsquedas, debajo del botón “Últimos 10 registros”, figura un número que excede por lo menos en 100 al total real de registros en la base. En realidad, ese número que se muestra está basado en el máximo MFN existente en la base, pero ya sabemos que la cantidad de registros activos puede ser menor que ese número.

Final

Nos interesa conocer cualquier duda, sugerencia, etc. con respecto a este problema y al procedimiento presentado. Por favor, utilice nuestro grupo de discusión. Gracias.