Different versions of FirebirdSQL on the same Windows

A intenção deste artigo é permitir que um mesmo host tenha duas ou mais versões do Firebird. Você vai precisar disso em duas situações ao menos: (1) É um desenvolvedor e dá suporte a mais de uma versão do Firebird e (2) Está migrando de versão de banco de dados para outra mais recente.

REQUIREMENTS

  1. A good text editor for editing configuration files, I recommend notepad++.
  2. Firebird 3 Installer
  3. Firebird 4 Installer

INSTALLING FIREBIRD 3

1. Install FB3 version, use default installer.

2. Run “services.msc” and then stop the default instance called “DefaultInstance”, then go to cmd as administrator and place yourself in the default installation folder:

cd "C:\Program Files\Firebird\Firebird_3_0"
instsvc.exe r -n "DefaultInstance"

If successful, the message will appear “Service “Firebird Server – DefaultInstance” successfully deleted.” então a instância padrão deste Firebird foi corretamente removida.

3. Creating a new instance with another name for Firebird 3.0:

instsvc.exe i -n "Firebird3"

Firebird3 will not be operational until we start the service via “services.msc”, but we won't do that yet because we still have to install FB4 and indicate the ports that each installation will respond to.

4. Still as administrator in cmd, run:

notepad++ "C:\Program Files\Firebird\Firebird_3_0\firebird.conf"

Ao invés de notepad++ pode usar um editor de sua preferência. Localizamos a linha:

#RemoteServicePort = 3050

Então após comentá-la usando “#” no inicio da linha, acrescentamos logo depois:

RemoteServicePort = 3060

FirebirdSQL3 needs a specific port to send events, a feature that is little used, but very interesting. I recommend you set a specific port for it, otherwise FirebirdSQL3 will choose a random port and that's bad, so find the following line:

#RemoteAuxPort = 0

Então após comentá-la usando “#” no inicio da linha, acrescentamos logo depois:

RemoteAuxPort = 3061

FIREBIRD 4 INSTALLATION

1. Install FB4 version, use default installer.

2. Run “services.msc” and then stop the default instance called “DefaultInstance” (same as FB3), then go to cmd as administrator and place yourself in the default installation folder:

cd "C:\Program Files\Firebird\Firebird_4_0"
instsvc.exe r -n "DefaultInstance"

If successful, the message will appear “Service “Firebird Server – DefaultInstance” successfully deleted.” então a instância padrão deste Firebird foi corretamente removida.

3. Creating a new instance for Firebird 4.0, still in the default FB4 folder:

instsvc.exe i -n "Firebird4"

4. Still as administrator in cmd, run:

notepad++ "C:\Program Files\Firebird\Firebird_4_0\firebird.conf"

Ao invés de notepad++ pode usar um editor de sua preferência. Então novamente localizamos a linha:

#RemoteServicePort = 3050

Então após comentá-la usando “#” no inicio da linha, acrescentamos logo depois:

RemoteServicePort = 4060

As in the previous version, Firebird4 needs to have a specific port to send events, if no specific one is chosen then a random port will be chosen and this is bad, so find the following line:

#RemoteAuxPort = 0

Então após comentá-la usando “#” no inicio da linha, acrescentamos logo depois:

RemoteAuxPort = 4061

STARTING THE SERVICES

Run “services.msc” and start the services:

firebird3
firebird4

Lembre-se de que cada conexão ao FirebirdSQL está em portas diferentes, e sob esta condição você não poderá usar conexão local, ou variações dela como “xnet” porque não saberá qual versão do FirebirdSQL instalada responderá, então precisará sempre usar uma conexão remota em sua string de conexão para dizer explicitamente qual das versões pretende que seja usada, ex:

localhost/3060:c:\caminho\ou\alias\para\banco.fdb
localhost/4060:c:\caminho\ou\alias\para\banco.fdb
User=SYSDBA;Password=masterkey;Database=c:\caminho\ou\alias\para\banco.fdb;DataSource=localhost;Port=3060;Dialect=3;Charset=ISO8859_1;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;
User=SYSDBA;Password=masterkey;Database=c:\caminho\ou\alias\para\banco.fdb;DataSource=localhost;Port=4060;Dialect=3;Charset=ISO8859_1;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;
inet://localhost:3060/c:\caminho\ou\alias\para\banco.fdb
inet://localhost:4060/c:\caminho\ou\alias\para\banco.fdb

Os exemplos acima são usados de diferentes formas em diferentes linguagens e programas, adapte-a a sua situação.

FIREBIRD 4 COM COMPATIBILIDADE DE TIPOS DE VERSÕES ANTERIORES?

Algumas pessoas que estejam migrando de uma versão anterior para versão 4 do Firebird podem ter problemas com tipos novos, em especial, time e timestamp, pois estes novos tipos agora carregam a informação GMT e isso pode fazer a aplicação quebrar. Para solucionar este problema, vá ao arquivo firebird.conf que está no diretório do Firebird4 e acrescente a seguinte linha:

DataTypeCompatibility = 3.0

Você pode trocar 3.0 por 2.5 também.

BACKUP DE CONTAS

Nos casos em que estamos migrando uma base de dados para outra versão, geralmente nos preocupamos em copiar as contas de usuários e suas senhas. Se este for o seu caso, isso é fácil, no exemplo abaixo vamos simular que estamos migrando estas contas do FB3 para o FB4:

No ambiente de produção, realize o backup de “security3.fdb” gerando um arquivo “c:\temp\security3.fbk”:

cd “C:\Program Files\Firebird\Firebird_3_0”

cd "C:\Program Files\Firebird\Firebird_3_0"
gbak -v -b -t -user sysdba -password SENHAFB3 "security3.fdb" c:\temp\security3.fbk

Agora temos o arquivo “c:\temp\security3.fbk” que é o backup das contas contidas no FB3, vamos restaurá-lo no FB4:

cd "C:\Program Files\Firebird\Firebird_4_0"
ren security4.fdb security4.fdb.ori
gbak -v -r -user sysdba c:\temp\security3.fbk security4.fdb

Dica: Não é preciso o parâmetro “-password” nos casos de restauração.

Se a restauração tiver tido êxito, a partir de agora, a senha do SYSDBA no FB4 é aquela que estava no FB3. Eu recomendo que não mantenha a mesma senha em ambos os serviços, faça a troca para impedir você mesmo ou outra pessoa que tenha acesso a base de produção achar que está acessando um servidor quando na realidade está acessando outro. Não mude apenas a senha do SYSDBA, mas de todos aqueles que fazem o acesso interativo ou administram a base de dados.

FIREWALL

Contando todos os Firebirds que instalamos, creio que usaremos as portas 3060 e 3061 (para o FB3) e 4060 e 4061 (para o FB4) então configure seu firewall para que o mesmo não obstrua a comunicação entre estes serviços e você ou outras estações de trabalho. Se usa o Firewall do Windows, geralmente a comunicação com localhost já é liberado, então não precisaria de nenhum ajuste para seu host acessar tais serviços.

Dica: As numerações das portas foi intencional, veja novamente os note que apenas olhando para eles saberemos qual versão de Firebird estaremos acessando. Recomendo que siga a mesma orientação para outras versões de Firebird para outras portas que também seja semelhante.

EVITAR A PORTA 3050?

A porta 3050 é a padrão do Firebird, isto é, se você não indicar a porta numa string de conexão, o driver ou framework de acesso de seu programa assumirá o padrão que é 3050.

Daí você deve pensar se isso é uma boa ideia, pois se eu estivesse migrando de uma versão para outra, provavelmente deixaria a porta 3050 para a versão mais recente que quero migrar e então faz sentido usar a porta 3050, mas se eu estivesse tendo que dar manutenção em multiplas versões do Firebird na minha máquina de desenvolvimento eu evitaria usar a porta 3050 para impedir acessos acidentais a base por programas que esqueceram de espeficar a porta.

CONCLUSION

Por favor, não use este artigo como método para colocar dois serviços Firebird em produção e economizar dinheiro com compra de máquinas, isso não é recomendável. Assim como não juntamos um cavalo e um boi para levar uma carroça, também não juntamos serviços que competem por CPU e DISCO no mesmo host. Essa é uma regra que não deveria ser discutida em empresas que valorizam qualidade dos serviços.

Claro que toda regra tem sua exceção, você pode juntar dois serviços no ambiente de produção no mesmo host quando sua inteção é atualizar ou migrar de uma versão para outra e quer fazer isso de maneira cautelosa, afinal, se a migração não der certo então ficará mais fácil retornar a versão anterior. Salvo essa exceção, este artigo é para desenvolvedores que dão manutenção nas duas (ou mais) versões de FirebirdSQL.