Aprendiendo o mejorando tu Firebird

4 comentarios

Bueno, ya conoces algo de Firebird y te parece una buena idea conocerlo mucho mejor, con mayor profundidad. ¿Qué debes hacer para conseguir tu objetivo?

  1. Ser paciente
  2. Marcarte un plan
  3. Hacerlo un hábito

En primer lugar, debes ser paciente porque aprender Firebird engloba a muchos aspectos diferentes, relacionados pero diferentes, y aprenderlos a todos en un día, en una semana o inclusive en un mes no es posible, nadie lo ha conseguido, nadie podría conseguirlo.

En segundo lugar, debes tener un plan de aprendizaje, si no te organizas, si hoy estudias algo y mañana estudias algo muy distinto entonces tu progreso será mucho más lento que si tienes marcados unos objetivos que vas cumpliendo paso a paso.

En tercer lugar, debes convertir en un hábito tu tarea de aprender Firebird porque estudiar de vez en cuando no te funcionará. Lo más conveniente es estudiarlo todos los días, aunque sea pocos minutos por día, para que tu cerebro se acostumbre y tenga siempre presente las sentencias y la forma de razonar cuando se enfrenta a un problema de Firebird. Es mucho mejor estudiar una hora cada día que estudiar un día 7 horas y nada en los siguientes 6 días. Esa hora diaria te resultará de mucho más provecho.

Un plan de estudio

Ok, has decidido tener un plan de estudio. Muy bien. Ahora la pregunta es: ¿cuál plan? Y eso dependerá del motivo o razón por la cual estás queriendo aprender Firebird. ¿Qué quieres hacer? ¿Para qué quieres adquirir nuevos conocimientos? ¿Para diseñar bases de datos? ¿Para administrarlas? ¿Para escribir consultas rápidas? ¿Para todo eso?

Supongamos por un instante que quieres aprender todo, para ser un experto de primer nivel. Ok. Perfecto. Muy buena la intención. Entonces necesitarás:

  • Aprender diseño de bases de datos relacionales. Hay mucho y muy buen material en Internet. Un libro didáctico y muy útil para principiantes es: «Database Design for Mere Mortals» de Michael J. Hernández, todo lo básico y un poco más encontrarás allí.
  • Aprender SQL. Tendrás que aprender SQL porque es el lenguaje que utiliza Firebird para las denominadas 4 grandes operaciones: INSERT, UPDATE, DELETE, SELECT. El lenguaje SQL está estandarizado pero nadie sigue el estándar al pie de la letra, cada fabricante de motores de bases de datos relacionales (Oracle, SQL Server, MySQL, PostgreSQL, y por supuesto Firebird) le agrega o le quita lo que se le ocurre. Sin embargo, aunque nadie siga el estándar las similitudes entre una implementación y otra son muy grandes. Eso significa que cualquier buen libro sobre SQL te servirá. Por ejemplo: «Beginning SQL Queries from Novice to Professional» de Clare Churcher y desde luego «SQL Queries for Mere Mortals» de John L. Viescas y Michael J. Hernández.
  • Practicar mucho. Las lecturas son muy buenas porque te darán los conocimientos teóricos que necesitarás para realizar eficientemente tus tareas pero si no llevas a la práctica lo leído jamás serás bueno porque recién con la práctica uno puede comprobar como funciona realmente todo
  • Leer los artículos de este blog. No existe algo más completo en idioma castellano. Para ver a los artículos clasificados puedes ingresar a: https://firebird21.wordpress.com/category/indice-de-este-blog/
  • Preguntar. Si después de mucho intentar algo no consigues encontrar la solución, tu última alternativa es preguntar a otras personas que podrían ayudarte. Pero recuerda que si quieres aprender lo mejor es siempre encontrar por tí mismo las respuestas correctas. En este foro puedes escribir tus preguntas: http://yoforeo.com/firebird21/index.php

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Copiando completamente o parcialmente una Base de Datos (1)

1 comentario

A veces puedes querer copiar una Base de Datos completa, con todo su contenido, pero a veces puede interesarte copiar solamente una parte de ella. Por lo tanto, tus opciones serían:

  1. Copiarla totalmente. Con todos sus metadatos y todos sus datos
  2. Copiar solamente los metadatos. Es decir, su estructura
  3. Copiar todos los metadatos y el contenido de algunas tablas
  4. Copiar algunos metadatos y el contenido de algunas tablas

Como el tema es largo, será tratado en 2 artículos. En este veremos como realizar esas tareas manualmente, o sea sin usar un programa de administración gráfica y en el siguiente artículo usaremos un programa de administración gráfica.

Opción 1. Copiarla totalmente. Con todos sus metadatos y todos sus datos

Para este caso lo más recomendable es hacer un backup usando el programa GBAK. ¿Por qué es lo más recomendable? porque al hacer un backup con GBAK se elimina la basura que contenía la Base de Datos original y en el backup no hay basura, ni índices (que serán creados cuando se restaure el backup), y el identificador de todas las transacciones del backup es puesto en cero.


GBAK -b MiBaseDatos.FDB MiBackup.FBK -user SYSDBA -password masterkey

Si el Servidor del Firebird no está funcionando también se puede copiar la Base de Datos con el Explorador de Windows o algún programa similar. ¿Por qué el Servidor del Firebird no debe estar funcionando? Porque si lo está y alguien está conectado, la Base de Datos puede corromperse. Y si nadie está conectado existe el riesgo (pequeño, pero existe) de que el Servidor esté realizando alguna tarea en la Base de Datos (por ejemplo, un sweep). Por lo tanto, copiar con el Explorador del Windows solamente es seguro si el Servidor del Firebird está apagado.

Opción 2. Copiar solamente los metadatos. Es decir, su estructura

El programa GBAK tiene la opción -m la cual copia solamente los metadatos. Su sintaxis es:


GBAK -b -m MiBaseDatos.FDB MiBackup.FBK -user SYSDBA -password masterkey

Opción 3. Copiar todos los metadatos y el contenido de algunas tablas

Para este caso lo mejor es crear un archivo de script con el contenido completo de la Base de Datos y luego eliminar lo que no nos interesa, modificar lo que queremos cambiar, y dejar como está a lo demás.

El programa ISQL tiene una opción -extract que sirve para crear un script de toda la Base de Datos.

COPIAR04

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

En la Captura 1. vemos que todo el contenido de la Base de Datos DEISY.FDB fue copiado al archivo de script llamado DEISY.SQL

COPIAR05

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

El archivo de script DEISY.SQL por supuesto que es muchísimo más largo, en la Captura 2. se muestran solamente las primeras líneas.

Ahora, tenemos la posibilidad de eliminar lo que ya no nos interesa tener y de modificar cualquier cosa. Podemos cambiar el nombre o el contenido de los dominios, de las tablas, de los stored procedures, etc. Lo que se nos ocurra.

Después de haber eliminado y modificado todo lo que quisimos, para generar una nueva Base de Datos, debemos quitarle el comentario a la línea CREATE DATABASE, poner el nombre que tendrá la nueva Base de Datos, y el usuario y la contraseña que la creará.

COPIAR06

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

Para crear la Base de Datos llamada DEISY2.FDB, ingresamos a ISQL y con el comando INPUT ejecutamos el script. Todo lo que esté escrito dentro del script será ejecutado.

COPIAR07

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

Si todo está bien, la nueva Base de Datos será creada. Si hay algún error, habrá que encontrar cual es el error y corregirlo. Luego, se vuelve a intentar crear la Base de Datos.

Copiando solamente el contenido de algunas tablas

Hasta ahora hemos visto como copiar a una Base de Datos completa, con todos sus metadatos y todos sus datos. Pero ¿y si queremos copiar solamente el contenido de algunas tablas?

Para eso entramos a ISQL, nos conectamos a una Base de Datos, y usando el comando OUTPUT enviamos a un archivo de texto todo lo que hacemos, tal y como vemos a continuación:

COPIAR01

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

La primera línea le indica al ISQL que todo lo que se escriba a continuación se guarde en un archivo de texto. No se verá en la pantalla, sino que se guardará en el archivo cuyo nombre se escriba después de la palabra OUTPUT.

Ese nombre puede ser cualquiera y puede tener cualquier extensión. Para los datos se acostumbra a ponerle la extensión .DAT pero eso no es obligatorio.

El OUTPUT que se encuentra en la tercera línea se usa para que la salida vuelva a verse en la pantalla, o sea que dejará de enviarse al archivo de texto.

Entre el primer OUTPUT y el segundo OUTPUT puede haber muchas líneas, no solamente una como en este ejemplo.

En el contenido del archivo de texto BANCOS.DAT se verá algo como:

COPIAR02

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

Donde, como puedes ver, se muestra el nombre de cada columna y el contenido de cada fila.

Opción 4. Copiar algunos metadatos y el contenido de algunas tablas

Es igual a la Opción 3.

Conclusión:

Como has podido ver en este artículo, con Firebird tenemos la posibilidad de realizar backups completos o parciales de nuestra Base de Datos.

Enviar el backup a un archivo de script tiene la gran ventaja de que todo es legible y así podríamos revisar ese script y descubrir errores o mejoras que se podrían realizar.

Artículos relacionados:

Entendiendo a los scripts

Usando scripts para documentar la Base de Datos

Ejecutando un script desde Visual FoxPro

El índice del blog Firebird21

El foro del blog Firebird21

Corrección a un artículo del blog

Deja un comentario

En el artículo:

Error: Too many Contexts of Relation/Procedures/Views. Maximum allowed is 255

había unos pequeños errores que ya están corregidos, así que lo aconsejable es que vuelvas a leer ese artículo, para no quedarte con información errónea en la cabeza.

Artículos relacionados:

Error: Too many Contexts of Relation/Procedures/Views. Maximum allowed is 255

El índice del blog Firebird21

El foro del blog Firebird21

Duplicar una tabla

Deja un comentario

A veces necesitamos una tabla que tendrá la misma estructura o una estructura muy similar, a la de una tabla ya existente.

En casos así nos ahorraríamos un montón de tiempo si en lugar de volver a escribir todas las columnas, la Primary Key, las Foreign keys, los Check, los Unique, los índices y quizás los datos, pudiéramos hacer todo eso automáticamente.

Bien, la buena noticia es que sí se puede.

Todos los programas administradores gráficos tienen esa opción, en este artículo mostraremos como hacerlo con el EMS SQL Manager.

DUPLICATE01

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

  1. Nos conectamos a la Base de Datos donde se encuentra la tabla que queremos duplicar
  2. Expandimos «Tables» para que nos muestre los nombres de todas las tablas
  3. Hacemos clic con el botón derecho sobre el nombre de la tabla que queremos duplicar
  4. Hacemos clic en la opción: «Duplicate Table ‘MiTabla'»

DUPLICATE02

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

En «Target database» elegimos a la Base de Datos que tendrá a la nueva tabla. Puede ser cualquier Base de Datos a la cual estemos conectados. Si no estamos conectados a esa Base de Datos, debemos conectarnos y repetir el proceso desde la Captura 1.

En «New object name» ponemos el nombre que tendrá la nueva tabla. Si se copiará dentro de la misma Base de Datos, el nombre debe ser distinto (porque no podemos tener 2 tablas con el mismo nombre). Si se copiará en otra Base de Datos el nombre puede ser igual (o sea que podemos borrar el sufijo _NEW).

Si marcamos «Copy data» entonces se copiará la estructura de la tabla (es decir, sus metadatos) y también el contenido de todas las filas que contiene.

Si marcamos «Deactivate triggers while data copying» entonces las filas de la tabla original se copiarán en la nueva tabla sin que se ejecuten los triggers de esta última. ¿Cuándo haríamos algo así? Por ejemplo cuando queremos que los identificadores de ambas tablas sean idénticos. Por ejemplo, los identificadores de la tabla original son 1, 4, 8, 9, 11, 12. Si queremos que la nueva tabla tenga esos mismos identificadores entonces debemos desactivar los triggers porque si no los desactivamos los identificadores de la nueva tabla serán: 1, 2, 3, 4, 5, 6.

Si marcamos «Copy privilegies» entonces se copiarán los derechos de acceso de los usuarios y de los roles. Si no marcamos esta opción entonces a la nueva tabla solamente podrán acceder el usuario SYSDBA, el creador de la Base de Datos, y los usuarios que se conecten con el rol RDB$ADMIN. En cambio si la marcamos, todos los usuarios y roles que tenían acceso a la tabla original también tendrán acceso a la nueva tabla.

DUPLICATE03

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

En la siguiente pantalla (que vemos en la Captura 3.) debemos elegir los nombres que tendrán los nuevos objetos. Si la tabla será copiada en la misma Base de Datos no podemos tener dos objetos con el mismo nombre, por eso el EMS SQL Manager automáticamente les agregó el sufijo _NEW a todos los objetos. De esa manera nos ayuda para que no tengamos nombres de objetos duplicados. Sin embargo, si la tabla será copiada en otra Base de Datos podríamos eliminar todos los sufijos _NEW para que los nombres de los objetos de la tabla original y de la tabla duplicada sean idénticos.

DUPLICATE04

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

En la Captura 4. vemos que podemos eliminar los sufijos _NEW sin problema. Pero recuerda que esto solamente puedes hacer si la tabla se copiará a otra Base de Datos.

DUPLICATE05

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

El último paso, tal y como puedes ver en la Captura 5. es hacer clic sobre el botón «Run». Si todo está ok, entonces la tabla será duplicada.

¿Qué puede salir mal?

A veces cuando queremos duplicar una tabla no lo conseguimos porque ocurre algún error. Algunos de los más comunes son:

  • «Name longer than database column size». El nombre de los objetos en Firebird es como máximo 31. Y a veces cuando le agrega el sufijo _NEW se sobrepasa ese límite. Verifica en la Captura 3. y en la Captura 4. que no haya nombres con más de 31 caracteres.
  • «Table unknown». Si alguna de las restricciones o de los triggers en la tabla original hace referencia a una tabla que no se encuentra en la Base de Datos destino, verás este error. La solución es primero copiar esa otra tabla.
  • «Tabla unknown». También verás este error si la tabla no pudo crearse. Eso generalmente ocurre cuando la tabla original usa un dominio que no se encuentra en la Base de Datos destino. La solución por lo tanto es duplicar previamente el dominio inexistente.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Error: Too many Contexts of Relation/Procedure/Views. Maximum allowed is 255

1 comentario

Cuando escribes un stored procedure, un execute block, o una view hay un límite a la cantidad de contextos que puedes tener.

¿Qué es un contexto?

Es cualquier comando del Firebird que hace referencia a una tabla (o más de una).

Ese límite es por declaración, no por stored procedure, execute block o view. No hay que confundir.

Las declaraciones posibles son:

  • INSERT
  • UPDATE
  • DELETE
  • SELECT

Ninguna de esas declaraciones puede tener más de 255 contextos. Ese es el límite máximo.

Pero además, cada GROUP BY y cada UNION suma 1 contexto más.

Ejemplos:

  • Un SELECT a una tabla tiene un contexto
  • Un SELECT con un JOIN tiene dos contextos
  • Un SELECT con dos JOIN tiene tres contextos
  • Un SELECT con una subconsulta tiene dos contextos
  • Un SELECT con dos subconsultas tiene tres contextos
  • Un SELECT con una subconsulta y con un JOIN tiene tres contextos
  • Un SELECT autoreferenciado (ambas tablas del JOIN son la misma) tiene dos contextos
  • Un SELECT con un GROUP BY tiene dos contextos
  • Un INSERT que referencia a una view, tiene un contexto por cada tabla que es referenciada en la view
  • Un UPDATE que referencia a una view, tiene un contexto por cada tabla que es referenciada en la view

Cada INSERT, cada UPDATE y cada DELETE suma 2, por las seudo-variables NEW y OLD de los triggers. En los demás casos se suma 1.

La cantidad máxima de contextos que puedes tener (hasta la versión Firebird 3.0) es de 255, si superas esa cantidad entonces verás el mensaje de error que da título a este artículo.

Listado 1.


SELECT <mis_columnas_1> FROM MiTabla1;

UNION

SELECT <mis_columnas_2> FROM MiTabla2;

En el Listado 1. hay 3 contextos.

Listado 2.


INSERT INTO MiTabla <mis_columnas> VALUES <lista_valores>;

INSERT INTO MiTabla <mis_columnas> VALUES <otros_valores>;

En el Listado 2. el primer INSERT tiene 2 contextos y el segundo INSERT también tiene 2 contextos. Esos contextos no se suman, cada uno de ellos es independiente, porque lo que vale es la cantidad de contextos que cada declaración tiene.

Solución:

Si el Firebird te muestra este mensaje de error entonces tienes que disminuir la cantidad de contextos. Eso puedes hacerlo de varias maneras, por ejemplo usando una tabla CTE en lugar de varias subconsultas, o cambiando la condición de filtro del WHERE, o disminuyendo la cantidad de JOIN, etc.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Entendiendo WITH LOCK

2 comentarios

Este artículo es para expertos solamente.

Como seguramente ya sabes, en Firebird lo preferible y lo recomendable es que las transacciones sean optimistas. Sin embargo hay algunos casos en que se necesita que una transacción sea pesimista.

Estos casos son rarísimos y si los necesitas con frecuencia entonces evidentemente aún no has entendido como funciona Firebird.

Hay una cláusula del comando SELECT que te permite tener transacciones pesimistas pero si no entiendes muy pero muy bien como funcionan las transacciones en Firebird, no deberías usar esa cláusula jamás.

Este artículo es para expertos solamente.

Sintaxis

SELECT
   ...
FROM
   MiTabla
[WHERE
   MiCondición]
[FOR UPDATE [OF...]]
[WITH LOCK]

WITH LOCK realiza un bloqueo pesimista a la fila (o filas) del conjunto resultado del SELECT. Lo recomendable es que:

  1. La cantidad de filas bloqueadas sea muy pequeña (lo ideal es que sea una sola fila)
  2. La aplicación controle muy bien el bloqueo

Si usas WITH LOCK a veces conseguirás que las filas sean bloqueadas y a veces no. Si otra transacción ha previamente bloqueado a alguna de esas filas entonces WITH LOCK fallará.

Si WITH LOCK tuvo éxito entonces ninguna otra transacción podrá hacerle un UPDATE ni un DELETE a las filas involucradas, hasta que la transacción que hizo el WITH LOCK finalice. Por eso el bloqueo es pesimista.

Cuando se incluye la cláusula FOR UPDATE el bloqueo es aplicado a cada fila, una por una, a medida que son extraídas por el Servidor. Es por lo tanto posible (aunque muy improbable, pero posible) que un bloqueo que pareció tener éxito cuando se hizo el SELECT falle más adelante cuando se quiere hacer el UPDATE. ¿Por qué? Porque otra transacción concurrente bloqueó a esa fila e hizo un COMMIT antes de que el SELECT … WITH LOCK finalizara.

Esa es otra razón más para que el SELECT … WITH LOCK involucre a muy pocas filas (idealmente, a una sola fila). De esta manera se minimizará el riesgo.

Un SELECT … WITH LOCK te garantiza que:

  1. Todas las filas del conjunto resultado que obtuviste están bloqueadas
  2. Todas las demás filas no están bloqueadas

Un SELECT … WITH LOCK no te puede garantizar que:

  1. Todas las filas que cumplen con la condición del filtro del WHERE estén bloqueadas

Entendamos mejor este último punto.

Supongamos que si escribes tu SELECT … WHERE obtienes 100 filas, pero al escribir SELECT … WHERE … WITH LOCK obtienes 98 filas. Eso podría ocurrir si otra transacción concurrente ha bloqueado a las 2 filas faltantes entre el inicio y el fin del SELECT … WITH LOCK. Entonces el SELECT … WITH LOCK te garantiza que hay 98 filas bloqueadas pero no te garantiza que no hay filas que cumplen la condición de filtro del WHERE pero que no fueron bloqueadas (en este ejemplo, hay 2 filas que cumplen la condición del WHERE pero no están bloqueadas).

¿Recuerdas que lo ideal es que el SELECT … WITH LOCK devuelva una sola fila? Ahora se entiende mejor el motivo.

Bloqueo de filas

El SELECT … WITH LOCK realiza (si es que puede) un bloqueo pesimista pero siempre cumpliendo con los parámetros de las transacciones.

Eso significa que si el modo de bloqueo de la transacción donde se encuentra el SELECT … WITH LOCK es WAIT y otra transacción previamente ha bloqueado a una fila de su conjunto resultado, esperará hasta que la otra transacción finalice. Si su modo de bloqueo es NO WAIT entonces inmediatamente finalizará con error, y así con los demás parámetros.

¿Dónde no se puede usar SELECT … WITH LOCK?

  • En una subconsulta
  • En un JOIN
  • Con el operador DISTINCT
  • Con la cláusula GROUP BY
  • Con las funciones agregadas: COUNT(), SUM(), AVG(), MAX(), MIN(), LIST()
  • En una vista
  • En la salida de un stored procedure seleccionable
  • En una tabla externa

Conclusión:

En Firebird muy raramente se necesita que una transacción sea pesimista pero si ese es el caso hay varias maneras de conseguirlo, una de ellas es mediante el comando SELECT … WITH LOCK.

Si se usa este comando hay que tratar de que el conjunto resultado tenga muy pocas filas, idealmente una sola fila.

Si la condición de filtro de la cláusula WHERE cumple más de una fila, no se puede garantizar que el SELECT … WITH LOCK haya bloqueado a todas esas filas porque otra transacción concurrente podría haber realizado algún bloqueo.

Artículos relacionados:

Entendiendo a las transacciones

Evitando confilctos en las transacciones

Evitando actualizaciones concurrentes del mismo registro

Transacciones optimistas y transacciones pesimistas

Algo más sobre transacciones optimistas y transacciones pesimistas

¿Por qué en Firebird es preferible que las transacciones sean optimistas?

El índice del blog Firebird21

El foro del blog Firebird21

Teniendo los backups en la nube

2 comentarios

La gran importancia de tener backups actualizados supongo que no es necesario recalcar a los profesionales de la Informática. Todos sabemos demasiado bien que si una Base de Datos se daña o se corrompe un backup actualizado salvará la situación.

Y nuestra buena fama profesional.

Ahora la pregunta es: después de tener el backup ¿dónde lo guardamos?

Tradicionalmente se aconsejaba tener siempre dos copias del backup. Una de ellas muy cerca del Servidor y otra muy lejos de él, quizás en otra ciudad.

La copia cercana al Servidor la usábamos si se dañó el disco duro, se corrompió la Base de Datos o algo así. Necesitábamos acceder a esa copia lo más rápidamente posible y por lo tanto debíamos tenerla bien cerca. La copia alejada del Servidor la usaríamos si ocurrió una catástrofe como un incendio, un robo, un atentado terrorista, etc. Entonces, aunque la habitación donde se encontraba el Servidor fue destruida teníamos un backup guardado en lugar seguro (en el domicilio del propietario de la Empresa, por ejemplo).

Esa metodología puede seguir usándose, pero desde hace unos cuantos años tenemos otra alternativa, muy interesante: guardar los backups en la nube. De esta manera obtendríamos las dos ventajas anteriores y de una sola vez: nuestros backups estarían muy cerca (a unos clics de distancia) y en caso de catástrofe no sufrirían daño (porque se encuentran en otras computadoras y posiblemente en otro país). Claro que esto no obvia la necesidad de guardar los backups en dispositivos de almacenamiento a nuestro alcance (CD, DVD, pen-drive, otro disco duro, etc.)

En Internet podemos encontrar muchos sitios gratuitos que permiten el almacenamiento de archivos. Pero el tema no es solamente guardar nuestros archivos en esos sitios sino que también la tarea se realice lo más automáticamente posible, con un mínimo de trabajo de nuestra parte.

En este artículo nos referiremos a dos de esos sitios: DropBox y Mega.

Ambos funcionan de la misma manera:

  1. Abres una cuenta
  2. Descargas e instalas un programa
  3. Determinas cuales son las carpetas que serán sincronizadas
  4. Todos los archivos que guardes en las carpetas elegidas serán subidos a Internet
  5. Si necesitas recuperar uno de esos archivos, ingresas al sitio con tu nombre de usuario y contraseña y descargas el archivo

Como ves, todo es muy simple, muy fácil y muy sencillo.

Backup en la nube usando DropBox

Primero, ingresamos al sitio:

https://www.dropbox.com/es/

NUBE01

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

NUBE02

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

Como nos dice el mensaje, después de finalizada la descarga debemos instalar al Dropbox en nuestra computadora.

Una vez que esté instalado deberemos iniciar sesión.

NUBE03

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

(A veces iniciar sesión se demora algunos minutos, no desesperes, ya se iniciará).

NUBE05

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

Si ves el cuadro de diálogo de la Captura 4. eso significa que en tu disco C: (que es en donde por defecto sincroniza las carpetas el Dropbox) tienes muy poco espacio. La cuenta gratuita te provee de 2.5 Gb así que en tu disco C: debes tener al menos ese espacio libre.

NUBE06

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

Si todo está ok, verás la Captura 5.

Para crear la carpeta que por defecto usará el Dropbox debes hacer clic en el botón «Abrir mi carpeta de Dropbox», si prefieres que la carpeta a sincronizar sea otra entonces debes hacer clic en «Configuración avanzada» y verás la Captura 6.

NUBE07

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

El paso (1) es elegir la carpeta que queremos sincronizar. El paso (2) es abrir esa carpeta para que sea creada.

A partir de este momento, todos los archivos que guardemos en la carpeta elegida, se subirán a Internet. Tendremos así un resguardo seguro para todos nuestros archivos.

Si más adelante queremos cambiar esa carpeta o alguna de las demás opciones del Dropbox entonces hacemos clic en el icono que se encuentra en la barra de tareas del Windows, luego en la ruedita dentada y luego en «Preferencias…»

NUBE09

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

NUBE10

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

Como habrás notado, un icono del Dropbox se encuentra en la barra de tareas del Windows, haciendo clic en ese icono verás un cuadro de diálogo similar al que te muestra la Captura 9.

NUBE11

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

  • Si haces clic en (1) verás todas las opciones que tienes disponibles
  • Si haces clic en (2) podrás ver la carpeta de Dropbox de tu computadora
  • Si haces clic en (3) ingresarás al sitio https://www.dropbox.com/home

Recuperando los archivos:

Cuando necesites recuperar los archivos que tienes guardados en la nube, tienes dos alternativas:

  1. Hacer clic en (3) de la Captura 9.
  2. Ingresar al sitio: https://www.dropbox.com/ Luego haces clic en «Inicia sesión», escribes tu e-mail, tu contraseña, y listo.

En ambos casos el Dropbox te mostrará todos los archivos que tienes en la nube, haces clic con el botón derecho sobre el archivo que te interesa descargar y ya está, eso es todo.

NOTA: El Dropbox tiene muchísimas más opciones que si te interesa puedes investigar por tu cuenta. La finalidad de este artículo no es enseñarte a usarlas sino a mostrarte como usando Dropbox puedes tener los backups de tus bases de datos en la nube, de una manera fácil y sencilla y sin ningún trabajo posterior de tu parte (salvo, por supuesto, el de copiar tus archivos de backup en la carpeta sincronizada).

Backup en la nube usando Mega

El sitio https://mega.nz/ ofrece 50 Gb de almacenamiento gratuito (Dropbox solamente 2.5 Gb gratis).

Una vez que ingresamos a ese sitio hacemos clic en el botón «Crear cuenta» que se encuentra en la parte superior de la pantalla, completamos los datos del registro y hacemos clic en el botón «Crear cuenta >» que se encuentra abajo.

Recibirás un e-mail que te pedirá hacer clic en el botón «Activar cuenta».

Después de hacerlo te llevará a una página web donde deberás confirmar tu cuenta.

Una vez confirmada, deberás elegir el tipo de cuenta que te interesa, gratuita o de pago.

Ahora ya puedes subir archivos a esa carpeta, pero de forma manual. O sea que tú deberás elegir cuales archivos deseas subir. Sin embargo, lo mejor es que esa tarea se realice de manera automática. Para ello debemos descargar e instalar el Cliente de Sincronización de Mega.

NUBE12

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

Una vez finalizada la descarga y la instalación del Cliente de Sincronización de Mega, veremos un cuadro de diálogo como el que nos muestra la Captura 11.

NUBE13

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

Como ya habíamos creado una cuenta de Mega entonces hacemos clic en el botón «Siguiente», en la siguiente pantalla escribimos nuestro e-mail y contraseña, en la siguiente pantalla elegimos «Sincronización selectiva» (porque si nuestro disco duro es de gran capacidad tardará una eternidad en subirlo a la nube)

NUBE14

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

NUBE15

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

 En la barra de tareas del Windows verás el icono de Mega. Haciendo clic en él se muestra un cuadro de diálogo similar al de la Captura 13. Eligiendo la opción «Ajustes» se tienen las opciones disponibles. La más interesante es «Sincronizando» porque nos permite agregar todas las carpetas que queremos sincronizar.

NUBE16

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

 A partir de este momento, todos los archivos que coloquemos en las carpetas locales que se muestran en la Captura 14. se subirán a Internet, automáticamente.

Podemos tener muchas carpetas y muchos archivos en cada una de esas carpetas. Los archivos pueden ser de cualquier tipo. El único requisito es que su tamaño total no debe superar la capacidad de nuestra cuenta (que en el caso de ser gratuita es de 50 Gb.)

Recuperando los archivos

Ok, ya hemos instalado el Cliente de Sincronización de Mega, ya hemos elegido las carpetas que deseamos sincronizar y ahora queremos recuperar alguno de esos archivos. ¿Cómo lo hacemos?

  1. Ingresamos al sitio: https://mega.nz/ (escribiendo esa dirección en el navegador o haciendo clic en el icono de la barra de tareas del Windows)
  2. Hacemos clic en el botón «Iniciar sesión»
  3. Escribimos nuestro e-mail y nuestra contraseña
  4. Veremos los nombres de las carpetas que hemos creado. Haciendo clic sobre ellas veremos los archivos que contienen
  5. Haciendo clic con el botón derecho sobre el nombre de un archivo veremos un menú contextual que nos permitirá descargar a ese archivo.

NUBE17

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

Como ves, simple, fácil, sencillo, sin complicaciones.

Conclusión:

Tener backups actualizados es de suma importancia porque es la forma más rápida y más segura de recuperar datos si ocurre algún problema.

Desde hace unos años tenemos la opción de guardar esos archivos de backup en la nube. Hay muchos sitios que nos permiten eso, dos de los más conocidos son Dropbox y Mega.

Dropbox ofrece 2.5 Gb gratuitos, pero tiene la ventaja de que los archivos pueden ser accedidos desde cualquier dispositivo que pueda conectarse a Internet, no solamente computadoras. Una de sus desventajas es que solamente permite sincronizar a una carpeta, cualquier carpeta que deseemos, pero una sola carpeta.

Mega ofrece 50 Gb gratuitos y tiene la ventaja de que podemos sincronizar muchas carpetas.

MUY IMPORTANTE: Tanto si usamos Dropbox o Mega o cualquier otro sitio de almacenamiento de archivos lo que debemos recordar es que en las carpetas sincronizadas debemos guardar los backups, jamás, pero jamás, debemos guardar en ellas las bases de datos o las corromperemos. NO LO OLVIDES: Si pones una Base de Datos en una carpeta sincronizada, corromperás la Base de Datos.

Artículos relacionados:

¿Se puede usar Dropbox con bases de datos?

Usando MEGA para guardar archivos en la nube

El índice del blog Firebird21

El foro del blog Firebird21

ERROR: Connection rejected by remote interface

5 comentarios

Si ves este mensaje (la conexión fue rechazada por la interface remota) la consecuencia es que el usuario no puede conectarse a la Base de Datos.

Un posible motivo es que está usando un cliente de InterBase en lugar de usar un cliente de Firebird.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

La forma correcta de hacer un UPDATE

1 comentario

Seguramente sabes que para modificar una fila debes usar el comando UPDATE, pero ¿sabes cuál es la manera correcta de usar ese comando?

Veamos.

Tenemos una aplicación que muchos usuarios usan al mismo tiempo y al hacerlo están actualizando la misma fila de la misma tabla.

Nuestra transacción es READ COMMITTED, RECORD_VERSION, NO WAIT

¿Cómo actualizamos esa fila?

Opción 1. Obtener un valor, modificarlo, y actualizarlo

  • Con un SELECT obtienes el valor que te interesa
  • Modificas ese valor
  • Realizas el UPDATE

Opción 2. Actualizar de una sola vez

  • UPDATE MiTabla

Listado 1.

UPDATE
   MiTabla
SET
   MiColumna = MiColumna + :MiNuevoValor
WHERE
   MiCondición;

¿Es preferible usar la Opción 1. o la Opción 2.?

Si usas la Opción 1. entonces entre el SELECT y el UPDATE una transacción concurrente pudo haber modificado el valor que obtuviste con el SELECT. En consecuencia, tu tabla tendrá un valor erróneo aunque a simple vista parecerá que está todo bien.

Lo correcto es usar la Opción 2. porque en ese caso el Firebird de forma implícita bloqueará a la fila y así el valor guardado siempre estará bien.

La Opción 1. solamente puede usarse si nunca dos o más usuarios estarán modificando la misma fila de la misma tabla al mismo tiempo. Si puede ocurrir que dos o más usuarios la estén modificando al mismo tiempo, siempre hay que usar la Opción 2.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Resultados posibles de una división de números escalados

Deja un comentario

Como ya habíamos visto en otros artículos de este blog,cuando en Firebird se realiza una división, la precisión siempre es 18 y la escala puede estar entre 0 y 18.

¿Qué implica esto?

Que el resultado de la división depende de la escala, no de la precisión. Porque la precisión siempre es 18, lo que cambia es la escala. Y dependiendo de la escala hay un rango de valores admisibles que puede llegar a tener el resultado de una división.

El resultado de una división de números escalados (también llamados de coma fija o de punto fijo) siempre es un BIGINT.

Los valores posibles de un BIGINT en Firebird se encuentran entre -9.223.372.036.854.775.808 y +9.223.372.036.854.775.807

Valores posibles del resultado de una división de números con escala

RANGO

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

Comentarios:

Como se puede ver en la Captura 1. a medida que aumenta la escala el rango de valores disponibles va disminuyendo. La coma se va moviendo hacia la izquierda y la parte entera es cada vez más pequeña. En general, para la grandísima mayoría de las aplicaciones una escala de 4 es suficiente. En pocos casos se podría necesitar una escala de 6 y una escala de 8 ya es prácticamente inexistente. Así que usar escalas mayores no tiene sentido (en general, puede haber algunas muy pocas excepciones).

Recuerda que los números con escala se usan cuando algo se cuenta, en cambio los números de coma flotante se usan cuando algo se mide.

Un uso típico de los números con escala es para el dinero. Y una escala mayor que 8 no es para nada habitual.

RANGO2

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

Para no lidiar con tantos decimales, lo más práctico es fijarnos solamente en la parte entera, tal y como vemos en la Captura 2., entonces allí podemos notar que si tenemos una escala de 18 el resultado de la división debe estar entre -9 y 9 para no tener un error de overflow. Similarmente si la escala es de 17 el resultado de la división debe estar entre -92 y 92 para no tener un error de overflow. Y así sucesivamente.

Conclusión:

Cuando en Firebird realizas un división entre números con escala el rango de valores posibles para el resultado de esa división depende de la escala elegida, tal y como podemos ver en la Captura 1. y en la Captura 2.

Por lo tanto, si realizas una división y obtienes un mensaje de «error de overflow» el motivo muy probablemente es que el resultado de tu división está fuera del rango de valores admisibles para la escala que usaste.

Artículos relacionados:

Error 802 en una consulta

Usando NUMERIC y DECIMAL

Confusiones comunes al declarar un columna como NUMERIC o DECIMAL

Determinando la precisión y la escala de una columna NUMERIC

CAST()

El índice del blog Firebird21

El foro del blog Firebird21

Older Entries