Error al ejecutar GSEC

2 comentarios

Como seguramente sabes, el programa GSEC.EXE se utiliza para agregar usuarios, cambiar datos de los usuarios, eliminar usuarios y ver cuales son los usuarios admitidos.

Pero si tienes más de una instancia del Firebird instalada entonces a veces podrías ver una pantalla de error similar a la siguiente:

GSEC1

Captura 1. Si haces clic en la imagen la verás más grande

¿Qué significa ese error número 335545106?

Que no puede abrir la Base de Datos en la cual se guardan los nombres y las contraseñas de los usuarios.

En Firebird 2.x el nombre de esa Base de Datos es SECURITY2.FDB y la encontrarás en la misma carpeta donde instalaste al Firebird.

¿Cómo se soluciona ese error?

Si tienes más de una instancia del Firebird instalada entonces cada instancia usa su propio puerto (o así debería ser si se instaló correctamente). Por lo tanto la solución es indicarle que abra el archivo SECURITY2.FDB que corresponde a la instancia que estemos usando en ese momento.

GSEC2

Captura 2. Si haces clic en la imagen la verás más grande

Como puedes ver en la Captura 2. se indico la IP de la computadora y el puerto 3050. Como ese es el puerto que le corresponde a la instancia del Firebird que nos interesa, funcionó perfectamente.

Después de la opción -database se escribió la ruta completa entre comillas porque hay un espacio en blanco en el medio, y en esos casos el Windows exige que se usen comillas.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

45 formas de aumentar la velocidad de las bases de datos de Firebird

Deja un comentario

En un artículo (en inglés) publicado por la empresa IBSURGEON se detallan 45 formas de aumentar la velocidad de las operaciones que realizan los usuarios en una Base de Datos de Firebird.

El artículo en cuestión puedes encontrarlo aquí:

45 ways to speed-up Firebird database

como verás, casi todas esas formas ya fueron motivo de algún artículo de este blog. De todas maneras, siempre es importante leerlo y si tienes algún comentario será bueno conocerlo.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

 

Evitando confusiones con las fechas

Deja un comentario

¿En Firebird la fecha 06/05/2016 se refiere al 6 de mayo de 2016 o se refiere al 5 de junio de 2016? ¿Estás seguro? ¿Estás totalmente seguro? ¿Y la fecha 06-05-2016?

Ya habíamos visto en este artículo como se formatean las fechas en Firebird:

Guardando fechas

para evitar confusiones lo más recomendable es usar el nombre del mes en letras. O las tres primeras letras del nombre del mes.

Si escribimos:

Listado 1.

SELECT
   *
FROM
   VENTAS
WHERE
   VEN_FECHAX = '06/MAY/2016'

no hay confusión posible, es evidente que nos estamos refiriendo al 6 de mayo de 2016, jamás podríamos confundirnos con el 5 de junio de 2016.

Por eso, lo recomendable es usar los nombres de los meses con letras, no con números.

FECHA-1

Tabla 1. Si haces clic en la imagen la verás más grande

Podemos usar los nombres de los meses en inglés o sus abreviaturas, inclusive mezclando mayúsculas con minúsculas. O sea que cualquiera de las siguientes alternativas funcionarán bien:

MiFecha = ’28/September/2016′

MiFecha = ‘September/28/2016′

MiFecha = ’28/SEPTEMBER/2016′

MiFecha = ’28/SEPTember/2016’

MiFecha = ‘SEP/28/2016′

MiFecha = ’28/SEP/2016’

El autor de este blog prefiere la última alternativa porque se escribe poco y se entiende perfectamente, claro que tú puedes elegir cualquiera de las otras pero lo importante es usar letras para identificar a los meses, no números.

Artículos relacionados:

Guardando fechas

El índice del blog Firebird21

El foro del blog Firebird21

 

Firebird 3: verificando el restore antes del backup completo

Deja un comentario

Si ya tienes una Base de Datos creada con una versión anterior del Firebird y deseas utilizarla con Firebird 3 deberás hacer un ciclo backup/restore pero en bases de datos muy grandes ese ciclo puede demorar mucho tiempo, varias horas inclusive.

Y lo peor … después de muchos minutos o de muchas horas de haberse iniciado el ciclo te muestra un mensaje de error, de que la Base de Datos no puede ser restaurada porque encontró algún problema.

¿Por qué?

Porque el Firebird no verifica los metadatos durante las operaciones normales que realizan los usuarios (INSERT, UPDATE, DELETE, SELECT), sino cuando hace un restore con el programa GBAK.EXE o una verificación con el programa GFIX.EXE

¿Qué son los metadatos?

Son los datos usados internamente por el Firebird. Eso incluye a los dominios, las estructuras de las tablas, los índices, los stored procedures, los triggers, etc.

Todos ellos se encuentran dentro de la Base de Datos y fueron colocados allí por el propio Firebird para su manejo interno o por nosotros cuando diseñamos esa Base de Datos.

Los metadatos, así como cualquier dato introducido por los usuarios, pueden dañarse. Eso es muy raro que ocurra, pero no es imposible, ningún archivo de computadora es inmune a la corrupción.

¿Cómo podemos verificar rápidamente que los metadatos estén ok?

Haciendo un ciclo backup/restore pero usando la opción -meta_data

Cuando usamos la opción -meta_data solamente los metadatos son copiados y restaurados, los datos introducidos por los usuarios son ignorados. Con esto por supuesto se consigue que el proceso sea rapidísimo porque los metadatos ocupan una porción ínfima de la Base de Datos en bases de datos muy grandes.

Por ejemplo, podríamos tener una Base de Datos cuyo tamaño es de 20 Gb pero sus metadatos ocupan solamente 20 Mb, es decir 1000 veces menos. Eso implica que el ciclo backup/restore será 1000 veces más rápido.

Haciendo un ciclo backup/restore de los metadatos

GBAK -backup -verbose -meta_data -user SYSDBA -password masterkey MiBaseDatos.FDB MiBackup.FBK

GBAK -create -verbose -meta_data -user SYSDBA -password masterkey MiBackup.FBK MiNuevaBaseDatos.FDB

Si hay algún problema con los metadatos entonces con los dos comandos anteriores “saltará” el error. El programa GBAK nos dirá cual fue el error (o los errores) que encontró y nos dedicaremos a solucionar eso antes de hacer el ciclo backup/restore definitivo.

La ganancia de tiempo puede ser impresionante. Un ciclo backup/restore solamente de los metadatos típicamente no durará más que 2 ó 3 minutos, mientras que un ciclo backup/restore completo puede durar varias horas.

Entonces, lo más inteligente es hacer primero un ciclo backup/restore de solamente los metadatos y en el caso de que todo esté bien hacer el ciclo backup/restore completo. Por supuesto que si al hacer el ciclo backup/restore de los metadatos se encontró algún error (o algunos errores) hay que corregir eso antes de hacer el ciclo backup/restore completo.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

 

Firebird 3: usando bases de datos anteriores

3 comentarios

Ok, ya hemos instalado a Firebird 3, ahora queremos empezar a utilizarlo. ¿Cómo lo hacemos?

Lo más probable es que tengamos bases de datos creadas con versiones anteriores de Firebird. Entonces hay que convertir esas bases de datos al formato que usa Firebird 3.

El Firebird utiliza un número interno llamado ODS (On Disk Structure) para saber con cual versión de Firebird fue creada una Base de Datos. Cada versión del Firebird tiene un número único de ODS. Esos números son:

FIREBIRD3_15

Captura 1. Si haces clic en la imagen la verás más grande

Si no coincide la ODS de una Base de Datos con la versión del Servidor del Firebird entonces no podremos conectarnos a esa Base de Datos.

¿Cómo cambiamos la ODS de una Base de Datos?

Mediante un ciclo backup/restore. Hacemos el backup con la versión actual y el restore con la nueva versión.

IMPORTANTE: Esto solamente funciona en una dirección: de una ODS menor a una ODS mayor.

Ejemplo: Usar una Base de Datos creada con Firebird 2.5 en Firebird 3

firebird3_16

Captura 2. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 2. la conexión falló porque la ODS de la Base de Datos es 11.2 y la ODS que reconoce el Servidor del Firebird es 12.0

Entonces lo que debemos hacer es convertir la ODS de esa Base de Datos a 12.0, para que pueda ser reconocida. Para ello necesitaremos realizar un ciclo backup/restore.

FIREBIRD3_17

Captura 3. Si haces clic en la imagen la verás más grande

En la Captura 3. hicimos el backup con la versión 2.5 del Firebird ¿cómo sabemos eso? Por dos pistas: a) la carpeta donde se encuentra el programa GBAK.EXE y b) el puerto que usamos para conectarnos a la Base de Datos. En nuestros ejemplos usamos el puerto 3050 para Firebird 2.5 y el puerto 3053 para Firebird 3.

Ahora que ya tenemos el backup realizado el siguiente paso es restaurarlo. Para ello, nos ubicamos en la carpeta donde instalamos al Firebird 3 y escribimos:

FIREBIRD3_18

Captura 4. Si haces clic en la imagen la verás más grande

Cuando la restauración finalice tendremos una nueva Base de Datos, de nombre PRUEBA1-3.FDB y cuya ODS será 12.0 y por lo tanto nos podremos conectar a ella usando Firebird 3.

FIREBIRD3_19

Captura 5. Si haces clic en la imagen la verás más grande

Como podemos ver en la Captura 5. no fue necesario especificar el puerto 3053 ¿por qué no? porque para la conexión usamos el programa ISQL.EXE que se instala junto con el Firebird 3. Sin embargo, en otros casos sí necesitaremos especificar dicho puerto:

FIREBIRD3_20

Captura 6. Si haces clic en la imagen la verás más grande

En el string de conexión que vemos en la Captura 6. indicamos la dirección IP de la computadora donde se encuentra la Base de Datos y también el puerto de esa computadora que usa el Servidor del Firebird 3.

Como siempre, hay que indicar además el path completo a la Base de Datos (ese path es desde el punto de vista del Servidor), el nombre de un usuario, y la contraseña de ese usuario.

Conclusión:

Para que en Firebird 3 podamos usar una Base de Datos creada con una versión anterior del Firebird debemos hacer un ciclo backup/restore. El backup lo hacemos con la versión anterior del Firebird y el restore lo hacemos con Firebird 3.

Para conectarnos a la Base de Datos restaurada a veces será necesario especificar el puerto que utiliza el Firebird 3.

Artículos relacionados:

Instalando Firebird 3 (1)

Instalando Firebird 3 (2)

El índice del blog Firebird21

El foro del blog Firebird21

Entendiendo la memoria caché

1 comentario

Este asunto de la memoria caché que usa el Servidor del Firebird parece que no está muy claro, así que trataré de explicarlo en este artículo.

¿Qué es la memoria caché?

Es una porción de la memoria RAM de esa computadora donde se encuentra el Servidor del Firebird.

¿Para qué sirve la memoria caché?

Para devolver muy rápidamente los resultados de los SELECT.

¿Qué se coloca en la memoria caché?

Las páginas que fueron leídas para devolver los resultados que necesita un SELECT.

¿Cómo se obtienen los resultados que necesita un SELECT?

Extrayendo de la Base de Datos toda la página (o páginas) donde se encuentra la fila deseada.

Por ejemplo, si el tamaño de la página es de 4.096 bytes y cada fila de la tabla CLIENTES ocupa 100 bytes entonces en cada página de la tabla CLIENTES se podrán colocar 4.096 / 100 = 40 filas.

En una página jamás se mezclan datos de varias tablas. Si una página se reservó para ser usada por la tabla CLIENTES entonces solamente filas de la tabla CLIENTES podrá contener esa página.

En nuestro ejemplo, cada página podrá contener 40 filas (o registros) de la tabla CLIENTES.

Si escribimos un SELECT como el siguiente:

Listado 1.

SELECT
   *
FROM
   CLIENTES
WHERE
   CLI_IDENTI = 12345

Nuestro SELECT nos devolverá una sola fila, la fila cuyo identificador es 12345, pero extrajo de la Base de Datos toda la página donde se encuentra esa fila, o sea que extrajo 40 filas aunque solamente 1 de esas filas nos muestre.

Pero ahora las 40 filas, la que nos mostró y las 39 restantes que no nos mostró, están en la memoria caché.

 ¿Por qué se usa la memoria caché?

Porque para cualquier programa de computadora es muchísimo más rápido leer algo que se encuentra en la memoria RAM que leer algo que se encuentra en el disco duro. Extraer de la memoria RAM es miles de veces más rápido que extraer del disco duro.

Si ahora ejecutamos este SELECT:

Listado 2.

SELECT
   *
FROM
   CLIENTES
WHERE
   CLI_IDENTI = 12346

Y la fila cuyo identificador es 12346 se encuentra en la misma página que la fila cuyo identificador es 12345 entonces la fila que tiene el identificador 12346 ya está en la memoria caché. Y como ya está en la memoria caché entonces el Servidor del Firebird extraerá de allí los datos de esa fila, no los obtendrá del disco duro. En consecuencia, devolverá esos datos muy rápidamente.

¿Cómo se diferencian Classic y SuperServer en el uso de la memoria caché?

En Classic cada conexión usa su propia memoria caché. En nuestro ejemplo, si Juan ejecutó el SELECT del Listado 1. y luego María ejecutó el SELECT del Listado 2. entonces María no se benefició del SELECT ejecutado por Juan, ya que la memoria caché de María es totalmente independiente de la memoria caché de Juan. Pero si Juan ejecutó el SELECT del Listado 1. y después Juan también ejecutó el SELECT del Listado 2. entonces sí Juan se benefició de ya tener en su memoria caché los datos que necesitaba.

En SuperServer la memoria caché es compartida entre todas las conexiones. En nuestro ejemplo, si Juan ejecutó el SELECT del Listado 1. y después María ejecutó el SELECT del Listado 2. entonces María obtuvo un gran beneficio: los datos que necesitaba ya se encontraban en la memoria caché y por eso los recibió muy rápidamente.

 ¿Cómo se establece el tamaño de la memoria caché?

El tamaño de la memoria caché se calcula con esta fórmula:

Tamaño_memoria_caché = Cantidad_de_páginas * Tamaño_de_cada_página

La Cantidad_de_páginas debe estar entre 0 y 131.072. El Tamaño_de_cada_página debe ser 4.096 bytes, 8.192 bytes, ó 16.384 bytes.

El Tamaño_memoria_caché por supuesto no debe ser mayor que la memoria RAM libre disponible en la computadora donde está instalado el Servidor del Firebird.

¿Cómo se elige el tamaño de cada página?

Al crear la Base de Datos se puede elegir el tamaño de sus páginas, que como ya vimos debe ser uno de los siguientes: 4.096, 8.192, 16.384

Si no se eligió uno de ellos entonces el Servidor del Firebird usará 4.096

Se puede cambiar el tamaño de cada página haciendo un ciclo backup/restore. Al hacer el restore tenemos la opción de elegir el tamaño que tendrá cada página de la Base de Datos restaurada.

¿Cómo se elige la cantidad de páginas?

Primero, debemos recordar que esa cantidad debe estar entre 50 y 131.072

Segundo, no debemos sobrepasar la memoria RAM disponible.

Ejemplo: la computadora donde se instaló el Servidor del Firebird tiene 32 Gb de memoria RAM. Dejaremos 16 Gb para ser usados por el Sistema Operativo y los demás programas. Por lo tanto, para nuestra memoria caché reservaremos los restantes 16 Gb.

Nuestra Base de Datos tiene páginas de 4.096 bytes

Memoria RAM disponible = 16 Gb = 16 * 1.024 * 1.024 * 1.024 = 17.179.869.184 bytes

Tamaño de cada página = 4.096 bytes

Cantidad de páginas = 4.194.304

No podemos usar 4.194.304 páginas, la cantidad máxima que podemos usar es 131.072, el Firebird no nos permite usar más.

Y como cada página ocupa 4.096 bytes entonces nuestra memoria caché puede ocupar como máximo 131.072 * 4.096 = 536.870.912 bytes = 0,5 Gb

Si la arquitectura es SuperServer y el tamaño de cada página es de 4.096 bytes entonces el caché no puede ser mayor que 0,5 Gb. O sea, que tener disponibles 16 Gb de RAM es un gran desperdicio.

Podemos aumentar el tamaño del caché usado por SuperServer si aumentamos el tamaño de cada página. El tamaño de página máximo que podemos usar es 16.384 bytes, entonces: 131.072 * 16.384 = 2.147.483.648 bytes = 2 Gb

En otras palabras, si la arquitectura es SuperServer la cantidad máxima de memoria RAM del Servidor que podemos usar es de 2 Gb. Ni un byte más.

Entonces, si tenemos la posibilidad de usar más de 2 Gb de memoria RAM (como en este ejemplo) lo que debemos hacer es cambiar la arquitectura a Classic.

En Classic la memoria caché es por conexión. O sea que en nuestros cálculos debemos considerar la cantidad de conexiones concurrentes que podemos tener como máximo. No la cantidad normal de conexiones ni la cantidad mínima de conexiones, sino la cantidad máxima de conexiones que podríamos tener.

Por ejemplo, tenemos 70 usuarios pero algunos se conectan más de una vez al mismo tiempo, hemos determinado que nunca hay más de 90 conexiones concurrentes pero por un motivo de seguridad supondremos que son 100.

El tamaño de  cada página de nuestra Base de Datos es de 4.096 bytes.

Entonces:

16 Gb / 100 / 4.096 = 16 * 1.024 * 1.024 * 1.024 / 100 / 4.096 = 41.943 páginas

41.943 páginas * 4.096 bytes = 171.798.691 bytes

O sea, que podremos tener hasta 100 conexiones concurrentes, cada una de ellas usando 171.798.691 bytes de la memoria RAM del Servidor como su propia memoria caché.

Y como 171.798.691 bytes de memoria para cada conexión es muchísimo, entonces todos los SELECT de todos los usuarios serán rapidísimos.

¿Dónde se especifica la cantidad de páginas que debe usar el Servidor del Firebird?

En el archivo FIREBIRD.CONF, que encontrarás en la misma carpeta donde instalaste al Firebird. En ese archivo existe una entrada llamada DefaultDbCachePages. Debes borrar el símbolo de numeral que se encuentra a la izquierda (el símbolo de numeral indica que todo lo que se encuentra a su derecha es un comentario) y escribir la cantidad de páginas que quieres tener.

CACHE-1

Captura 1. Si haces clic en la imagen la verás más grande

CUIDADO: La cantidad de páginas es por Base de Datos. Eso significa que si puedes tener 2 bases de datos abiertas debes dividir la cantidad calculada por 2. Si puedes tener 3 bases de datos abiertas debes dividir la cantidad calculada por 3, y así sucesivamente.

En el archivo FIREBIRD.CONF se especifica la cantidad de páginas que usarán todas las bases de datos, o sea que es el valor por defecto, el que se usará si no se elige otra cantidad. Si queremos especificar para una Base de Datos en particular entonces usamos al programa GFIX.EXE para eso. Su opción -buffers nos permite determinar la cantidad de páginas que usará esa Base de Datos.

CACHE-2

Captura 2. Si haces clic en la imagen la verás más grande

En la Captura 2. le estamos diciendo que use 1.200 páginas para la Base de Datos BLOG_DB.FDB

CACHE-3

Captura 3. Si haces clic en la imagen la verás más grande

Y en la Captura 3. podemos ver la cantidad de páginas (Page buffers) usadas y el tamaño (Page size) de cada página. Entonces, 1.200 * 4.096 = 4.915.200 bytes

Si la arquitectura es Classic entonces esos 4.915.200 bytes serán para cada conexión y si la arquitectura es SuperServer entonces esos 4.915.200 bytes serán para todas las conexiones.

¿Cómo se coloca a una tabla en la memoria caché?

En la memoria caché se colocan las páginas que necesitó un SELECT. No se colocan datos allí cuando se ejecuta un INSERT, un UPDATE, o un DELETE. Solamente cuando se ejecuta un SELECT. Para colocar a toda una tabla en la memoria caché podemos hacerlo mediante SELECT * FROM MiTabla o mediante SELECT COUNT(*) FROM MiTabla. Esta última opción es preferible porque es mucho más rápida que la primera. ¿El motivo? Pone a cada página de MiTabla en la memoria caché pero no devuelve el contenido de esas páginas al Cliente.

Resumiendo:

  • La memoria caché es una porción de la memoria RAM de la computadora donde se instaló al Servidor del Firebird
  • Se usa la memoria caché para devolver muy rápidamente los resultados de los SELECT
  • Si los datos que debe devolver un SELECT se encuentran en la memoria caché obtenerlos de allí será mucho más rápido que obtenerlos del disco duro
  • En la memoria caché no se colocan filas ni tablas, se colocan páginas
  • Cuando se ejecuta un SELECT el Servidor del Firebird no extrae de la Base de Datos las filas que necesita ese SELECT sino las páginas donde se encuentran esas filas
  • En Classic la memoria caché de cada conexión es independiente de la memoria caché de las otras conexiones. En SuperServer la memoria caché es compartida entre todas las conexiones.
  • Si el tamaño de la Base de Datos es menor que 2 Gb entonces es recomendable que la arquitectura sea SuperServer. Si el tamaño de la Base de Datos es mayor que 2 Gb entonces es recomendable que la arquitectura sea Classic.
  • En el archivo FIREBIRD.CONF se puede especificar la cantidad de páginas que usará cada Base de Datos. Para una Base de Datos en particular se puede cambiar la cantidad de páginas usando el programa GFIX.EXE con la opción -buffers
  • El tamaño de cada página de la Base de Datos se determina cuando es creada, puede ser cambiado más adelante mediante un ciclo backup/restore
  • Los comandos INSERT, UPDATE, y DELETE no colocan datos en la memoria caché. Solamente el comando SELECT lo hace
  • Para poner a toda una tabla en la memoria caché se puede escribir: SELECT COUNT(*) FROM MiTabla. Ese comando colocará a cada página de MiTabla en la memoria caché.

Artículos relacionados:

Entendiendo las páginas de la Base de Datos

Eligiendo el tamaño adecuado de las páginas de la Base de Datos

SuperServer: optimizando el tamaño del caché

Classic: optimizando el tamaño del caché

Optimizando SuperServer: poniendo toda la Base de Datos en la memoria caché

El índice del blog Firebird21

El foro del blog Firebird21

 

Desinstalando Firebird 3

Deja un comentario

Si por algún motivo quieres desinstalar a Firebird 3, los pasos a seguir son los siguientes:

  1. Hacer clic en Inicio | Panel de Control | Programas y características | Firebird 3.0.0
  2. Hacer clic con el botón derecho
  3. Hacer clic en la opción Desinstalar

FIREBIRD3_D_1

Captura 1. Si haces clic en la imagen la verás más grande

Alternativamente, puedes ubicarte en la carpeta donde instalaste al Firebird 3 y ejecutar el archivo UNINS000.EXE

FIREBIRD3_D_2

Captura 2. Si haces clic en la imagen la verás más grande

Debes hacerlo como se muestra en la Captura 1. o como se muestra en la Captura 2. porque cuando se instala el Firebird 3, a) se modifica el Registro del Windows y b) se lo instala como un Servicio. Al desinstalarlo correctamente esas entradas son eliminadas. Si lo desinstalas entonces incorrectamente quedará “basura” en la computadora.

Artículos relacionados:

Instalando Firebird 3 (1)

Instalando Firebird 3 (2)

El índice del blog Firebird21

El foro del blog Firebird21

Older Entries