You are on page 1of 14

Firebird es un sistema de administracin de base de datos relacional (o RDBMS) (Lenguaje consultas: SQL) de cdigo abierto, basado en la versin 6 de Interbase,

cuyo cdigo fue liberado por Borland en 2000. Su cdigo fue reescrito de C a C++. El proyecto se desarrolla activamente, el 18 de abril de 2008 fue liberada la versin 2.1 y el 26 de diciembre de 2009 fue liberada la versin 2.5.0 RC1. La versin 2.5.2, ms reciente del proyecto, fue liberada el 6 de noviembre de 2012.

Caractersticas

Es multiplataforma, y actualmente puede ejecutarse en los sistemas operativos: Linux, HP-UX, FreeBSD, Mac OS, Solaris y Microsoft Windows. Ejecutable pequeo, con requerimientos de hardware bajos. Arquitectura Cliente/Servidor sobre protocolo TCP/IP y otros (embedded). Soporte de transacciones ACID y claves forneas. Es medianamente escalable. Buena seguridad basada en usuarios/roles. Diferentes arquitecturas, entre ellas el Servidor Embebido1 (embedded server) que permite ejecutar aplicaciones monousuario en ordenadores sin instalar el software Firebird. Bases de datos de slo lectura, para aplicaciones que corran desde dispositivos sin capacidad de escritura, como cd-roms. Existencia de controladores ODBC, OLEDB, JDBC, PHP, Perl, .net, etc. Requisitos de administracin bajos, siendo considerada como una base de datos libre de mantenimiento, al margen de la realizacin de copias de seguridad. Pleno soporte del estndar SQL-92, tanto de sintaxis como de tipos de datos. Completo lenguaje para la escritura de disparadores y procedimientos almacenados denominado PSQL. Capacidad de almacenar elementos BLOB (Binary Large OBjects). Soporte de User-Defined Functions (UDFs). Versin autoejecutable, sin instalacin, excelente para la creacin de catlogos en CD-Rom y para crear versiones de evaluacin de algunas aplicaciones.

Tipos de servidor
Existen dos tipos de servidor Firebird para ser instalados: Classic y Super server. Si bien tienen varias diferencias menores entre s, la principal consiste en que el super server maneja hilos de ejecucin individuales para cada conexin. Por lo tanto para un nmero reducido de conexiones el recomendado sera el classic porque consumir menor cantidad de recursos. En caso de arquitecturas SMP, se debe utilizar el servidor classic porque el Supersever no tiene soporte para este tipo de arquitectura. Los propios desarrolladores de Firebird recomiendan lo siguiente a la hora de decidirse por uno de estos servidores:

En plataformas Windows seleccionar el Superserver. En Linux simplemente elegir cualquiera, segn las conexiones estimadas. En la mayora de las situaciones no se notar diferencias en la ejecucin.

Podra considerarse un tercer tipo, el Embedded. ste consiste en una nica bibliotca de enlace dinmico DLL (de unos 2 MB de tamao) que contiene todo el servidor. De esta forma se puede tener un DBMS completo disponible y distribuble junto con aplicaciones de usuario sin requerir que este se instale por separado.

Herramientas de administracin grfica


IBExpert (Versin personal gratuita) FlameRobin (Cdigo abierto, se ejecuta en Windows, Linux, MacOSX y FreeBSD) DB Workbench Firebird Development Studio

Drivers y componentes de acceso Componentes para Delphi


IB Objects FIBPlus UIB (Unified InterBase Components) Zeos MDO

ODBC

Gemini ODBC driver Firebird ODBC Driver EasySoft

OLEDB

ZStyleGroup IBProvider

Java

JayBird

.Net Provider

Firebird .Net Provider

C++

IBPP

Otros lenguajes

PHP Python Perl

Herramientas de Replicacin

IBReplicator FBReplicator Replication Manager

El smbolo delimitador de cadenas


Las cadenas de caracteres en Firebird estn delimitadas por un par de comillas simples -'I am a string' (cdigo ASCII 39, no 96). Si Ud. ha usado versiones previas del pariente de Firebird, Interbase, recordar que las comillas simples y dobles se podan intercambiar como delimitadores de cadenas. En Firebird, las comillas dobles no se pueden usar como delimitadores de cadenas.

Identificadores con comillas dobles


Antes del estndar SQL-92, no era legal tener nombres de objetos (identificadores) en una base de datos que fueran iguales a las palabras claves del lenguaje, distinguieran maysculas de minsculas, o contuvieran espacios. SQL-92 introdujo un nuevo estndar para hacer legales todas esas cosas, siempre que los identificadores fueran rodeados por un par de smbolos de comilla doble (ASCII 34) y fueran siempre referidos delimitados por comillas dobles. El propsito de este regalo era hacer ms fcil migrar metadatos desde RDBMSs no estndares. La parte mala es que, si Ud. elige encerrar un identificador con comillas dobles, distinguir entre maysculas y minsculas y ser obligatorio siempre escribirlo entre comillas dobles. Firebird permite una ligera relajacin de esta regla si se cumple un conjunto de condiciones muy especial: si el identificador que fue definido entre comillas dobles: 1. fue definido totalmente en maysculas, 2. no es una palabra clave, y 3. no contiene espacios, ...entonces puede ser usado en SQL sin comillas y sin prestar atencin a maysculas y minsculas (pero en cuanto le pone comillas alrededor, debe coincidir las maysculas nuevamente!)

Aviso
No abuse de esta posibilidad! Por ejemplo, si tiene las tablas "TESTTABLE" y "TestTable", ambas definidas entre comillas dobles, y ejecuta el comando:
SQL>select * from TestTable;

...obtendr los registros de "TESTTABLE", no "TestTable"!

A menos que tenga una razn de peso para definir identificadores con comillas, se recomienda que los evite. Firebird acepta sin problemas una mezcla de identificadores con y sin comillas -por lo que no es problema incluir esa palabra clave que Ud. obtuvo de una base de datos antigua, si realmente lo necesita.

Aviso
Algunas herramientas de administracin de base de datos imponen el entrecomillado en todos los identificadores por defecto. Trate de elegir una herramienta que tome como opcional el entrecomillado.

Apstrofos en cadenas
Si Ud. necesita usar un apstrofo dentro de una cadena de Firebird, puede escapar el caracter del apstrofo precedindolo con otro. Por ejemplo, esta cadena producir un error:
'Joe's Emporium'

porque el evaluador encuentra el apstrofo e interpreta la cadena como 'Joe' seguida por algunas palabras claves desconocidas. Para convertir el ejemplo en una cadena legal, duplique el caracter apstrofo:
'Joe''s Emporium'

Note que son DOS comillas simples, no una doble.

Concatenacin de cadenas
El smbolo de concatenacin en SQL es un doble pipe (ASCII 124, un par sin espacio entremedio). En SQL, el smbolo + es un operador aritmtico y provocar un error si intenta usarlo para concatenar cadenas. La siguiente expresin agrega el siguiente texto Reportado por: delante de cada apellido:
'Reportado por: ' || LastName

Tenga cuidado con las concatenaciones. Tenga en cuenta que Firebird generar un error si su expresin intenta concatenar dos o ms columnas de tipo char o varchar si la longitud combinada puede exceder el lmite mximo de longitud para el tipo char o varchar (32 KB).

Vea tambin en las notas ms abajo, Expresiones con NULL, sobre la concatenacin de expresiones que involucran NULL.

Divisin de un entero por un entero


Firebird respeta el estndar SQL truncando el resultado (cociente) de una divisin entero/entero al entero menor. Esto puede generar resultados extraos si no lo tiene en cuenta. Por ejemplo, este clculo es correcto en SQL:
1 / 3 = 0

Si Ud. est actualizando desde una RDBMS que resuelve divisiones entre enteros a un cociente real, necesitar alterar las expresiones afectadas para usar un tipo real o numrico escalado para el dividendo, divisor, o ambos. Por ejemplo, el clculo anterior puede ser modificado como sigue para producir un resultado distinto de cero:
1.000 / 3 = 0.333

Expresiones con NULL


En SQL, NULL no es un valor. Es una condicin, o estado, de un dato, en el cual su valor es desconocido. Debido a que es desconocido, NULL no puede comportarse como un valor. Cuando Ud. intenta realizar operaciones aritmticas con NULL, o lo mezcla con valores en otras expresiones, el resultado de la operacin ser siempre NULL. No es cero o blanco o una cadena vaca y no se comporta como ninguno de estos valores. Por lo tanto - aqu hay algunos ejemplos de las sorpresas que se puede llevar si intenta realizar clculos y comparaciones con NULL:
1 + 2 + 3 + NULL = NULL not (NULL) = NULL 'Hogar ' || 'dulce ' || NULL = NULL if (a = b) then MiVariable = 'Igual'; else MiVariable = 'Distinta';

Despus de ejecutar este cdigo,MiVariable ser 'Distinta' si ambos a and b son NULL. La razn es que la expresin 'a = b' se evala a NULL si al menos uno de ellos es NULL. En un contexto de if...then NULL se comporta como FALSE. Por lo tanto, el bloque 'then' no se ejecuta y se pasa directamente al bloque 'else'.
if (a <> b) then MiVariable = 'Distinta'; else MiVariable = 'Igual';

Aqu, MiVariable ser 'Igual' si a es NULL y b no, o viceversa. La explicacin es similar a la del ejemplo previo.
Nombre || ' ' || Apellido

resultar NULL si Nombre o Apellido es NULL.

Sugerencia
Piense en NULL como DESCONOCIDO y todos estos extraos resultados comenzarn de repente a tener sentido! Si el valor de Numero es desconocido, el resultado de '1 + 2 + 3 + Numero' tambin ser desconocido (y por lo tanto NULL). Si el contenido de MiCadena es desconocido, entonces tambin lo es 'MiCadena || SuCadena' (incluso si SuCadena no es NULL). Etctera.

Respaldo (Backup)
La distribucin de Firebird contiene una utilidad para respaldar y recuperar sus bases de datos. Su nombre es gbak y se puede hallar en el subdirectorio bin de su instalacin de Firebird. Las bases de datos de Firebird se pueden respaldar mientras hay usuarios conectados al sistema haciendo su trabajo normal. El respaldo ser tomado de una instantnea del estado de la base de datos al momento de comienzo del mismo. Hacer respaldos regularmente y ocasionales restauraciones usando gbak deberan ser tareas programadas de su actividad de administracin de bases de datos.

Aviso
No use utilidades externas de respaldo propietarias o herramientas de copia de archivos tales como WinZip, tar, copy, xcopy, etc., en una base de datos que est en uso. No slo el respaldo ser poco confiable, tambin el bloqueo a nivel de disco usado por estas herramientas puede corromper una base de datos en marcha.

Como corromper una base de datos


1. Modificar las tablas de metadatos por su cuenta 2. Deshabilitar la escritura forzada en Windows 3. Restaurar un respaldo a una base de datos en ejecucin 4. Permitir a los usuarios conectarse durante una restauracin

1. Modificar las tablas de metadatos por su cuenta


Firebird almacena y mantiene todos los metadatos para sus propios objetos y los del usuario en -una base de datos de Firebird! Ms precisamente, las almacena en relaciones (tablas) directamente en la base de datos. Los identificadores de las tablas de sistema, sus columnas y varios otros tipos de objetos de sistema comienzan con los caracteres RDB$.

Debido a que son objetos de bases de datos ordinarios, pueden ser consultados y manipulados de la misma manera que los objetos definidos por un usuario. No obstante, el que pueda no implica que deba hacerlo. El motor de Firebird implementa un subconjunto de alto nivel de SQL (DDL) para el propsito de definir y operar sobre objetos de metadatos, tpicamente a travs de las sentencias CREATE, ALTER y DROP. Nunca es poca la recomendacin de que utilice DDL -no operaciones directas SQL sobre las tablas de sistema- cada vez que necesite alterar o eliminar metadatos. Difiera las operaciones caseras hasta que su nivel en SQL y su conocimiento del motor de Firebird se vuelva muy avanzado. Una base de datos retocada no es linda de mantener ni barata de reparar.

2. Deshabilitar la escritura forzada en Windows


Firebird se instala con la escritura forzada (escritura sincrnica) habilitada por defecto. Los datos modificados y agregados son escritos a disco inmediatamente luego de ingresados. Es posible configurar una base de datos para que utilice escritura de datos asincrnica -donde los datos modificados o nuevos son mantenidos en memoria intermedia para ser volcada a disco peridicamente por el subsistema de E/S del sistema operativo. El trmino comn para esta configuracin es escritura no forzada (forced writes off) (o deshabilitada). A veces se recurre a esta configuracin para incrementar el rendimiento durante operaciones largas. La gran advertencia aqu es: no deshabilite la escritura forzada en un servidor Windows. Ha sido observado que las plataformas de servidor Windows no vacan el cach de escritura hasta que el servicio Firebird sea detenido. Aparte de interrupciones de poder, hay demasiadas otras cosas que pueden ir mal en un servidor Windows. Si se detiene, el sistema de E/S queda fuera de alcance y el trabajo de sus usuarios se perder en el proceso de reinicio.

Nota
Windows 9x y ME no soportan escritura diferida

Deshabilitar la escritura forzada en un servidor Linux


Los servidores Linux son ms seguros para ejecutarse con escritura forzada deshabilitada temporalmente. An as, no la deje deshabilitada una vez que su lote mayor de tareas est completo, a menos que tenga un sistema muy robusto de soporte contra fallas de poder.

3. Restaurar un respaldo a una base de datos en ejecucin


Una de las opciones de la utilidad gbak (gbak -r[estore]) le permite restaurar un archivo gbak sobre una base de datos existente. Es posible que este tipo de restauracin se ejecute an sin advertir que hay usuarios conectados a la base de datos: la corrupcin de la base de datos est prcticamente asegurada como resultado.

Aviso
Tenga en cuenta que necesitar disear sus herramientas de administracin y procedimientos para prevenir la posibilidad para cualquier usuario (incluyento SYSDBA) de restaurar a una base de datos activa si hay algn usuario conectado.

Nota
Por ms instrucciones sobre gbak vea el captulo 21, Database Backup and Restore, de Using Firebird. Por instrucciones sobre cmo bloquear el acceso a los usuarios, vea el captulo 14: Getting exclusive access to a database, de Using Firebird. Si es posible, se recomienda que restaure el respaldo a un lugar vaco del disco usando la opcin gbak -c[reate] y verifique la base de datos restaurada usando isql o su herramienta de administracin preferida. Si la base de datos restaurada es correcta, desactive (shutdown) el servidor. Haga una copia del archivo de la antigua base de datos y luego copie el archivo (o los archivos) de base de datos restaurados sobrescribiendo los existentes.

4. Permitir a los usuarios conectarse durante una restauracin


Si Ud. no bloquea el acceso a los usuarios mientras realiza una restauracin usando gbak -r[estore] entonces los usuarios sern capaces de conectarse e intentar operar sobre los datos. En este caso, el resultado sern estructuras corruptas.

Ejemplos de consultas

Outer Join
Select f.numero_factura, df.codigo from factura f left outer join detalle_factura df on df.numero_factura = f.numero_factura where condiciones;

if
if (a = b) then MyVariable = 'Equal'; else MyVariable = 'Not equal';

if (a <> b) then MyVariable = 'Not equal'; else MyVariable = 'Equal';

While
WHILE (<condicion>) DO <sentencia compuesta> <sentencia compuesta> = {<bloque> | <sentencia>;}

WHILE (i<23) DO i=i+1; persona[i] = i;

Triggers o desencadenantes
Es un modulo que se ejecuta de forma automtica cuando se cambia el estado de una fila como respuesta a una peticin, los triggers se ejecutan a nivel de filas, una por cada imagen de fila cambiada. Un trigger se puede ejecutar en una de dos fases en tiempo de ejecucion de la peticin de cambio realizada, antes de escribir (before) o despus (after), en el trigger se define esta fase en relacin a un evento (insercin, actualizacion o borrado) o varios de ellos Tipo Trigger BEFORE INSERT AFTER INSERT Descripcin
Se lanza antes de que se cree una nueva fila. Permite que se puedan cambiar los valores de entrada Se dispara despus de que se cree una nueva Versin del registro. No se permite cambiar los valores de entrada. Normalmente se usa para modificar otras tablas Se dispara antes de que se cree una nueva versin del registro. Se permiten cambios en los valores de entrada Se lanza despus de que se cree una nueva versin del registro. No se permiten cambios en los valores de entrada. Normalmente se usa para modificar otras tablas Se lanza antes de que una fila existente se borre. No acepta cambios a ninguna columna en la fila Se dispara despus de que una fila es borrada. No se aceptan cambios a ninguna columna en la fila. Normalmente se usa para modificar otras tablas Se dispara antes de que se ejecute cualquier cambio en el estado del dato. Se codifican las acciones de forma condicional. Se pueden hacer cambios en las columnas de la fila afectada salvo que sea una accin de borrado Se dispara despus de que se ejecute cualquier cambio en el estado del dato. Se codifican las acciones de forma condicional. No se pueden hacer cambios de la fila afectada

BEFORE UPDATE AFTER UPDATE

BEFORE DELETE AFTER DELETE

BEFORE <evento> OR <evento> [OR <evento>] AFTER <evento> OR <evento> [OR <evento>]

Un trigger puede estar activo o inactivo, Slo se disparan los triggers activos. El estado se puede modificar mediante la sentencia ALTER. Un trigger se crea mediante la sentencia CREATE TRIGGER: CREATE TRIGGER nombre FOR {tabla | vista} [ACTIVE | INACTIVE ] {BEFORE | AFTER } {{DELETE | INSERT | UPDATE } |{DELETE OR{[INSERT [OR UPDATE]}|{INSERT OR [...]}|{UPDATE OR [...]}}} [POSITION numero] AS aqu empieza el cuerpo del trigger [DECLARE [VARIABLE] variable tipo[{= | DEFAULT} valor]; BEGIN <sentencias> END <terminador>
CREATE TRIGGER BI_BANCOS FOR BANCOS BEFORE INSERT AS BEGIN new.nom_banco=upper(new.nom_banco); -- pasamos a maysculas el nombre del banco END

CREATE TRIGGER BI_BANCOS FOR BANCOS BEFORE INSERT AS BEGIN IF (new.cod_banco is null) then -sino se ha indicado un cod_banco new.cod_banco=gen_id(gen_cod_banco,1); --se recoge el cod_banco del generador END

COMMIT
El commit en firebird se determina a travs de un vector que configura los parmetros de las transacciones que van a determinar su comportamiento, en el caso de no crearlo, el servidor crear uno por defecto

ROLLBACK ROLLBACK RETAIN


Deshace todos los cambios que fueron cargados a la base de datos dentro de la transaccin sin haberla cerrado

ROLLBACK TO SAVEPOINT
Deshace los Cambios hechos a la base de datos desde la Creacion del savepoint

SAVEPOINT
Crea un savepoint, el cual va a Permitir hacer rollback hasta un punto determinado sin necesidad de deshacer toda la transaccin
create table test (id integer); commit; insert into test values (1); commit; insert into test values (2); savepoint y; delete from test; select * from test; -- no devuelve filas rollback to y; select * from test; -- devuelve dos filas rollback; select * from test; -- devuelve una fila

You might also like