O Firebird é um banco de dados cliente/servidor open source, compatível com o padrão SQL-92, que foi desenvolvido a partir do código-fonte do InterBase 6. Somando as versões disponíveis, o banco roda em mais de dez sistemas operacionais e vem conquistando espaço no disputado mundo dos servidores SQL.

Em Julho de 2000 a Borland abriu o código fonte do InterBase 6, tornando-o free e open source. Nesse momento, um grupo de pessoas resolveu criar um novo banco de dados baseado neste código. Entre essas pessoas estavam nomes influentes da comunidade InterBase, como Ann Harrison, conhecida como “mãe do InterBase” e indica como uma das pessoas que mais entendem da sua arquitetura interna. Coincidência ou não, ela é casada com Jim Starkey, criador do sistema de versioning utilizado no InterBase e no Firebird.

Mesmo distribuindo o código fonte do InterBase, a Borland anunciou a continuidade no desenvolvimento de versões comerciais do produto. O fato de novas versões serem lançadas com código fonte fechado trouxe desconforto no relacionamento entre a comunidade Firebird e a Borland. Após o lançamento do InterBase 6.5 e 7.0 (ambos comerciais), o código da versão 6.0 continua sem melhorias. Em compensação, o Firebird chega na versão 1.0, com uma lista de usuários e diferenciais cada vez maior.

Por ser derivado do Interbase 6.0, o Firebird mantém total compatibilidade com essa versão. Entre as melhorias feitas no código do Firebird estão a correção de bugs e adição de novos recursos (tabela 1).

Tabela 1. Diferenciais do Firebird 1.0 em relação ao InterBase 6.0
Novidade Descrição
Páginas de 16K O tamanho máximo de uma página de banco de dados passou a ser 16K
Porta Padrão 3050 A porta TCP/IP padrão é 3050. Isso permite que o servidor funcione sem a necessidade de configurar o arquivo services do Windows.
UDF’s e Generators monitorados A dependência de Stored Procedures e Triggers com UDF’s e Generators passou à ser monitorada.
Versões do código com ponteiros de 64bits Versões utilizando ponteiros internos de 64bits permitiu aumentar o tamanho máximo de um arquivo de banco de dados.
Group by UDF A partir da versão 1.0 pode-se agrupar SELECTs usando UDF’s
Recreate Procedure/Table Comandos que permite recriar tabelas e procedures sem necessidade de apaga-las.
Select First – Skip Faz paginação dos dados retornados por SELECTs, um recurso útil para quem usa o banco na Web.
SUBSTRING Foi criada uma função interna para retornar substrings. Anteriormente havia a necessidade de uma UDF.
Current_User e Current_Role Essas variáveis globais retornam o usuário e o role da transação ativa.
Drop Generator Permite apagar os generators já criados. Antes era necessário editar as tabelas do sistema.
Conversão Strings x Blobs A conversão de strings para blobs do tipo texto (subtype 1) passou à ser automática evitando a necessidade de usar uma UDF para a conversão.
PlanOnly Devolve o plano adotado para a execução do comando sem a necessidade de executá-lo.
Remoção do Backdoor Foi descoberta e removida uma falha de segurança que consistia em uma conta secreta que podia acessar qualquer banco de dados em qualquer servidor InterBase.
Mais UDF’s As UDF’s que acompanham a biblioteca padrão do Firebird ganhou novas funções.

O Firebird 1.5, em fase de testes como Release Candidate 2, teve seu código portado inteiramente para C++ e sofreu a remoção de todos os códigos obsoletos. A seguir, vamos detalhar as principais características do Firebird.

Facilidade de instalação e manutenção

Esse é um ponto forte do InterBase e conseqüentemente do Firebird. Um servidor pode ser instalado em poucos minutos e não exige qualquer tipo de conhecimento específico. Um banco de dados criado no Firebird não precisa ter seu espaço definido previamente, pois seu crescimento é gerido pela quantidade de informações inseridas.

O servidor possui poucos parâmetros de configuração, sendo o padrão suficiente para o bom funcionamento do banco. Podemos dizer que o Firebird é um servidor light, pois dispensa a presença constante de um DBA. O tamanho do instalador na versão Windows não passa de 3MB.

Arquitetura Versioning

Vários servidores utilizam um modelo de concorrência pessimista, baseado em travas, de registro ou de páginas. O Firebird utiliza um modelo otimista, chamado versioning. Um sistema otimista presume que a chance de mais de um usuário alterar um único registro ao mesmo tempo é muito baixa.

O versioning cria versões temporárias dos registros que estão sendo modificados, que permanecem disponíveis pelo tempo que o servidor julgar necessário. Entre os fatores levados em consideração estão:

  1. Número de transações ativas que estão enxergando os dados desse registro;
  2. Tipo de isolamento dessas transações.

Quando o servidor detecta que um registro temporário que não é mais necessário, ele reaproveita o espaço com novas informações.

Podemos configurar o comportamento de uma transação através do nível de isolamento. O isolamento diz à transação como ela vai enxergar os dados manipulados pelas transações concorrentes (tabela 2).

Tabela 2. Transações concorrentes
Isolamento Descrição
Read uncommitted Não é suportado pelo Firebird.
Read committed É o modo mais utilizado. Permite que uma transação veja apenas os dados que já foram comitados por outras transações.
Snapshot Também chamado de Repeatable Read, esse modo permite que uma transação mantenha uma visão consistente do banco no momento em que ela foi iniciada. É indicada para geração de relatórios.
Snapshot table stability Possui as características do modo Snapshot, além de impedir que uma tabela lida seja alterada por outra transação.

Devido à arquitetura de versioning, o Firebird não mantém um log de transações. Nos sistemas que utilizam este recurso, sempre que o servidor sofre algum tipo de pane o log é acessado para desfazer as últimas operações. O Firebird, assim que é reiniciado, altera automaticamente o flag das transações pendentes para rollback, fazendo com que o banco retorne à um estado consistente de forma quase instantânea.

Backups/Restores

Devido à arquitetura de versioning, o Firebird realiza backups sem a necessidade de acesso exclusivo aos dados. A cópia se baseia em uma imagem consistente do banco no momento em que o processo é iniciado. Infelizmente isso complica a possibilidade de realizar backups incrementais (pois não há um log das alterações) e atualmente não existe um utilitário para o Firebird que tenha esse recurso.

Transações/Commits em 2 fases

Apesar de o Firebird não permitir selects ou relacionamentos entre tabelas que estejam armazenadas em diferentes bases de dados, ele permite que uma transação esteja ligada à mais de um banco, ou seja, você pode alterar dados em dois ou mais bancos ligados à uma mesma transação. No caso de um commit/rollback, os dados serão confirmados/descartados em todos os bancos em que a transação estiver ativa.

Gerenciamento/reaproveitamento de espaço

Vimos que a alocação dos dados no Firebird é dinâmica, ou seja, a medida que os dados são inseridos os arquivos do banco crescem no disco. No entanto, quando uma informação é removida, o servidor reaproveita o espaço com novos dados.

Multiplataforma

O Firebird é um dos servidores SQL que mais possui versões para múltiplas plataformas, perdendo talvez para algum banco de dados desenvolvido em Java. Hoje o Firebird roda em Darwin, FreeBSD, HPUX, Linux, Sinixz, Sparc, Solaris, Win32, MacOS, AIX e WinCE 3.0 (beta).

Stored Procedure selecionáveis

Com este recurso é possível utilizar stored procedures como fonte de dados em SELECTs, simulando tabelas virtuais. Você pode montar procedures que buscam, manipulam e processam informações e retornam o resultado como uma nova tabela. Sendo assim, você pode montar um comando do tipo SELECT * FROM minha_procedure (:param1,:param2).

Múltiplos Triggers

O Firebird oferece triggers before/after-insert, before/after-delete e before/after-update. A novidade é que você pode criar mais de um trigger para um mesmo evento. A ordem em que os triggers são executados é definida pela cláusula POSITION.

Funções de Usuário

As UDFs (User Defined Functions) são funções criadas em uma linguagem de programação externa que podem ser integradas com o banco de dados. A função pode ser utilizada em comandos SQL ou dentro de stored procedures e triggers.

O uso de UDFs deve ser cuidadoso. Sempre que você chama uma UDF o processo do servidor fica esperando pelo retorno da mesma. Para evitar queda de performance, as funções devem ser eficientes e rápidas.

Ferramentas de administração

O Firebird não inclui um gerenciador gráfico de administração (o InterBase traz o IBConsole). No entanto, existem inúmeras ferramentas para download. Um dos sistemas mais completos é o IBExpert, que possui uma versão free, com algumas limitações, e uma versão shareware completa (figura 1).

Versão shareware completa
Figura 1. Versão shareware completa

Métodos de acesso

As diversas maneiras de acessar um bancos de dados Firebird variam de acordo com a linguagem e sistema operacional utilizados. A seguir vemos os principais métodos disponíveis atualmente:

  • ODBC - só deve ser utilizado quando não for possível usar um método de acesso nativo, pois sua performance é comprometida pela própria arquitetura do padrão.
  • Drivers para .Net - já existe um driver .Net específico para o Firebird
  • OLEDB - Existem alguns drivers OLEDB para Firebird. Detaque para o SIBPROvider, que é nacional e compatível com o Firebird e InterBase.
  • JDBC - O JayBird é um driver JDBC tipo 4 desenvolvido especificamente para o Firebird.
  • Diversos componentes de acesso nativo para Delphi, Kylix e C++Builder

Usuários de peso

Muitas empresas internacionais e nacionais adotaram o Firebird em seus projetos. Entre as empresas nacionais destacam-se a Embrapa (Empresa Brasileira de Pesquisa Agropecuária), a ESALQ/USP e a Secretaria Municipal de Saúde do Rio de Janeiro.

Conclusão

Vimos aqui um resumo das principais características do Firebird. Apesar de ser um banco relativamente novo, o Firebird usa uma tecnologia amplamente testada e utilizada na prática por mais de 10 anos, herdada do InterBase.

Referências:

Confira também