Ficheros de configuración de las tablas de la base 

Introducción

Las tablas del software se crean mediante una herramienta denominada valfil. Esta herramienta se ejecuta directamente en el entorno de desarrollo integrado en ADONIX en distintos casos: creación de una tabla desde el editor de tablas, modificación de una tabla desde la misma función, extracción o integración de datos, o integración de un parche que contiene un cambio de estructura de una tabla de la base.

En un principio, una tabla se define con los ficheros físicos que se encuentran en el directorio FIL del dossier y con una tabla de la base de datos. Los ficheros físicos son los siguientes:

  • Un fichero XXX.srf, que contiene la descripción de la estructura del fichero (en el formato ASCII que se describe más adelante).
  • Un fichero XXX.fde, que contiene la descripción de la estructura del fichero (en un formato compilado que puede utilizar directamente el motor Adonix).

Cuando la tabla no está almacenada en la base, pero se ha descargado en forma de fichero transportable, sus datos se almacenan en dos o tres ficheros adicionales:

  • Un fichero XXX.dat, que contiene los datos en forma de un fichero formado por registros de longitud fija.
  • Un fichero XXX.seq, que contiene el siguiente número de secuencia asociado a la tabla. Esta información es importante siempre y cuando cada tabla esté asociada a un número de secuencia que permita crear números únicos (este proceso corresponde a la función Adonix uniqid([abv]), donde abv es la abreviatura de la tabla correspondiente).
  • Un fichero XXX.blb, que contiene los datos Long (blobs y clobs), si hay en la tabla.

Los datos de estos distintos ficheros permiten crear una tabla con las opciones mínimas, que son las siguientes:

  • El dimensionamiento de la tabla (tamaño previsto, si es necesario, para Oracle, en forma de segmento inicial y de tamaño de extents) se define en el fichero de extensión .srf (el cálculo se realiza a partir del número previsto de líneas de la tabla, definido por variables y fórmulas de dimensionamiento).
  • El dimensionamiento de los índices se define a prorrata a partir del tamaño de la tabla (el tamaño del segmento inicial se multiplica por la relación entre la longitud de la clave y la longitud de la línea de la tabla, posteriormente, a la next extent se le impone el mismo tamaño que a la initial).
  • Los grupos de ficheros (en SQL Server) son los que están definidos en el fichero .adxodbc, si existe. Si el fichero no existe, se utilizan los grupos de ficheros DOSSIER_DAT y DOSSIER_IDX, si existen, donde DOSSIER es el nombre del dossier. En su defecto, se utiliza el grupo por defecto definido para la base.
  • Los espacios de tabla de almacenamiento (de Oracle) son los que están definidos en el fichero .adxora, si existe. Si el fichero no existe, se utiliza el espacio de tabla asociado por defecto al usuario DOSSIER para los datos, y el espacio de tabla DOSSIER_IDX para los índices.

Puede resultar interesante definir los datos adicionales que se han utilizado en la creación de la tabla y en cada actualización para modificar las reglas de dimensionamiento o de localización teniendo en cuenta las particularidades de las distintas bases de datos y, de esta forma, obtener un mejor rendimiento. Esto supone almacenar los elementos fuera de la tabla para que la herramienta valfil pueda aplicarlos cada vez que se valida o revalida la tabla. Por este motivo, se puede crear un fichero de extensión cfg en el directorio FIL. Este fichero permite guardar un conjunto de directivas opcionales que completarán la orden SQL Create table o Create Index de valfil. Al igual que los ficheros de extensión .srf, se muestra en formato ASCII (descrito más adelante).

El contenido de este fichero de configuración aparece en la parte inferior de la pestaña de definición de los índices, en la gestión de las tablas. El resto de este documento describe la sintaxis de escritura del fichero de configuración.

Sintaxis de escritura

Este fichero está compuesto por líneas de texto que forman secciones. Cada sección comienza por una etiqueta prefijada por el carácter $, seguida de un código que indica la base de datos para la que se realiza la sección (ORACLE o MSSQL), seguido de un carácter subrayado y del nombre de la tabla o de un índice.

A continuación, contiene cláusulas limitadas por los caracteres {" (llave inicial seguida de una comilla doble) y "} (llave final seguida de una comilla doble). Estas cláusulas se transfieren tal y como están a la base de datos en la creación o modificación de la tabla o del índice. Si hay varias, se transfieren una detrás de otra, separadas por un final de línea. El número de caracteres de una cláusula está limitado a 256.

A continuación, contiene la palabra clave End, que finaliza una sección.

El fichero de configuración permite introducir comentarios en forma de textos libres prefijados por el carácter # (almohadilla). Los comentarios solo pueden aparecer al inicio de la línea.

Si hay una sección con al menos una cláusula, se ignoran todas las reglas de dimensionamiento o almacenamiento por defecto del elemento (tabla o índice) descrito y se utilizan las cláusulas transferidas.

Las secciones correspondientes a elementos inexistentes o relativas a bases de datos distintas a la base en curso simplemente se ignoran.

Ejemplos de sintaxis de Oracle

Las cláusulas de almacenamiento pueden ser, por ejemplo:

Espacio de tabla impuesto

{" Tablespace ts1 "}

Dimensionamiento de los extents de la tabla

{" Storage (Initial 100K Next 50K Maxextents 10 Pctincrease 20) "}

División de una tabla en varios espacios de tabla según el valor de un campo

{" partition by range (DHIDAT_0) (partition p1 values less than ('01-APR-1999') tablespace ts1, "}
{" partition p2 values less than ('01-APR-2001') tablespace ts2, "}
{" partition p3 values less than (maxvalue) tablespace ts4) "}

Ejemplos de sintaxis de SQL Server

La única cláusula de almacenamiento posible es:

Volumen impuesto

{" On volume1 "}

A partir de la versión 6.4, también se puede definir que el primer índice (y solo este) sea en "clúster", es decir, que los datos de la tabla se agrupen físicamente en el orden de la clave. Se puede utilizar con fines de optimización. Para ello, hay que añadir la siguiente sección (XXXX es el nombre del índice correspondiente):

$CLUSTERED
{ "XXXX" }
End

Para tener en cuenta esta directiva, hay que revalidar la tabla en modo forzado una vez modificado el fichero de configuración.

Aviso: La sintaxis para definir el índice en clúster es temporal. En la próxima versión mayor, los índices de este tipo se definirán de una forma más natural en el diccionario.

Ejemplo de fichero

A continuación, se muestra un ejemplo de fichero de configuración. Hay que tener en cuenta que aquí solo se van a utilizar algunas directivas (según la base utilizada, puesto que solo se van a implementar las correspondientes a la base de datos utilizada).

La estructura estándar del software no contiene ningún fichero de configuración y las actualizaciones respetan los ficheros de configuración existentes. Los ficheros de configuración se consideran elementos de implementación y, por lo tanto, están vinculados a una instalación determinada, no a una estándar.

 

#---  Regla para Oracle: fichero de facturas
$ORACLE_SINVOICE
#--- Se impone otro espacio de tabla.
{" Tablespace DEMO_DAT2 "}
#--- Reglas de dimensionamiento obligatorias cuando se impone algún elemento.
{" Storage (Initial 100M  Next 50M Pctincrease 20) "}
End

#---  Regla para SQL Server:
$MSSQL_SINVOICE
{" On DEMO_DAT2 "}
End

#--- Primer índice en Oracle (ninguna regla para los demás índices).
$ORACLE_SIH0
{" Tablespace DEMO_IDX2 "}
{" Storage (Initial 5M Next 2M Pctincrease 30) "}
End

Anexo: Los ficheros ASCII utilizados con el motor Adonix

El motor Adonix utiliza ficheros ASCII de tipo "Unix", es decir, el separador de línea es el avance de línea (carácter del código 10), no el retorno de carro y el avance de línea (caracteres 13 y 10) como en los ficheros de texto Windows™. Por lo tanto, es fundamental no editar estos textos en Notepad (o al menos no reescribirlos) para que el motor Adonix pueda reutilizarlos. No obstante, en Unix se puede utilizar el editor vi. Los editores Adonix gestionan correctamente estos ficheros.

También hay que tener en cuenta que el formato de estos ficheros es UTF8 (formato que permite procesar los caracteres Unicode, como el chino, de forma totalmente transparente). Es una codificación de 1 a 4 bytes para un único carácter. El formato UTF8 corresponde a ASCII en todos los caracteres no acentuados, pero en cuanto el bit de peso es superior a 1, el carácter se codifica a más de un byte. Esto significa que los caracteres acentuados franceses no se visualizan correctamente con los editores clásicos (pero los editores Adonix procesan correctamente esta transcodificación).

Anexo: Las reglas de dimensionamiento por defecto de las tablas

Si no hay ningún fichero de configuración, el algoritmo de dimensionamiento que se utiliza para dimensionar las tablas de Oracle es el siguiente:

  • En primer lugar, se determina el número de líneas que se puede almacenar en la tabla. El número de líneas se calcula mediante las fórmulas de dimensionamiento, calculadas a su vez a partir de elementos de dimensionamiento. El número de líneas se compara con el número de líneas proporcionado en el campo Número de registros de la primera pestaña del diccionario de tablas. Se tiene en cuenta el máximo de ambos números.
  • A continuación, se calcula el tamaño de una línea de la tabla en número de bytes. Se tiene en cuenta el tipo interno asociado a cada tipo de dato de los campos de la tabla. Un campo de tipo Descripciones ocupa 1 byte, un campo de tipo Entero ocupa 2 bytes, un campo de tipo Entero largo ocupa 4 bytes y un campo de tipo Decimal ocupa 8 bytes. Los campos de tipo Alfanumérico y de longitud máxima L ocupan L+1 bytes multiplicado por un coeficiente multiplicador de valor 1 si la base está en ASCII, que tendrá el valor de la variable de entorno STUSIZE si la base está en Unicode (si no tiene ningún valor, se utiliza el valor 2). Hay que tener en cuenta que este tamaño se puede obtener mediante la función Opciones/Informaciones disponible en la gestión de tablas.
  • También se calcula la longitud (en bytes) de cada índice aplicando las mismas reglas de dimensionamiento a los campos que lo componen.
  • El tamaño global de la tabla se calcula multiplicando el número de líneas por el tamaño de una línea y aplicando un coeficiente para tener en cuenta que la carga nunca es máxima (el valor por defecto de este coeficiente será 0.5).
  • En la base de datos de Oracle, el tamaño del segmento inicial se define teniendo en cuenta el tamaño de la tabla si esta es inferior a 10 MB. De lo contrario, el segmento inicial se limita a un valor proporcionado por la variable de entorno ADXEXTSIZE (expresado en Gbytes). Este valor no puede superar 1.5 Gbytes.