Revisão 1.01
2
Índice
Índice ........................................................................................... 2
Dedicatória .................................................................................. 5
Agradecimentos........................................................................... 6
Prefácio ..................................................................................... 11
Introdução ................................................................................. 12
Ícones usados ............................................................................ 13
Erratas ....................................................................................... 14
Noções básicas, mas essenciais! ............................................... 15
SuperServer vs. Classic vs. SuperClassic .............................. 16
Classic (CS)....................................................................... 18
SuperServer (SS) ............................................................... 19
SuperClassic (SC) ............................................................. 20
Embedded .......................................................................... 21
Qual arquitetura escolher?..................................................... 22
Arquitetura 32 vs 64 bits ....................................................... 24
Instalando o Firebird 3 .............................................................. 26
Instalando o Firebird 3 no Linux ........................................... 27
Instalando o Firebird 3 no Windows ..................................... 35
Arquitetura desejada.......................................................... 40
Serviço ou Aplicação?....................................................... 41
Iniciar automaticamente .................................................... 41
Biblioteca cliente (fbclient.dll) .......................................... 41
gds32.dll ............................................................................ 41
Autorização para cliente legados ...................................... 42
Verificando se o Firebird está em execução ..................... 44
Instalação via Zip Kit ........................................................ 47
INSTSVC .......................................................................... 47
INSTREG .......................................................................... 49
INSTCLIENT .................................................................... 49
Migrando uma base de dados já existente, para o Firebird 3 .... 51
Porque é necessário “migrar” a base de dados? .................... 52
ODS (On Disk Structure) ...................................................... 53
Testando a integridade da base de dados com o gbak ........... 54
Problemas com a codificação de caracteres .......................... 56
Certificando sua metadata ..................................................... 58
Índice
3
Índice
4
Índice
5
Dedicatória
Dedicatória
6
Agradecimentos
Não posso deixar de começar agradecendo todos que participaram
da campanha de financiamento coletivo, possibilitando que esse livro
fosse escrito - obrigado pela confiança!
Ter escolhido o Firebird como principal (e hoje único) SGBD
usado nas minhas aplicações, me proporcionou ter contato com
pessoas do mundo todo, seja através de e-mails, chats ou mesmo
pessoalmente, nas conferências internacionais e no Firebird Developers
Day. Muitas dessas pessoas acabaram se tornando grandes colegas, e
vários foram parte importante na solução de dúvidas durante o
processo de escrita desse Guia de Migração.
Sendo assim, meu agradecimento para os core-developers Vlad
Khorsun, Alex Peshkov e Dmitry Yemanov, por estarem sempre dispostos
a responder minhas dúvidas, Jiří Činčura e Mark Rotteveel pelos
esclarecimentos nas questões do .NET Provider e Jaybird, Paul Reeves,
responsável pelo instalador do Firebird para Windows, Alexey
Kovyazin e Dmitry Kuzmenko, pela parceria de longa data que acabou se
tornando uma forte amizade, e Ivan Prenosil, pelas longas conversas
sobre temas em comum, que muitas vezes foram além do Firebird.
Obviamente, Ann Harrison, pela constante simpatia e por estar
sempre disposta a ajudar (no que for preciso), além de revisar a versão
em inglês desse guia, e seu marido, Jim Starkey, por ter criado o
InterBase© e, portanto, possibilitado a existência do Firebird. Jederson
Zuchi e Marcelo Daibert por ajudarem com a revisão do livro e, por
último, Adriano dos Santos Fernandes, por ser o único brasileiro
participando como desenvolvedor do Firebird.
Agradecimentos
7
Agradecimentos
8
Eduardo Brigoni Eduardo Sório Neto
Eduardo Suruagy Eduardo Trevisan
Eldon Rodrigues Aquino Eney Duarte Gomes - Versátil
Informática
Erick A M P
Erick Figueira
Erik Fabiano Elias Fabiano de Oliveira Prado
Fábio Albano Fábio Henrique Guimarães
Fábio Henrique Pereira do Fabio José Pandim
Nascimento
Fabrício Carvalho de Matos Fernando Oliveira Pereira
Fernando Pimenta Fernando Quartarollo
Flavio Hermes Francisco Carlos Rodrigues
Francisco Nilson Brasil da Costa Francisco Rogeres Sousa de Melo
Francisco Schimitt
Fusiontech® Sistemas
Genésio Becker George De Luca
Gerasoft Informática Ltda. Giga Informática Dracena Ltda -
Me
Gilberto S Moura Gilson Inacio do Carmo
Gilson Peloso Gleisson Leal
Grupo Acert Guto (Gutemberg Lima Sampaio)
Hélio José Almeida de Oliveira Helton Alves Costa
Hercules Gomes Cangussu Hugo Eyng
Hugo Fabrício Gonçalves e Silva Humberto Mendes
Hyperbyte Informática IBS Sistemas
Idez Sistemas Infomatte Sistemas e
Consultoria
Ismael da Silva Marques Ivan José de Mecenas Silva
Jacson Vilson Meyer Jardel Thomas
Jederson donizete Zuchi Jéter Rabelo Ferreira
Joao Batista Dias da Cruz João Bosco dos Santos
Joao Carlos S. Santos João Marcelo Collar
Joao Rodrigues dos Santos Jorge Rocha Filho
José Alberto Ferrão Silva José Antonio Bonna
José B.Moreira Jose Bezerra
Jose Helder Camurca Junior José Henrique Godoi Alves
José Nazareno Freire Neto Jose Nilton Pace
Jose Pereira de Souza Júlio César Andrade dos Anjos
Julio Cesar Mazoni Kelver Merlotti
Keysolution Kk Borges BH
Leandro Bertasso
Kleberson Toro Vidal
Agradecimentos
9
Agradecimentos
10
Prefácio
O Firebird 3.0 é a atualização mais significativa desde o
lançamento do Firebird no ano 2.000. As novidades vão desde o
aprimoramento da multitarefa, permitindo ao SuperServer aproveitar
multi-processadores simétricos, até melhorias na segurança com a
autenticação de usuários locais e tráfego criptografado de dados.
Antigos limites foram ampliados, como tamanho das senhas e o
número de transações aceitas antes de ser necessário um
backup/restore. As mudanças na interface incluem uma nova API
orientada a objetos, suporte a plug-ins que permitem estender as
funcionalidades do SGBD e providers que simplificam o
desenvolvimento da engine, reduzindo a complexidade de alternar as
formas de acesso entre embedded e baseada em servidor. O Firebird 3
é mais rápido, mais seguro, mais capaz e mais flexível do que qualquer
versão anterior.
Carlos Cantu prestou um grande serviço à Comunidade Firebird
explicando – em termos claros e precisos – como migrar aplicações
existentes para o Firebird 3. Carlos trabalha ativamente com o
Firebird desde seu lançamento, tendo lançado dois livros e escrito
dezenas de artigos sobre Firebird ao longo dos anos. Ele tem sido
fundamental apoiando e incentivando o uso do Firebird no Brasil
através do portal FireBase. Quando decidiu escrever um Guia de
Migração para ajudar os usuários no processo de migração para a
versão 3, mais de 200 empresas e desenvolvedores individuais
contribuíram financeiramente para viabilizar o projeto. O FB 3 é uma
grande versão! Dividindo as novidades em grupos é a única maneira
de entende-las e usá-las. O ponto de partida é explicar como mover
aplicativos e bases de dados de versões anteriores para o Firebird 3.
O Guia de Migração não substitui o Release Notes que acompanha o
Firebird 3, mas expande e explica uma parte do que o Release Notes
trata, reduzindo o potencial de erros e confusões ao migrar para o FB
3. Esse livro é o que você precisa para iniciar o uso do Firebird 3 com
sucesso.
Ann Harrison
Abril/2016
Prefácio
12
Introdução
Após um hiato de praticamente 10 anos, desde o lançamento do
meu último livro (Firebird 2), senti que era hora de escrever algo novo.
Sendo assim, nada melhor do que aproveitar o lançamento da tão
aguardada versão 3 do Firebird, e ajudar aqueles que pretendem
migrar seus servidores existentes para essa nova versão.
A história do Firebird 3 poderia facilmente ser enquadrada em um
dramalhão mexicano! Inúmeros atrasos, promessas não cumpridas,
mudanças de data, etc. fizeram até com que algumas pessoas
duvidassem de que, em algum momento, essa versão fosse realmente
ser lançada! Felizmente, isso está para acontecer - ou talvez já tenha
acontecido - dependendo de quando estiver lendo esse livro!
O Firebird 3 traz inúmeras novidades, como o tão aguardado
suporte total a SMP no SuperServer, criptografia no tráfego da rede e
da base de dados, usuários locais na base de dados, melhorias no
protocolo de comunicação, além de diversos novos recursos em
diferentes áreas do SGBD. Tudo isso acabou fazendo com que o
processo de migração de uma versão prévia do Firebird, não seja tão
fácil como foi nas versões anteriores, onde, basicamente, era
necessário apenas a troca do Firebird, ou, quando muito, um
backup/restore da base de dados. Essa foi a razão pela qual optei por
escrever um guia de migração!
O livro aborda apenas os tópicos essenciais relacionados ao
processo de migração. Para ficar a par de todas as novidades trazidas
nessa versão, incluindo os novos comandos PSQL, é
importantíssimo que você leia o Release Notes!
Recomendo a todos os leitores que acessem periodicamente o site
www.firebase.com.br, para se manterem informados sobre as
novidades do Firebird, além de ter acesso a centenas de artigos, dicas,
download e também à lista de discussão da FireBase, onde poderão
tirar suas dúvidas, inclusive sobre assuntos tratados aqui.
Espero que o livro seja uma agradável leitura!
Carlos H. Cantu
Março/2016
Introdução
13
Ícones usados
Durante a leitura desse livro, você encontrará diversos ícones que,
além de chamar a atenção para assuntos importantes, acabam
deixando a leitura mais leve. São eles:
Importante/Dica
Ícones usados
14
Erratas
Os erros e correções que venham a ser detectados após a
publicação desse livro estarão listados em
www.firebase.com.br/guiafb3.php.
Aconselho visitar a página periodicamente.
Novas revisões desse guia podem ser disponibilizadas a qualquer
momento, também na referida página.
Erratas
15
Classic (CS)
SuperServer (SS)
SuperClassic (SC)
Embedded
Arquitetura 32 vs 64 bits
Instalando o
Firebird 3
Aprenda a instalar o Firebird 3 no Linux e no Windows.
Instalando o Firebird 3
27
Instalando o Firebird 3
28
Instalando o Firebird 3
29
Instalando o Firebird 3
30
[osboxes@osboxes Firebird-3.0.0.32366-ReleaseCandidate2.amd64]$
Instalando o Firebird 3
31
Instalando o Firebird 3
32
Instalando o Firebird 3
33
Instalando o Firebird 3
34
Instalando o Firebird 3
35
Instalando o Firebird 3
36
Instalando o Firebird 3
37
Instalando o Firebird 3
38
Instalando o Firebird 3
39
Instalando o Firebird 3
40
Arquitetura desejada
Instalando o Firebird 3
41
Serviço ou Aplicação?
Iniciar automaticamente
gds32.dll
Instalando o Firebird 3
42
Instalando o Firebird 3
43
Instalando o Firebird 3
44
Instalando o Firebird 3
45
Instalando o Firebird 3
46
Instalando o Firebird 3
47
No Windows XP:
netsh firewall add portopening protocol=TCP port=3050
name="Firebird" mode=ENABLE scope=SUBNET
INSTSVC
A função desse utilitário, encontrado na pasta bin do Firebird, é
instalar, configurar ou manipular o servidor Firebird como serviço,
nas versões do Windows que suportam esse recurso.
O comando mais básico que podemos utilizar para instalar o
serviço FB é instsvc install. Ele fará com que o serviço do Firebird seja
criado, configurado para iniciar automaticamente durante o boot do
sistema, e sob a identidade padrão do sistema (chamada LocalSystem
ou SistemaLocal). No entanto, o instsvc fornece vários outros
parâmetros para customizar a criação e inicialização do serviço:
instsvc i[nstall]
Instalando o Firebird 3
48
[ -a[uto]* | -d[eman
[ -g[uardian] ]
[ -l[ogin] username
[ -n[ame] instance ]
[ -i[nteractive] ]
sta[rt] [ -b[oostpriority] ]
[ -n[ame] instance ]
sto[p] [ -n[ame] instance ]
q[uery]
r[emove] [ -n[ame] instance ]
Instalando o Firebird 3
49
INSTREG
O utilitário instreg.exe cria no registro do Windows a chave padrão
(HKLM\SOFTWARE\Firebird Project\Firebird Server\Instances) que
aponta para o local onde o servidor Firebird está instalado. O
processo do servidor não necessita dessa chave, mas existem
inúmeras aplicações, incluindo os utilitários do próprio Firebird, que
usam essa chave para determinar onde o Firebird está instalado.
O diretório base de instalação do Firebird a ser configurado na
chave do registro será a pasta onde se encontra o instreg.exe, por isso
é importante que ele esteja gravado e seja executado na pasta
de instalação do Firebird.
Os parâmetros para o instreg são:
instreg i[nstall]
r[emove]
Onde:
INSTCLIENT
O instclient.exe é responsável por instalar a biblioteca cliente do
Firebird (fbclient.dll) ou a biblioteca de retro-compatibilidade (gds32.dll)
na pasta de sistema do Windows.
instclient i[nstall] [ -f[orce] ] library
q[uery] library
r[emove] library
where library is: f[bclient] | g[ds32]
Instalando o Firebird 3
50
Instalando o Firebird 3
51
Firebird ODS
1.0 10.0
1.5 10.1
2.0 11.0
2.1 11.1
2.5 11.2
3.0 12.0
Sendo assim, ao migrar para o Firebird 3, você deverá usar o gbak para
fazer um backup da base de dados usando sua versão atual do Firebird
instalado. Depois, com o Firebird 3 já instalado, deverá fazer um
restore do backup anteriormente gerado, criando uma nova base de
dados com ODS = 12.
A equipe de desenvolvimento do Firebird planeja lançar, em uma
subversão futura, um provider que permita que o Firebird 3 abra bases
de dados com ODS menor que 12 (criadas por versões anteriores do
Firebird). No entanto, não se sabe se isso irá realmente acontecer,
nem quando.
COMMIT WORK;
SET AUTODDL ON;
/* Table: ATABLE, Owner: SYSDBA */
CREATE TABLE ATABLE ("CORR" INTEGER,
CAMPO_A VARCHAR(100));
/* Table: OFFSET, Owner: SYSDBA */
CREATE TABLE "OFFSET" (CAMPO1 INTEGER,
CAMPO2 VARCHAR(100));
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures bodies */
ALTER PROCEDURE TESTE AS
declare variable OVER integer;
begin
select A.CORR
from ATABLE A
into :OVER;
end ^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
O script não pôde ser executado com sucesso, parando na linha 33,
que neste caso, é:
declare variable OVER integer;
Usuários no Firebird
3
O Firebird 3 introduz grandes mudanças no gerenciamento de
usuários e no papel do SYSDBA, prepara-se para renovar seus
conceitos!
Usuários no Firebird 3
67
Usuários no Firebird 3
68
Usuários locais
Usuários no Firebird 3
69
Usuários no Firebird 3
70
Senhas
Usuários no Firebird 3
71
Usuários no Firebird 3
72
Usuários no Firebird 3
73
Usuários no Firebird 3
74
Criando usuários
Usuários no Firebird 3
75
Usuários no Firebird 3
76
Alterando usuários
Removendo usuários
Usuários no Firebird 3
77
Usuários no Firebird 3
78
Sendo que:
sec$user_name – armazena o nome do usuário;
sec$key – armazena o nome da tag
sec$value – armazena o valor da tag
sec$plugin – armazena o nome do plugin de gerenciamento de
usuários
Exemplo de retorno:
LOGIN TAG VALUE PLUGIN
=========== ================ ============= ==================
SYSDBA <null> <null> Srp
SYSDBA <null> <null> Legacy_UserManager
ALBERT ESPECIALIDADE matematica Srp
ALBERT GRAU genio Srp
JOAO <null> <null> Srp
Usuários no Firebird 3
79
• Default: security3.fdb;
• Self: a própria base de dados armazena os
usuários;
• Other: uma base de dados de segurança
específica;
Usuários no Firebird 3
80
Usuários no Firebird 3
81
Usuários no Firebird 3
82
Usuários no Firebird 3
83
from RDB$USERS
where RDB$USER_NAME is not null and
upper(RDB$USER_NAME) != 'SYSDBA' -- pula o usuário
SYSDBA
into :USR, :FRST, :MDDL, :LST, :UID, :GID, :PASSWD
do
begin
-- Monta o SQL de criacao de usuarios
SQL = 'create or alter user ' || USR || ' password ''' ||
PASSWD || '''';
if (FRST is not null) then
SQL = SQL || ' firstname ''' || FRST || '''';
if (MDDL is not null) then
SQL = SQL || ' middlename ''' || MDDL || '''';
if (LST is not null) then
SQL = SQL || ' lastname ''' || LST || '''';
SQL = SQL || ' active';
-- recupera o GID se houver
ATTR = '';
if (UID is not null) then
ATTR = 'uid=''' || UID || '''';
if (GID is not null) then
begin
if (char_length(ATTR) > 0) then
ATTR = ATTR || ', ';
ATTR = ATTR || 'gid=''' || GID || '''';
end
if (char_length(ATTR) > 0) then
begin
SQL = SQL || ' tags (' || ATTR || ')';
end
execute statement SQL; -- cria o usuario
suspend; -- retorna o usuario e a senha gerada
end
end^
commit ^
exit ^
Usuários no Firebird 3
84
Protegendo os
dados armazenados
Saiba porque o assunto é muito mais complexo do que parece, e a
solução pode se estender além do próprio Firebird...
Conclusão
Para garantir que seus dados não serão roubados, siga os seguintes
passos:
Melhorias no
protocolo de
comunicação
Criptografia dos dados trafegados, compressão e otimizações
Cliente Servidor
Disabled Enabled Required
Disabled Desativada Desativada Rejeitada
Enabled Desativada Ativada Ativada
Required Rejeitada Ativada Ativada
Status da criptografia dependendo da configuração do WireCrypt no
cliente e no servidor. As opções destacadas são as padrão.
Fonte: http://www.javamex.com/tutorials/cryptography/ciphers.shtml
Compactação do tráfego
servidor durante a execução das tarefas. Em uma rede local, isso não
atrapalha em nada, mas em redes com alta latência (ex: internet), a
diferença chega a ser gritante.
String de conexão
Saiba como dizer ao Firebird qual protocolo de transporte deve ser
usado na conexão.
String de conexão
101
Sintaxe “legada”
String de conexão
102
String de conexão
103
Conexão local:
/db/mydb.fdb
C:\db\mydb.fdb
mydb
Onde:
INET = TCP/IP
WNET = NetBeui (named pipes)
XNET = Conexão local via shared memory
String de conexão
104
String de conexão
105
String de conexão
106
Endereços IPv6
String de conexão
107
Firebird 3 e
aplicações legadas
Saiba quais cuidados devemos ter com aplicações existentes, para que
funcionem bem com o Firebird 3.
Performance de queries
Pode ser que após a mudança para o Firebird 3 (ou mesmo para
qualquer versão do Firebird), queries que anteriormente tinham uma
boa performance, passem a apresentar performance ruim (apesar de
raro, pode acontecer!). As principais razões para justificar tal
comportamento são:
Palavras reservadas
isql employee
Database: employee, User: SYSDBA
SQL> select count(*) from mon$attachments;
COUNT
=====================
3
SQL> select mon$user, mon$system_flag from mon$attachments;
MON$USER MON$SYSTEM_FLAG
=============================== ===============
SYSDBA 0
Cache Writer 1
Garbage Collector 1
Apêndices
Apêndices
119
Macros
Uma série macros pré-definidos são disponibilizados de forma a
facilitar a referência dos diretórios, nos arquivos de configuração. A
sintaxe dos macros segue o padrão $(nome_do_macro).
$(root)
Diretório raiz de instalação do Firebird.
$(install)
Diretório onde o Firebird foi instalado. Inicialmente, $(install) e $(root)
são idênticos. No entanto, $(root) pode ser sobrescrito pela configuração da
variável de ambiente FIREBIRD.
$(this)
Diretório onde o arquivo de configuração atual está localizado.
$(dir_conf)
Diretório onde o firebird.conf e o databases.conf estão localizados.
$(dir_secdb)
Diretório onde a base de dados de segurança padrão está localizada.
$(dir_plugins)
Diretório onde os plug-ins estão localizados.
$(dir_udf)
Diretório padrão onde as UDFs estão localizadas.
$(dir_sample)
Diretório onde os arquivos de exemplos estão localizados.
$(dir_sampledb)
Diretório onde a base de dados de exemplo (employee.fdb) está
localizada
$(dir_intl)
Diretório onde os módulos de internacionalização estão localizados.
$(dir_msg)
Apêndices
120
Entradas de configuração
Apêndices
121
Apêndices
122
ConnectionTimeout
DummyPacketInterval
IpcName
RemoteAuxPort
RemotePipeName
RemoteServiceName
RemoteServicePort
TCPNoNagle
Apêndices
123
Glossário
BDE: Borland Database Engine – mecanismo de acesso a
diferentes bancos de dados, entre eles dBase, Paradox, InterBase©,
SQLServer, Oracle, etc. Foi amplamente utilizada em projetos
desenvolvidos com as linguagens de programação da Borland, como
o Delphi, CBuilder, etc. Apesar de facilitar a vida do desenvolvedor,
sua performance com SGBDRs era deficitária, pois em troca da
facilidade de programação, ela deixava de utilizar vários recursos
específicos de cada SGBD. Atualmente está descontinuada.
BLR: Mais uma vez, BLR não nasceu como um acrônimo, apesar
das letras serem as iniciais do gerente do projeto Rdb/ELN da DEC.
Por definição, BLR era um formato simples para representar queries
SQL, ou as linguagens QUEL e DGML (já extintas). Hoje a sigla
representa Binary Language Representation, linguagem utilizada
dentro da engine do Firebird. Procedures, triggers, views, etc. são
compilados na forma de BLR, e armazenados dentro do banco de
dados.
Glossário
124
Glossário
125
Glossário
126
Glossário
127
Glossário
128
Glossário
129
Glossário
130
Sweep: Processo que libera o espaço que não está mais em uso
pelo Firebird, como, por exemplo, espaço ocupado por registros
apagados ou versões temporárias de registros, para que seja
reutilizado no armazenamento de novas informações, além de
avançar a OIT. Pode ser iniciado automaticamente ou manualmente.
Percorre todos os registros de todas as tabelas do banco de dados e,
portanto, pode ocasionar queda de performance no servidor
enquanto estiver sendo executado.
Glossário
131
Glossário