Você está na página 1de 84

Firebird Verso 1.

Notas da Verso v.1.5


08 de Fevereiro de 2004 Verso 1.08

Contedo
Notas Gerais Novas Funcionalidades Compatibilidade com Verses Anteriores Aperfeioamento da Linguagem ! Tipos de Campos ! Meta dados ! DSQL ! PSQL ! Firebird 1.0.x Novas Palavras Reservadas Funcionalidades ISQL Funes Definidas pelo Usurio (UDFs) ! na biblioteca ib_udf ! na biblioteca fbudf Novo Arquivo de Configuraofirebird.conf ! Parmetros relacionados com o Sistema ! Relativos aos Recursos ! Relativos s Comunicaes ! Especficos POSIX Parmetros firebird.conf (continuao) ! Especficos Windows ! Espao de Ordenao ! Compatibilidade Alias de Arquivos de BD ! Conexo usando um alias ! Nomeando bases de dados no Windows Equipe de Desenvolvimento do Firebird Notas de Instalao ! Windows 32-bit ! Linux/UNIX ! Solaris ! MacOS X ! FreeBSD Informao Adicional Ferramentas e Drivers Documentao Erros Corrigidos

Notas Gerais
O Servidor de Banco de dados Firebird foi desenvolvido por um grupo independente de programadores a partir do cdigo fonte original do InterBase que foi disponibilizado pela Borland sob a InterBase Public License v.1.0, em 25 de Julho de 2000. O desenvolvimento do cdigo do Firebird 2 comeou antes mesmo do trmino do desenvolvimento da primeira verso do Firebird 1, com a adaptao do cdigo original de C para C++ e a primeira limpeza geral. O Firebird 1.5 o primeiro lanamento do cdigo do Firebird 2. um passo significativo para os programadores e para todo o projeto Firebird, mas ainda no um fim. Simultaneamente ao

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 1

lanamento da verso 1.5, novas alteraes esto sendo continuamente efetuadas para o desenvolvimento do Firebird 2. A manuteno do Firebird 1.0.x prossegue normalmente as correes de erros e melhorias importantes do Firebird 1.5 foram transportadas para a verso 1.0.

Os Executveis do Firebird 1.5


Os executveis do Firebird podem ser obtidos no site da Web: http://sourceforge.net/projet/showfiles.php?group_id=9028

Descries de Verso do Firebird 1.5


Win32: "WI-V1.5.0.nnnn Firebird 1.5" Linux: "LI-V1.5.0.nnnn Firebird 1.5" E assim por adiante, sendo nnnn o nmero da compilao. Veja a Seo de Documentao para obter informao sobre a documentao recomendada.

Novas Funcionalidades Novo cdigo, melhor otimizao


Esta verso foi desenvolvida a partir da transposio do cdigo original em C para C++, um processo iniciado em 2000 por Mike Nordell. Alm do processo contnuo de reviso, limpeza e remoo de erros, foi desenvolvido um novo gerenciador de memria, e foram introduzidas novas funes na linguagem. Ainda durante o desenvolvimento da verso 1.5, o SQL Query Optimizer recebeu uma srie de melhorias e correes, implementadas por Arno Brickman e outros, resultando em ganhos de performance de 30 a 60 % e mesmo mais em alguns casos.

Arquitetura
Duas novidades importantes nas plataformas Windows so os servidores Classic e o Embedded.
!

No existia uma verso do modelo Classic para windows h mais de 8 anos. Este verso pode utilizar mltiplos processadores, algo que ainda no suportado de forma adequada na verso SuperServer para Windows. Embora utilizvel, a verso do modo Classic deve ser vista ainda como experimental. Embedded Server (ou servidor embutido) uma DLL que integra um cliente com uma nica conexo e um servidor SuperServer para permitir a construo rpida e eficiente de aplicaes mono usurio e transportveis.

Vrias e importantes extenses foram adicionadas linguagem desde a verso 1.0.x, incluindo as expresses condicionais do SQL-92 CASE, COALESCE e NULLIF. Para informaes detalhadas destas e outras extenses linguagem, refira-se ao captulo Extenses Linguagem deste mesmo documento.

Mdulos Instalados e Segurana


Se voc est familiarizado com o Firebird 1.0.x, vai notar vrias diferenas nos nomes dos mdulos e nas regras para o seu acesso e localizao. Em seguida destacaremos algumas destas mudanas, mas para informaes detalhadas sobre a instalao, estrutura em disco e configurao refira-se as respectivas sees.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 2

1. A maior parte dos mdulos e constantes mudaram de nome. Na maior parte dos casos, os novos nomes possuem alguma variante da palavra firebird ou do prefixo fb. Por exemplo, a biblioteca API faz agora parte da biblioteca compartilhada fbclient.dll no Windows e libfbclient.so nas outras plataformas. A exceo a esta regra o banco de dados de segurana, que antigamente chamava-se isc4.gdb, e agora foi renomeado para security.fdb. 2. Os arquivos externos utilizados pelo servidor (bibliotecas UDF, filtros BLOBs, bibliotecas de set de caracteres, tabelas externas) esto agora sujeitas a nveis de proteo no sistema de arquivos que, em alguns casos, so por padro diferentes dos utilizados nas verses 1.0.x e pelo Interbase. 3. O novo arquivo de configurao do servidor firebird.conf substitui os anteriores ibconfig (Windows) e isc_config (outras plataformas), e contm mais opes de configurao, alm de uma nova organizao e documentao integrada. 4. Possibilidade de criar apelidos para as bases de dados na verso 1.5. Agora permitido, opcionalmente, ocultar a localizao de uma base de dados atribuindo-lhe um apelido, ou alias. A localizao original dos arquivos encontra-se em outro arquivo, aliases.conf. O principal objetivo desta funo proteger a localizao fsica dos arquivos de um sniffer que espione a rede. 5. Por padro (e por prtica) nos Servidores Windows utiliza-se o usurio local system para executar o programa que instala o Firebird como servio na inicializao do sistema. Isto pode ser uma sria vulnerabilidade de segurana, pois deixa uma porta aberta para acesso a toda a mquina. A verso 1.5 do instalador (instsvc.exe) aceita usurios especficos do windows para a instalao do servio. altamente recomendvel que se crie um usurio Firebird para este propsito, e que se utilize esta nova funcionalidade se o seu servidor estiver de alguma forma conectado internet.

Trimming de Campos Varchar em protocolos remotos


Foi terminado o trabalho de implementar esta funo no cliente 1.5, e agora os campos Varchar so transferidos right-trimmed pela rede (i.e., os caracteres de espaos direita no so transmitidos), ocupando apenas o nmero de caracteres utilizados mais 2 bytes. NOTA: Como o cliente quem solicita ao servidor a execuo do trim dos varchars, o cliente Firebird 1.5 (fbclient.dll ou libfbclient.so) far o trim, mesmo quando conectado a um servidor de verso anterior 1.5. Uma verso anterior do cliente no obter o trimming, mesmo que conectado a um servidor 1.5 ou posterior.

Semntica de Triggers para Mltiplas aes


Agora voc pode escrever em uma nica Before ou After Trigger aes condicionais para as diferentes operaes de tabela : insert, update ou delete. Esta nova semntica facilita a elaborao e a manuteno de Triggers sem eliminar a possibilidade de estabelecer mltiplos triggers para cada fase.

Melhoria na nomenclatura de constraints


Os ndices que foram a integridade podem agora possuir um nome definido pelo usurio. Ateno ! Se utilizada esta funcionalidade, o banco de dados no ser mais compatvel com a v.1.0.x ou com o InterBase.

Nmero mximo de ndices por Tabela foi aumentado


Agora - tanto na verso 1.0 como nesta verso o nmero mximo de ndices por tabela passou de 64 para 256.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 3

Pessimistic locking
Para os casos raros em que for preciso aplicar um bloqueio pessimista, esta verso adiciona uma nova sintaxe para impor um bloqueio de leitura em linhas enquanto elas so manipuladas pelo cliente. Use este recurso com muito cuidado.

Cache de Conexo base de dados de Segurana


A conexo base de dados de segurana mantida em cache na verso SS. Isto , o security.fdb carregado em memria quando a primeira conexo feita, e mantido em memria enquanto houver conexes clientes ativas.

Melhores mensagens de erro


Sempre que possvel, as mensagens que reportam erros de SQL so agora mais detalhadas. importante ressaltar que podem ocorrer mensagens estranhas se forem utilizados arquivos interbase.msg ou firebird.msg de verses anteriores.

Servios API na verso Classic do Linux


Est disponvel o suporte limitado para os Servios API para a verso do Classic Server em Linux. Os Servios disponveis so os de gbak (backup/restore) e gfix (validar base de dados, shutdown/online, etc). Os demais (gstat, registros do servidor, etc.) no foram testados e provavelmente permanecem no funcionais.

Alteraes nas bibliotecas do Cliente


Clientes Windows
A biblioteca cliente foi renomeada para fbclient.dll. Todos os utilitrios do servidor (gbak, gfix, etc) utilizam apenas esta biblioteca. Conecte as novas aplicaes diretamente pela fbclient.dll, sem necessidade da gds32.dll (Recomendado). Para manter a compatibilidade com as aplicaes existentes, possvel gerar uma cpia da biblioteca fbclient.dll com o nome de gds32.dll usando o novo utilitrio instclient.exe. Para instrues mais detalhadas veja a seo de instalao e as notas mais recentes da distribuio Windows do Firebird.

Clientes Linux
A biblioteca cliente do Super Server chama-se agora libfbclient.so. Para compatibilidade com aplicaes existentes, instalado um symlink libgds.so que aponta para libfbclient.so. A biblioteca local para aplicaes embedded que se conectam ao servidor Classic foi renomeada para libfbembed.so.

Arquivos e Mdulos renomeados


Plataforma Todas Mdulo Variveis de Ambiente Firebird 1.0 INTERBASE INTERBASE_LOCK INTERBASE_MSG INTERBASE_TMP Firebird 1.5 FIREBIRD FIREBIRD_LOCK FIREBIRD_MSG FIREBIRD_TMP Notas especiais Diretrio raiz de instalao Local do arquivo de Lock Local do arquivo de Mensagem Diretrio utilizado como espao para Sort

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 4

Plataforma Todas Todas Todas Todas

Mdulo Base de Dados de Segurana Arquivo de Mensagens Arquivo de Log Verso de ODS

Firebird 1.0 Isc4.gdb Interbase.msg interbase.log 10

Firebird 1.5 security.fdb firebird.msg firebird.log 10.1

Notas especiais

Novo ODS (10.1). No provoca nenhuma incompatibilidade com verses anteriores de ODS mas a verso mesmo assim no atualizada automaticamente. Tanto o Firebird 1.0 como o 1.5 suportam BDs de ODS 10.0 e 10.1. Porm, a operao de backup/restore ainda o procedimento recomendado para migrar BDs para uma verso diferente do servidor.

Linux Linux Linux Linux Linux Linux

Binrio do Classic server Gerenciador de lock Classic Controle Superserver Binrio Superserver Arquivo de Configurao Biblioteca Cliente

Gds_inet_server ib_lock_mgr ibmgr.bin ibserver isc_config Libgds.so

fb_inet_server fb_lock_mgr fbmgr.bin fbserver firebird.conf libfbclient.so Cliente remoto Thread-safe e cliente TCP/IP local loopback para Superserver Cliente local (mono usurio, no thread-safe) para Classic

libfbembed.so Linux Symlink para Biblioteca cliente para Compatibilidade Guardian Binrio Superserver Binrio Classic N/A libgds.so

Windows Windows Windows

ibguard.exe ibserver.exe N/A

fbguard.exe fbserver.exe fb_inet_server.e xe No tem suporte a SMP. Conexes locais Windows no disponveis. TCP/IP, NetBEUI OK. Suporte a SMP.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 5

Plataforma Windows

Mdulo Biblioteca Cliente

Firebird 1.0 gds32.dll

Firebird 1.5 fbclient.dll

Notas especiais Os utilitrios do servidor de verso 1.5, e todas as novas aplicaes, apenas necessitam da fbclient.dll. Veja as notas a seguir sobre compatibilidade do gds32.dll para aplicaes antigas.

Windows

Windows Windows

Com as configuraes padres no possvel estabelecer conexes locais com a verso anterior da biblioteca cliente (gds32.dll). Se necessrio, o servidor pode ser configurado para usar o nome antigo do mapa IPC, via firebird.conf. Windows Registry key HKLM\SOFTWARE\ HKLM\SOFTWAR O diretrio armazenado no Borland\InterBase E\Firebird Proje parmetro "DefaultInstance". Padro ct\Firebird Serv i.e., no existe mais a chave er\Instances "CurrentVersion", e a chave "RootDiretory" foi substituda por "DefaultInstance". No Windows os novos nomes dos servios so Firebird Guardian DefaultInstance e Firebird Server DefaultInstance.

Biblioteca Cliente para compatibilidade Arquivo de Configurao Local IPC port

N/A

gds32.dll

ibconfig InterBaseAPI

firebird.conf FirebirdAPI

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 6

Compatibilidade Estrutura Em Disco (On-Disk structure - ODS)


A Estrutura Em Disco do Firebird 1.5 foi designada como 10.1. Esta pequena atualizao do ODS foi necessria pelos seguintes motivos : - Trs novos ndices nas tabelas de sistema - Pequenas alteraes no BLR de dois triggers de sistema - Melhorias na codificao do RDB$TRIGGER_TYPE. Algumas outras novas funcionalidades que requerem alteraes na ODS foram adiadas para a verso 2. At l, ser possvel transportar diretamente bases de dados Firebird 1.0.x. Tenha uma cpia testada das bases Firebird 1.0.x antes de transferi-las para um servidor 1.5.

Base de Dados InterBase


Caso queira brincar com o Firebird usando uma base de dados InterBase, e pretenda reverter a base para o Interbase mais tarde, faa um backup utilizando a verso correspondente do gbak do Interbase. Para comear a trabalhar com o Firebird 1.5, utilize o gbak deste para fazer o restore do seu backup. O Operations Guide da Documentao do InterBase 6.0 beta contm a sintaxe dos comandos do utilitrio gbak para backup e restore. As bases de dados do IB 7.x e provavelmente do IB 6.5 podero trabalhar incorretamente depois de migradas para o FB 1.5 via backup/restore, se algumas das novas funcionalidades especficas do IB tiverem sido utilizadas.

Local e Nomes de Arquivo


Nesta verso, uma quantidade substancial de arquivos foi renomeada, fruto do trabalho da substituio de nomes herdados pelo InterBase 6. Leia a seco de Local e Nomes de Arquivos para obter as descries e algumas recomendaes.

Execuo Simultnea de Servidores


As alteraes efetuadas nos nomes dos objetos de sistema permitem que o Firebird 1.5 seja instalado e utilizado numa mquina que possua o InterBase ou o Firebird 1.0.x instalado. No Windows, o FB 1.5 ainda usa outra chave de registro. Se o servidor for configurado para usar outras portas de rede, possvel executar vrias instncias do servidor simultaneamente, ou executar a verso 1.5 ao concorrentemente com o IB ou o FB 1.0.x.

Voltando ao Firebird 1.0.x


Devido ao enorme nmero de erros resolvidos, o comportamento da base de dados pode variar se for feito um downgrade de uma base v.1.5 para v.1.0.x. Concretamente, caso sejam criadas chaves primrias, nicas ou estrangeiras como constraints, os valores padres dos nomes dos ndices sero incompatveis com a v.1.0.x. Sero publicados arquivos README detalhando estes casos, na medida em que eles ocorrerem.

Compatibilidades em Linux
Devido a um histrico de problemas envolvendo o compilador GNU C++, as verses de Linux do Firebird 1.5 requerem verses glibc superiores s que eram usadas anteriormente. Isto faz com que, infelizmente, estejamos num perodo em que difcil prever que distribuies Linux podero instalar e

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 7

executar a verso 1.5. O quadro abaixo pode ser usado como referncia. Porm, agradecemos toda a informaes que possam ser fornecidas. Por favor, compartilhe a sua experincia com estas e outras distribuies linux no forum firebird-devel. Distribuio Red Hat Nvel 7.x 8.0 9.0 Mandrake 8.x 9.0, 9.1, 9.2 SuSE 7.3 Classic No Sim Sim No Sim Sim pacotes de instalao libgcc-3.2-44.i586.rpm & libstdc++-3.2-44.i586.rpm antes de instalar o Firebird 1.5. Sim Superserver No Sim Sim No Sim Desconhecido

8.0, 8.1

8.0 Sim (8.1 Desconhecido)

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 8

Extenses Linguagem

TIPOS DE CAMPOS
(1.5) Novos tipos de Campos SQL Nativos
BIGINT Tipo numrico inteiro de 64 bits, compatvel SQL99, sinalizado e de escala zero. Disponvel apenas no dialeto 3.
Exemplo (s) i)

DECLARE VARIABLE VAR1 BIGINT;


ii)

CREATE TABLE TABLE1 (FIELD1 BIGINT);

META DADOS
(1.5) Melhorias a named constraints
Dmitry Yemanov

Os ndices que foram named constraints podem agora ter um nome atribudo, com identificadores definidos pelo usurio. Em verses anteriores, embora fosse possvel atribuir um nome a constraints do tipo PRIMARY, FOREIGN KEY e UNIQUE, o identificador do ndice gerado automaticamente era definido pelo sistema, p.ex. RDB$FOREIGN13 e no podia ser alterado. Esta continua a ser a regra quando esta nova funcionalidade no utilizada. Porm, foram adicionadas extenses linguagem para permitir que : a) um ndice gerado automaticamente pelo sistema receber automaticamente como identificador o mesmo nome que a constraint que ele fora. b) um ndice que fora uma constraint, com ou sem nome, possua ele mesmo um nome atribudo por um identificador e opcionalmente ser construdo em ordem descendente. NOTA: No ainda possvel utilizar um ndice pr-existente. Sintaxe ... [ADD] CONSTRAINT [<identificador-da-constraint>] <tipo-de-constraint > <definio-de-constraint> [USING [ASC[ENDING] | DESC[ENDING]] INDEX <nome_do_indice>] Aviso: Tem que garantir que os ndices foreign key e primary key usam o mesmo tipo de ordenao (DESC | ASC). Exemplos i) Named constraint e atribuio de nome ao ndice

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 9

CREATE TABLE ATEST ( ID BIGINT NOT NULL, DATA VARCHAR(10)); COMMIT; A declarao seguinte ir criar uma primary key constraint com o nome PK_ATEST e um ndice, descendente, com o nome IDX_PK_ATEST: ALTER TABLE ATEST ADD CONSTRAINT PK_ATEST PRIMARY KEY(ID) USING DESC INDEX IDX_PK_ATEST; COMMIT; ii) Uma alternativa a i) seria:

CREATE TABLE ATEST ( ID BIGINT NOT NULL, DATA VARCHAR(10), CONSTRAINT PK_ATEST PRIMARY KEY(ID) USING DESC INDEX IDX_PK_ATEST; iii) Esta declarao cria a tabela ATEST com uma primary key PK_ATEST. O ndice correspondente ter o mesmo nome: PK_ATEST.

CREATE TABLE ATEST ( ID BIGINT NOT NULL, DATA VARCHAR(10), CONSTRAINT PK_ATEST PRIMARY KEY(ID));

(1.5) Triggers de Multi Aes


Dmitry Yemanov

Os Triggers foram melhorados para permitir o uso condicional em vrias operaes. Sintaxe CREATE TRIGGER nome FOR tabela [ATIVE | INATIVE] {BEFORE | AFTER} <ao mltipla > [POSITION nmero] AS Corpo_do_Trigger <ao mltipla> ::= <ao simples> [OR <ao simples> [OR <ao simples>]] <ao simples> ::= {INSERT | UPDATE | DELETE} Exemplos i) CREATE TRIGGER TRIGGER1 FOR TABLE1 [ATIVE] BEFORE INSERT OR UPDATE AS ...; ii) CREATE TRIGGER TRIGGER2 FOR TABLE2 [ATIVE] AFTER INSERT OR UPDATE OR DELETE AS ...;

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 10

Alterao do ODS O campo RDB$TRIGGER_TYPE (relao RDB$TRIGGERS) foi estendido para permitir estas operaes de triggers complexas. Se desejar obter mais detalhes, leia o documento readme.universal_triggers.txt no diretrio /doc/sql.extensions na rvore CVS do Firebird. Nota (s): 1. Triggers de apenas uma ao so totalmente compatveis ao nvel de ODS com o FB 1.0. 2. O tipo de RDB$TRIGGER_TYPE depende da sua ordem, i.e., BEFORE INSERT OR UPDATE e BEFORE UPDATE OR INSERT sero codificados de forma diferente, embora compartilhem a mesma semntica e sejam executados exatamente da mesma forma. 3. As variveis de contexto OLD e NEW esto disponveis em triggers de mltipla ao. Se a operao que disparar o trigger for incompatvel com o seu uso (por exemplo, OLD numa operao de INSERT), todos os campos nesse contexto sero tratados como NULL. A tentativa de atribuir um valor a uma varivel num contexto invlido ir provocar uma exceo. 4. Foram criadas novas variveis de contexto - INSERTING/UPDATING/DELETING que podem ser utilizadas para verificar a operao em tempo de execuo. (Veja mais adiante)

(1.5) RECREATE VIEW


Exatamente o mesmo que CREATE VIEW se a view ainda no existir. Se ela j existir, RECREATE VIEW ir tentar destrui-la antes de criar um novo objeto. RECREATE VIEW ir falhar se o objeto estiver em uso. Utiliza a mesma sintaxe que CREATE VIEW.

(1.5) CREATE OR ALTER {TRIGGER | PROCEDURE }


Esta declarao ir criar um novo trigger ou procedure (se ainda no existirem) ou alter-lo (caso eles j existam) e voltar a recompil-lo. A sintaxe CREATE OR ALTER preserva as dependncias e permisses existentes. A sintaxe a mesma de CREATE TRIGGER | CREATE PROCEDURE, respectivamente, exceto a declarao OR ALTER.

(1.5) NULLs em unique constraints e ndices


Dmitry Yemanov

Agora possvel aplicar uma constraint UNIQUE ou um ndice UNIQUE a colunas que no possuam a constraint NOT NULL, em acordo com o SQL-99. Tenha cuidado com a utilizao desta nova funcionalidade se planeja reverter a sua base de dados para Firebird 1.0.x ou qualquer verso do Interbase. < definio de constraint ou definio de ndice > ::= < especificao nica > ( < lista de colunas nicas - LCU > ) < especificao nica > ::= {{[constraint-name]UNIQUE | UNIQUE INDEX nome-ndice]} | [constraint-name] PRIMARY KEY}

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 11

Onde < lista de colunas nicas > pode conter uma ou mais colunas sem o atributo NOT NULL se a < especificao nica > utilizada for UNIQUE OR UNIQUE INDEX. Note que todas as colunas que participem de uma chave primria ainda precisam ser declaradas como NOT NULL. A constraint permite a existncia somente daquelas linhas que retornem como verdadeiras as condies de procura (i) or (ii) , seguindo a seguinte lgica :

i)

Se a < especificao nica > for PRIMARY KEY, ento a condio de procura dever ser :

UNIQUE ( SELECT LCU FROM TN ) AND ( LCU ) IS NOT NULL ii) De outra forma, a < condio de procura > dever ser :

UNIQUE ( SELECT LCU FROM TN ) Neste caso, a condio nica no ser verdadeira se ( SELECT LCU FROM TN ) retornar duas linhas em que os correspondentes segmentos no nulos sejam iguais. A constraint permite a existncia somente das linhas onde a j mencionada < condio de procura > seja avaliada como verdadeira. Em um < UNIQUE INDEX > ou sobre uma constraint UNIQUE, dois conjuntos de valores de colunas ser considerado distinto, e assim legtimos se : a) Ambos os conjuntos contm apenas nulos, ou b) H pelo menos um par de valores onde um dos valores correspondentes diferente de nulo e o outro ou nulo ou um valor no nulo diferente. Exemplos UNIQUE constraint: CREATE TABLE t (a INTEGER, b INTEGER, CONSTRAINT pk UNIQUE (a, b)); ou UNIQUE index: CREATE TABLE t (a INTEGER, b INTEGER); COMMIT; CREATE UNIQUE INDEX uqx ON t(a, b); COMMIT; INSERT INTO t VALUES (NULL, NULL); /* ok, nulos permitidos */ INSERT INTO t VALUES (1, 2); /* assim como no nulos */ INSERT INTO t VALUES (1, NULL); /* e combinaes */ INSERT INTO t VALUES (NULL, NULL); /* ok, pares nulos so consideredos distintos */ mas INSERT INTO t VALUES (1, NULL); /* incorreto porque os segmentos no nulos correspondentes so iguais */ Ou seja, uma constraint PRIMARY KEY no permite nulos enquanto uma constraint UNIQUE ou um UNIQUE INDEX permite quantidades arbitrrias de nulos. Para resultados multi-colunados de ( SELECT UCL FROM TN ), as regras comuns de nulo se aplicam , i.e. (1, NULL) distinto de (NULL, 1) e um (NULL, NULL) distinto de qualquer outro (NULL, NULL).

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 12

DSQL
(1.5) Expresses e variveis como argumentos de procedure
Dmitry Yemanov

Chamadas a EXECUTE PROCEDURE ProcName(<Lista-De-Argumentos >) e SELECT <lista-Do-Output> FROM ProcName(<Lista-De-Argumentos >) agora permitem como argumentos variveis locais (em PSQL) e expresses (em DSQL e PSQL).

(1.5) Novas construes para Expresses Condicionais


Arno Brinkman

a) CASE
Permite que o resultado de uma coluna seja determinado com base na avaliao de um conjunto de condies exclusivas. Sintaxe <expresso case> ::= <abreviatura de case> | <especificao case> <abreviatura de case> ::= NULLIF <parent. esquerdo> <expresso ou valor> <vrgula> <expresso ou valor> <parent. direito> | COALESCE <parent. esquerdo> <expresso ou valor> {<vrgula> <expresso ou valor>}...<parent. direito> <especificao case> ::= <case simples> | <case com condio> <case simples> ::= CASE <expresso ou valor> <clusula when simples>... [ <clusula else> ] END
<case> ::=

CASE <clusula when condicional>... [ <clusula else> ] END <clusula when simples> ::= WHEN <operador de when> THEN <resultado> <clusula when condicional > ::= WHEN <condio de procura> THEN <resultado> <operador de when> ::= <expresso ou valor> <clusula else> ::= ELSE <resultado> <resultado> ::= <expresso resultado> | NULL <expresso resultado> ::= <expresso ou valor> Exemplos i) simples

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 13

SELECT o.ID, o.Description, CASE o.Status WHEN 1 THEN 'Confirmado' WHEN 2 THEN 'Em produo' WHEN 3 THEN 'Disponvel' WHEN 4 THEN 'Enviado' ELSE 'Status Desconhecido: ''' || o.Status || '''' END FROM Orders o; ii) condicional SELECT o.ID, o.Description, CASE WHEN (o.Status IS NULL) THEN 'Novo' WHEN (o.Status = 1) THEN 'Confirmado' WHEN (o.Status = 3) THEN 'Em produo' WHEN (o.Status = 4) THEN 'Disponivel' WHEN (o.Status = 5) THEN 'Enviado' ELSE 'Status Desconhecido: ''' || o.Status || '''' END FROM Orders o;

b) COALESCE
Permite que o valor de uma coluna seja definido por um srie de expresses, onde a primeira destas expresses que resulte em um valor no nulo (NOT NULL) ser o valor retornado. Formato <abreviatura de case> ::= | COALESCE <parent. esquerdo> <expresso ou valor> { <vrgula> <expresso ou valor> }... <parent. direito> Regras de Sintaxe i) COALESCE (V1, V2) equivale seguinte expresso <case >: CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END ii) COALESCE (V1, V2,..., Vn), para n >= 3, equivalente a um <case>: CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2,...,Vn) END
Exemplos

SELECT PROJ_NAME AS NomeDoProjeto, COALESCE(e.FULL_NAME,'[> No Atribudo <]') AS Funcionario FROM PROJET p LEFT JOIN EMPLOYEE e ON (e.EMP_NO = p.TEAM_LEADER); SELECT COALESCE(Phone,MobilePhone,'Desconhecido') AS Telefone FROM Relations

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 14

a) NULLIF
Retorna NULL para uma expresso se ela resultar no valor especificado, caso contrrio retorna o prprio valor da expresso. Formato <abreviatura de case> ::= NULLIF <parent. esquerdo> <expresso ou valor> <vrgula> <expresso ou valor> <parent. direito> Regras de Sintaxe NULLIF (V1, V2) equivalente ao <case >: CASE WHEN V1 = V2 THEN NULL ELSE V1 END Exemplo UPDATE PRODUTOS SET STOCK = NULLIF(STOCK,0)

(1.5) SAVEPOINTs compatveis com SQL99


Nickolay Samofatov

SAVEPOINTs definidos pelo usurio (tambm conhecidos como nested transactions) disponibilizam um mtodo conveniente para tratar erros de lgica sem a necessidade de fazer um rollback da transao como um todo. Disponvel apenas em DSQL. Utilize uma declarao SAVEPOINT para identificar um ponto de transao, ao qual ser possvel retornar atravs de um Rollback parcial. SAVEPOINT <identificador>; <identificador> especifica o nome do SAVEPOINT que ser estabelecido. Depois de criado um SAVEPOINT voc pode continuar o processamento, executar um commit ou um rollback de toda a transao, ou ainda um rollback at o SAVEPOINT. Os nomes dos SAVEPOINT devem que ser nicos no contexto de uma transao. Se um segundo SAVEPOINT for estabelecido com o mesmo identificador, o primeiro ser sobreposto. ROLLBACK [WORK] TO [SAVEPOINT] <identificador>; Esta declarao executa as seguintes operaes: - Rollback das alteraes executadas na transao aps o SAVEPOINT - Destri todos os SAVEPOINTs criados aps este SAVEPOINT. Este SAVEPOINT mantido, para que voc possa fazer um rollback para o mesmo SAVEPOINT mltiplas vezes. Os SAVEPOINTs anteriores a este tambm sero mantidos. - Libera todos os locks obtidos implcita e explicitamente aps o SAVEPOINT. Outras transaes que tenham requerido acesso a linhas que estavam protegidas pelas alteraes efetuadas aps a criao do SAVEPOINT tero que continuar aguardando que a transao termine, por commit ou rollback. Outras transaes, que no tivessem requerido ainda estas linhas, podero requerer e acessa-las imediatamente. Nota: este comportamento pode ser alterado em futuras verses.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 15

O undo log do SAVEPOINT pode consumir uma grande quantidade de memria do servidor, principalmente se forem feitas modificaes sobre os mesmos registros mltiplas vezes na mesma transao. Utilize a declarao RELEASE SAVEPOINT para liberar os recursos consumidos para a manuteno do SAVEPOINT. RELEASE SAVEPOINT <identificador> [ONLY]; A declarao RELEASE SAVEPOINT destri o SAVEPOINT <identificador> do contexto da transao. A menos que especifique ONLY, todos os SAVEPOINTs criados desde o SAVEPOINT <identificador> sero tambm destrudos. Exemplos de utilizao de SAVEPOINTs 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 devolve nenhuma linha rollback to y; select * from test; -- devolve duas linhas rollback; select * from test; -- devolve uma linha SAVEPOINTs internos Por padro, o Servidor estabelece um SAVEPOINT de sistema automtico para cada transao para possibilitar o seu ROLLBACK. Quando se executa um ROLLBACK, todas as alteraes efetuadas na transao so desfeitas utilizando-se este SAVEPOINT de transao, e posteriormente efetuado o COMMIT da mesma. Esta lgica permite reduzir a quantidade de garbage collection originada por transaes rolled back. Quando o volume de dados alterados a partir do SAVEPOINT de uma transao demasiado grande (10^4-10^6 registros afetados) o Servidor libera o SAVEPOINT da transao, e utiliza o mecanismo TIP para, se necessrio, executar um RollBack da transao. Se for prevista uma grande quantidade de alteraes dentro de uma transao, pode se utilizar o TPB flag isc_tpb_no_auto para desabilitar o SAVEPOINT automtico de transao. SAVEPOINTs e PSQL Implementar SAVEPOINTs definidos pelo usurio em PSQL altera as regras de atomicidade para as declaraes, incluindo as declaraes de chamadas a procedures. O Firebird disponibiliza o tratamento de excees em PSQL para reverter alteraes efetuadas em Stored Procedures e Triggers. Cada declarao SQL/PSQL executada assegurada por um SAVEPOINT interno automtico, onde ou toda a declarao executada com sucesso, ou TODAS as alteraes efetuadas por ela so rolled back e uma exceo ocorre. Cada bloco de tratamento de excees PSQL est tambm includo em um sistema automtico de SAVEPOINT.

(1.5) Locking Explicito


Nickolay Samofatov

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 16

O uso da clusula adicional WITH LOCK oferece uma capacidade limitada de lock pessimista explcito, para um uso cuidadoso e em condies em que a quantidade de linhas afetadas seja a) extremamente pequena (idealmente apenas uma) e b) controlada com preciso a partir do cdigo da aplicao. NOTA: raro que seja necessrio o uso de lock pessimista no Firebird, e esta funcionalidade deve ser bem compreendida antes que seu uso seja considerado. Sintaxe SELECT ... FROM <tabela> [WHERE ...] [FOR UPDATE [OF ...]] WITH LOCK; Se a clusula WITH LOCK for bem sucedida, ser estabelecido um lock nas linhas selecionadas que impedir que outras transaes obtenham acessos de escrita a qualquer uma delas, ou de suas dependentes, at o fim da transao. Se a clusula FOR UPDATE for utilizada, o lock ser aplicado a todas as linhas, uma a uma, to logo a linha seja transferida para o cache do servidor. Assim, possvel que um lock que tenha sido bem sucedido ao ser requerido, falhe subsequentemente, quando for feita uma tentativa de carregar uma linha sobre a qual j tenha sido obtido um lock por uma outra transao. essencial que se compreenda os efeitos do isolamento de uma transao, assim como outros dos seus atributos, antes de se implementar um mecanismo de lock explicito em uma aplicao. SELECT... WITH LOCK est disponvel em DSQL e PSQL. Pode ser bem sucedido apenas no primeiro nvel de um SELECT de uma s tabela. No est disponvel para uma sub-query, nem em joins. No pode ser utilizado com o operador DISTINCT, ou com uma clusula GROUP BY, nem com qualquer outro tipo de agregao. No pode ser utilizado a partir de uma view, nem com uma tabela externa, ou no resultado de uma stored procedure selecionvel. Compreendendo a Clausula WITH LOCK O Servidor considera cada registro contido numa declarao lock explcita, devolvendo ou a sua mais recente verso commited, qualquer que seja o estado da base de dados no momento em que a declarao foi submetida, ou uma exceo. O comportamento do Wait e a notificao de conflito de lock dependero dos parmetros da transao especificados no bloco TPB.

Modo TPB
isc_tpb_consistency

Comportamento
Locks explcitos so eliminados por locks implcitos ou explcitos da tabela e so ignorados.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 17

Modo TPB
isc_tpb_concurrency + isc_tpb_nowait

Comportamento
Se um registro modificado por alguma transao que foi committed depois que a transao, que est tentado adquirir o lock explicito, comeou, ou alguma transao ativa modificou o registro, uma exceo de conflito ocorre imediatamente. Se um registro modificado por alguma transao que foi committed depois que a transao que est tentando adquirir o lock explicito comeou, uma exceo de conflito imediatamente retornada. Se uma transao ativa mantm um lock do registro (atravs de um lock explicito ou de um lock normal de escrita), a transao, que requereu o lock explicito, aguarda pela sua resoluo e, aps o seu trmino, tenta novamente obter o lock do registro. Assim, se a transao que bloqueava o registro fizer o commit de uma verso modificada do registro, uma exceo de conflito ser recebida.

isc_tpb_concurrency + isc_tpb_wait

isc_tpb_read_committed + isc_tpb_nowait

Se uma transao ativa bloqueia o registro (atravs de um lock explicito ou de um lock normal de escrita), uma exceo de conflito ocorre imediatamente.

isc_tpb_read_committed + isc_tpb_wait

Se uma transao ativa bloqueia o registro (via um lock explicito ou por um lock normal otimista de escrita), a transao, que requereu o lock explicito, aguarda pela sua resoluo, e aps o seu trmino, tenta novamente obter o lock do registro. Nunca acontecer uma exceo de conflito neste modo de TPB.

Quando um comando UPDATE encontra um registro bloqueado por outra transao, ele ou recebe uma exceo de conflito, ou aguarda que a transao que possui o bloqueio termine, dependendo do modo TPB. O Comportamento do Servidor ser o mesmo que seria caso o registro j tivesse sido modificado pela transao que estabeleceu o bloqueio. Nenhum cdigo de erro especificado ser retornado por conflitos de lock envolvendo locks explcitos ou pessimistas. O Servidor garante que todos os registros recebidos por comando de bloqueio especfico esto efetivamente bloqueados e que efetivamente todos os parmetros da clusula where foram avaliados, desde que a condio de procura no dependa de outras tabelas, via joins, subqueries, etc. Garante ainda que as linhas que no satisfazem a condio WHERE no sero bloqueadas pela transao. Porm, no pode garantir que no existam linhas que, embora satisfaam a clusula where, j estivessem bloqueadas. Esta situao pode acontecer caso alguma outra transao em paralelo tenha executado um commit durante o curso de execuo do comando de bloqueio. O Servidor bloqueia as linhas na altura do fetch. Este mecanismo tem conseqncias importantes caso sejam bloqueadas vrias linhas de uma s vez. Muitos mtodos de acesso ao Firebird, por padro, utilizam processos de obteno de linhas atravs de pacotes de algumas centenas a cada acesso (buffered fetches). A maior parte dos componentes de acesso a dados no devolver as linhas contidas no ltimo pacote onde tenha ocorrido um erro. A declarao FOR UPDATE oferece uma tcnica que previne a utilizao de buffered fetches, e ainda a opo OF <nome-das-colunas> para ativar UPDATEs posicionais. Alternativamente, pode ser possvel configurar nos componentes de acesso o tamanho do buffer de fetch para 1. Isto permitir que uma linha efetivamente bloqueada seja processada, antes que a prxima linha seja obtida e bloqueada, ou

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 18

que um eventual erro seja devidamente tratado, sem a necessidade de se efetuar um rollback da transao. O Rollback de um SAVEPOINT implcito ou explicito libera os bloqueios de registros que tenham sido adquiridos nesse SAVEPOINT, mas no notifica outras transaes que possam estar aguardando esta liberao. As aplicaes no devem basear-se neste comportamento, pois provvel que ele seja modificado no futuro. Embora os locks explcitos possam ser utilizados para prevenir ou processar erros de conflitos pouco comuns, o volume de erros de deadlock ir aumentar a menos que se estabelea uma estratgia cuidadosa e rigorosamente controlada. A maior parte das aplicaes no deveriam precisar usar locks explcitos. Os principais objetivos dos locks explicitos so (1) evitar custosos processamentos de um grande volume de erros de conflitos de atualizao, em aplicaes de grande carga de processamento e (2) manter a integridade de objetos mapeados em uma base de dados relacional, em ambientes de clusters. Se o seu uso de locks explcitos estive fora destas duas categorias, ento a forma usada no correta para executar essa tarefa no Firebird. O lock explcito uma Funcionalidade Avanada, no a use inadequadamente ! Embora solues obtidas atravs do seu uso sejam importantes para web sites que lidam com milhares de escritas concorrentes, ou para aplicaes ERP/CRM em uso em grandes empresas, a maior parte das aplicaes no precisam operar nestas condies. Exemplos i) (simples) SELECT * FROM DOCUMENT WHERE ID=? WITH LOCK ii) (mltiplas linhas, processamento com cursor DSQL um-por-um) SELECT * FROM DOCUMENT WHERE PARENT_ID=? FOR UPDATE WITH LOCK

(1.5) Melhorias no tratamento de agregados


Arno Brinkman

Originalmente, o agrupamento era permitido apenas por colunas nomeadas. No Firebird 1.0, j era possvel o agrupamento por uma expresso UDF. Na verso 1.5, vrias extenses foram implementadas para permitir a processamento de funes agregadas na clusula GROUP BY, que permite agora o uso da posio da coluna na clusula (a posio base-1 da esquerda para a direita, como na clusula ORDER BY), ou por uma variedade de expresses. NOTA: Nem todas as expresses so permitidas dentro de uma clasula GROUP BY. Por exemplo, a concatenao no ainda permitida. Sintaxe do Group By SELECT ... FROM .... [GROUP BY lista_group_by] lista_group_by: item_group_by [,lista_group_by]; item_group_by: nome_coluna | grau (ordinal) | udf | funo_group_by;

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 19

funo_group_by : funo_valor_numrico | funo_valor_texto | expresso_case ; funo_valor_numrico funo_valor_texto ')' | KW_UPPER '(' valor ')' ; O item_group_by no pode ser uma referncia a uma funo agregada (incluindo qualquer uma que esteja localizada dentro da expresso) do mesmo contexto. HAVING A clusula HAVING apenas permite funes agregadas ou expresses vlidas que faam parte da clusula GROUP BY. Anteriormente era permitido utilizar colunas que no faziam parte da clusula GROUP BY e utilizar expresses no-vlidas. ORDER BY No contexto de um comando agregado, a clusula ORDER BY permite apenas expresses vlidas que sejam funes agregadas ou partes de expresses que estejam na clusula GROUP BY. Antigamente, era permitido usar expresses no-vlidas. Funes Agregadas em subqueries agora possvel utilizar em subqueries uma funo agregada ou expresso contida numa clusula GROUP BY. Exemplos SELECT r.RDB$RELATION_NAME, MAX(r.RDB$FIELD_POSITION), (SELECT r2.RDB$FIELD_NAME FROM RDB$RELATION_FIELDS r2 WHERE r2.RDB$RELATION_NAME = r.RDB$RELATION_NAME and r2.RDB$FIELD_POSITION = MAX(r.RDB$FIELD_POSITION)) FROM RDB$RELATION_FIELDS r GROUP BY 1 SELECT rf.RDB$RELATION_NAME AS "Relationname", (SELECT r.RDB$RELATION_ID FROM RDB$RELATIONS r WHERE r.RDB$RELATION_NAME = rf.RDB$RELATION_NAME) AS "ID", COUNT(*) AS "Fields" FROM RDB$RELATION_FIELDS rf : EXTRACT '(' parte_timestamp FROM valor ')'; : SUBSTRING '(' valor FROM posio_inteiro ')' | SUBSTRING '(' valor FROM posio_inteiro FOR inteiro

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 20

GROUP BY rf.RDB$RELATION_NAME Misturando funes agregadas de diferentes contextos As funes agregadas de diferentes contextos podem ser utilizadas dentro de uma expresso. Exemplo SELECT r.RDB$RELATION_NAME, MAX(i.RDB$STATISTICS) AS "Max1", (SELECT COUNT(*) || ' - ' || MAX(i.RDB$STATISTICS) FROM RDB$RELATION_FIELDS rf WHERE rf.RDB$RELATION_NAME = r.RDB$RELATION_NAME) AS "Max2" FROM RDB$RELATIONS r JOIN RDB$INDICES i on (i.RDB$RELATION_NAME = r.RDB$RELATION_NAME) GROUP BY r.RDB$RELATION_NAME HAVING MIN(i.RDB$STATISTICS) <> MAX(i.RDB$STATISTICS) Nota! Esta query retorna valores no FB1.0, mas eles so incorretos! Subqueries so suportadas numa Funo Agregada O uso de um singleton select (que devolve apenas uma linha) numa funo agregada agora suportado. Exemplo SELECT r.RDB$RELATION_NAME, SUM((SELECT COUNT(*) FROM RDB$RELATION_FIELDS rf WHERE rf.RDB$RELATION_NAME = r.RDB$RELATION_NAME)) FROM RDB$RELATIONS r JOIN RDB$INDICES i on (i.RDB$RELATION_NAME = r.RDB$RELATION_NAME) GROUP BY r.RDB$RELATION_NAME Funes agregadas Nested A utilizao de uma funo agregada dentro de outra funo agregada (nested) possvel se a funo agregada interna for de um contexto inferior (ver exemplo). Grau de Group By (ordinal) A utilizao do nmero do grau da coluna de retorno na clusula GROUP BY reproduz a expresso da lista do select ( semelhana da clusula ORDER BY). Isto faz com que, se o grau se refere a uma subquery, esta subquery seja executada pelo menos duas vezes.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 21

(1.5) A Clusula ORDER BY pode especificar expresses e localizao dos NULLs


Nickolay Samofatov

A clusula ORDER BY permite que se especifique qualquer expresso vlida para ordenar os resultados da Query. Se a expresso consistir de um nmero, ele ser interpretado como o grau da coluna, como previamente. A ordem dos nulos no resultado pode ser definida utilizando-se a clusula de posicionamento dos nulos. Os resultados podem ser ordenados de forma que os nulos sejam posicionados antes (NULLS FIRST) ou depois (NULLS LAST) dos valores no nulos. Quando nada especificado, a posio dos nulos NULLS LAST. Sintaxe SELECT ... FROM .... ORDER BY order_list ....; order_list : order_item [, order_list]; order_item : <expresso> [order_diretion] [nulls_placement] order_diretion : ASC | DESC; nulls_placement : NULLS FIRST | NULLS LAST; Restries Se for especificado NULLS FIRST, nenhum ndice ser utilizado na ordenao. Os resultados da ordenao de valores retornados por uma UDF ou Stored Procedure sero imprevisveis se os valores retornados no puderem ser utilizados para determinar a sequncia lgica de ordenao. O nmero de vezes que uma UDF ou Stored Procedure ser acessado indeterminado, no importando se a ordenao especificada pela expresso propriamente ou por um nmero representando a expresso na lista de colunas do SQL. Uma clusula de ordenao aplicada a uma query com union pode utilizar somente o nmero de grau (posicionamento) para se referir s colunas de ordenao. Exemplos i) SELECT * FROM MSG ORDER BY PROCESS_TIME DESC NULLS FIRST ii) SELECT FIRST 10 * FROM DOCUMENT ORDER BY STRLEN(DESCRIPTION) DESC iii) SELECT DOC_NUMBER, DOC_DATE FROM PAYORDER UNION ALL SELECT DOC_NUMBER, DOC_DATA FROM BUDGORDER ORDER BY 2 DESC NULLS LAST, 1 ASC NULLS FIRST

PSQL (Linguagem SQL para uso em Stored procedures e triggers)

(1.5) EXECUTE STATEMENT


Alex Peshkov

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 22

Extenso ao PSQL que processa uma string que contm uma declarao SQL vlida e a executa como se esta tivesse sido submetida ao DSQL. Disponvel em triggers e stored procedures. A Sintaxe pode ter trs variantes. Sintaxe 1 Executa <string> como uma declarao SQL que no devolve dados, por exemplo INSERT, UPDATE, DELETE, EXECUTE PROCEDURE ou qualquer declarao DDL exceto CREATE/DROP DATABASE. EXECUTE STATEMENT <string>; Exemplo CREATE PROCEDURE ExemploDinamico1 (Pname VARCHAR(100)) AS DECLARE VARIABLE Sql VARCHAR(1024); DECLARE VARIABLE Par INT; BEGIN SELECT MIN(SomeField) FROM SomeTable INTO :Par; Sql = EXECUTE PROCEDURE || Pname || (; Sql = Sql || CAST(Par AS VARCHAR(20)) || ); EXECUTE STATEMENT Sql; END Sintaxe 2 Executa <string> como um comando SQL, que devolve apenas uma linha. Somente SELECTs que devolvam apenas uma nica linha (singleton) podem ser utilizados com esta sintaxe. EXECUTE STATEMENT <string> INTO :var1, [, :varn] ;
Exemplo

CREATE PROCEDURE ExemploDinamico2 (TableName VARCHAR(100)) AS DECLARE VARIABLE Par INT; BEGIN EXECUTE STATEMENT SELECT MAX(CheckField) FROM || TableName INTO :Par; IF (Par > 100) THEN EXCEPTION Ex_Overflow Overflow in || TableName; END Sintaxe 3 Executa <string> como um comando SQL, devolvendo vrias linhas. Qualquer operador SELECT pode ser utilizado nesta variante. FOR EXECUTE STATEMENT <string> INTO :var1, , :varn DO <declarao composta>; Exemplo CREATE PROCEDURE DynamicSampleThree ( TextField VARCHAR(100), TableName VARCHAR(100)) RETURNING_VALUES (Line VARCHAR(32000)) AS

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 23

DECLARE VARIABLE OneLine VARCHAR(100); BEGIN Line = ; FOR EXECUTE STATEMENT SELECT || TextField || FROM || TableName INTO :OneLine DO IF (OneLine IS NOT NULL) THEN Line = Line || OneLine || ; SUSPEND; END Notas adicionais ao uso de EXECUTE STATEMENT A string DSQL do EXECUTE STATEMENT no pode conter nenhum parmetro em qualquer uma das suas formas de sintaxe. Todas as substituies de variveis para o seu formato fixo devem ser efetuadas antes de se processar a declarao EXECUTE STATEMENT. Esta funcionalidade deve ser utilizada com cautela, e aps um exame cuidadoso de todos os fatores. Deve se observar como regra a utilizao de um EXECUTE STATEMENT apenas quando outros mtodos no so possveis, ou quando a performance do EXECUTE STATMENT for a mais aceitvel. A declarao EXECUTE STATEMENT potencialmente insegura nas seguintes condies: 1. No existe forma de verificar a sintaxe correta da declarao contida na string. 2. No so feitas verificaes de dependncia que possam garantir que tabela ou colunas requeridas no tenham sido destrudas. 3. As operaes sero mais lentas porque o comando contido ter que ser preparado a cada execuo. 4. Os valores devolvidos so verificados e restritos para cada tipo de dado, para evitar resultados imprevisveis de converso. Por exemplo, a string 1234 seria convertida para um inteiro, 1234, mas abc geraria um erro de converso. 5. Se a Stored Procedure tiver privilgios especiais sobre alguns objetos, a declarao dinmica submetida na string do EXECUTE STATEMENT no os herdar. Os privilgios sero restritos aos atribudos ao usurio que executar a Stored Procedure.

(1.5) Novas variveis de contexto


Dmitry Yemanov

CURRENT_CONNECTION
e

CURRENT_TRANSACTION
Cada uma destas novas variveis de contexto devolve um identificador de sistema da conexo ativa e da transao corrente, respectivamente. O tipo devolvido INTEGER. Disponvel em PSQL e DSQL. Como estes valores so armazenados no cabealho do banco de dados, os seus valores sero zerados a cada RESTORE da base de dados. Sintaxe CURRENT_CONNECTION CURRENT_TRANSACTION

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 24

Exemplos

SELECT CURRENT_CONNECTION FROM RDB$DATABASE; NEW.TXN_ID = CURRENT_TRANSACTION; EXECUTE PROCEDURE P_LOGIN(CURRENT_CONNECTION);

ROW_COUNT
Retorna um inteiro, com o nmero de linhas afetadas pela ltima declarao DML. Disponvel em PSQL, no contexto de uma trigger ou stored procedure. Na implementao atual, retorna zero para uma declarao SELECT. Sintaxe ROW_COUNT Exemplo UPDATE TABLE1 SET FIELD1 = 0 WHERE ID = :ID; IF (ROW_COUNT = 0) THEN INSERT INTO TABLE1 (ID, FIELD1) VALUES (:ID, 0); Nota: esta funcionalidade no pode ser utilizada para verificar a quantidade de linhas afetadas por uma declarao EXECUTE STATEMENT.

SQLCODE e GDSCODE
Cada varivel de contexto devolve um nmero inteiro que corresponde ao cdigo de erro da exceo ativa. Disponvel em PSQL, dentro do contexto de um bloco de tratamento de exceo. Fora do bloco, ambas retornam zero. A varivel GDSCODE devolve uma representao numrica do cdigo de erro GDS (ISC), ie, 335544349L ir devolver 335544349. Um bloco de exceo 'WHEN SQLCODE' ou WHEN ANY ir receber um valor diferente de zero para a varivel SQLCODE e devolver zero para GDSCODE. Apenas um bloco WHEN GDSCODE ir receber um valor diferente de zero para a varivel GDSCODE (e devolver zero em SQLCODE). Se uma exceo criada pelo usurio ocorrer, ambas as variveis SQLCODE e GDSCODE tero valor zero, independentemente do tipo de bloco de exceo. Sintaxe SQLCODE GDSCODE
Exemplo

BEGIN ... WHEN SQLCODE -802 THEN EXCEPTION E_EXCEPTION_1; WHEN SQLCODE -803 THEN

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 25

EXCEPTION E_EXCEPTION_2; WHEN ANY DO EXECUTE PROCEDURE P_ANY_EXCEPTION(SQLCODE); END Veja ainda Melhorias no tratamento de excees, mais a frente, e o README.exception_handling no firebird2/doc/sql.extensions da rvore CVS do Firebird. documento

INSERTING UPDATING DELETING


Estas trs expresses pseudo booleanas podem ser utilizadas para testar ou determinar qual a operao de DML que est ocorrendo. Disponvel em PSQL, apenas em triggers. Projetadas para uso no contexto de triggers universais (ver METADATA mais adiante). Sintaxe INSERTING UPDATING DELETING Exemplo IF (INSERTING OR DELETING) THEN NEW.ID = GEN_ID(G_GENERATOR_1, 1);

(1.5) Melhorias no Tratamento de Excepes em PSQL


Dmitry Yemanov

A Sintaxe comum para uma declarao EXCEPTION em PSQL : EXCEPTION {[nome] | [valor]}; As melhorias na verso 1.5 permitem: 1) Definir uma mensagem para uma exceo em tempo de execuo. 2) Provocar novamente (re-raise) uma exceo dentro do contexto do bloco da exceo. 3) Obter um erro numrico da exceo tratada. 1) Mensagens de Exceo em Run-time Sintaxe EXCEPTION <nome_exceo> <valor_mensagem>; Exemplos i) EXCEPTION E_EXCEPTION_1 'Erro!'; ii)

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 26

EXCEPTION E_EXCEPTION_2 'Tipo errado para o registro com o ID=' || new.ID; 2) Disparando novamente uma exceo Nota no tem qualquer efeito fora de um bloco de exceo. Sintaxe EXCEPTION; Exemplos i) BEGIN ... WHEN SQLCODE -802 THEN EXCEPTION E_ARITH_EXCEPT; WHEN SQLCODE -802 THEN EXCEPTION E_KEY_VIOLATION; WHEN ANY THEN EXCEPTION; END ii) WHEN ANY DO BEGIN INSERT INTO ERROR_LOG (...) VALUES (SQLCODE, ...); EXCEPTION; END 3) Cdigos de Erro em Tempo de Execuo Ver SQLCODE / GDSCODE (acima).

(1.5) Declaraes LEAVE | BREAK


Interrompe o processamento de um loop, transferindo o processamento para a declarao aps o END que delimita o loop. Disponvel apenas para estruturas WHILE, FOR SELECT e FOR EXECUTE; qualquer outro uso gerar um erro de compilao. O uso da clusula SQL-99 LEAVE dever ter preferncia sobre o BREAK existente. Disponvel tanto em triggers como em stored procedures. Sintaxe BEGIN <declaraes>; IF (<condies>) THEN LEAVE; <declaraes>; END NOTA: LEAVE | BREAK e EXIT podem agora ser utilizados em triggers

Declaraes vlidas de PLAN podem ser includas em Triggers


Ignacio J. Ortega

At o momento, um trigger que contivesse uma declarao PLAN seria rejeitado pelo compilador. Agora, uma declarao vlida de PLAN pode ser includa e utilizada.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 27

(1.5) Blocos BEGIN..END vazios


Dmitry Yemanov

Blocos BEGIN..END vazios so agora aceitos em mdulos PSQL. Por exemplo, pode-se agora escrever mdulos stub como: CREATE TRIGGER BI_ATABLE FOR ATABLE ATIVE BEFORE INSERT POSITION 0 AS BEGIN END ^

(1.5) Declarar e definir variveis locais numa nica declarao


Claudio Valderrama

Simplificao da sintaxe para permitir que variveis locais possam ser declaradas e inicializadas em uma nica declarao. Sintaxe DECLARE [VARIABLE] nome <tipo_varivel> [{'=' | DEFAULT} valor]; Exemplo DECLARE my_var INTEGER = 123;

(1.0) SELECT [FIRST (<expr. inteira M>)] [SKIP (<expr.inteira N>)] (1.5) SELECT FIRST pode agora ter zero como argumento
O FB 1.5 aceita zero como argumento de FIRST. O resultado ser uma tabela vazia. Retorna as primeiras M linhas do resultado da seleo. A clusula opcional SKIP faz com que as primeiras N linhas sejam ignoradas, retornando um conjunto de M linhas, a partir da linha N + 1. Na forma mais simples, m e n so inteiros mas qualquer expresso Firebird cujo resultado seja um inteiro pode ser utilizada. Um identificador que represente um valor inteiro pode ser usado no em GDML, mas no em SQL ou DSQL. O parntesis obrigatrio para os argumentos das expresses e opcional nos outros casos. Podem tambm ter sua definio varivel, por exemplo, SKIP ? * FROM ATABLE retornar todos os registros aps descartar as n linhas iniciais, onde n ser definido atravs da varivel "?". SELECT FIRST ? COLUMNA, COLUMNB FROM ATABLE retornar primeiras n linhas e descartar as demais. A clusula FIRST tambm opcional, ou seja, possvel incluir SKIP numa declarao sem FIRST para obter um conjunto de dados que exclua as linhas indicadas pelo SKIP. Disponvel em SQL e DSQL exceto quando indicado o contrrio. Exemplos:
SELECT SKIP (5+3*5) * FROM MYTABLE;

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 28

SELECT FIRST (4-2) SKIP ? * FROM MYTABLE; SELECT FIRST 5 DISTINCT FIELD FROM MYTABLE;

Dois problemas com SELECT FIRST 1. O comando abaixo: delete from TAB1 where PK1 in (select first 10 PK1 from TAB1); apagar todos os registros da tabela. Nossa! O sub-select marca as primeiras 10 linhas para eliminao, apaga-as, marca as prximas 10, apaga-as, e assim sucessivamente at que no existam mais linhas disponveis na tabela. Cuidado! 2. Queries como esta:
... WHERE F1 IN ( SELECT FIRST 5 F2 FROM TABLE2 ORDER BY 1 DESC )

no funcionam como esperado, por causa da otimizao processada atualmente pelo servidor que trata os predicados correlacionados WHERE...IN (SELECT...) em predicados correlacionados EXISTS. bvio que neste contexto FIRST N no faz qualquer sentido:
WHERE EXISTS ( SELECT FIRST 5 TABLE2.F2 FROM TABLE2 WHERE TABLE2.F2 = TABLE1.F1 ORDER BY 1 DESC )

Melhorias no Set de Caracteres


Adicionadas na verso 1.5
! ! !

Adicionada a collation WIN1251_UA (para as linguagens russa e ucraniana) ao set de caracteres WIN1251. Corrigido o valor padro para Mai/Minsculas do WIN1251 Adicionada a ISO_HUN (para a linguagem Hngara) ao set de caracteres ISO8859_2.

Novos sets de caracteres (no non-binary collations) adicionados


Blas Rodriguez Somoza
! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !

DOS737 PC Greek DOS775 PC Baltic DOS858 Variante do Cp850 com o caracter do Euro () DOS862 PC Hebrew DOS864 PC Arabic DOS866 MS-DOS Russian DOS869 IBM Modern Greek WIN1255 Windows Hebrew WIN1256 Windows Arabic WIN1257 Windows Baltic ISO8859_3 Latin 3 (Esperanto, Maltese, Pinyi, Sami, Croatian e outras) ISO8859_4 Latin 4 (Baltic, Greenlandic, Lappish) ISO8859_5 Cyrillic ISO8859_6 Arabic ISO8859_7 Greek ISO8859_8 Hebrew

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 29

! !

ISO8859_9 Turkish ISO8859_13 Baltic

Adicionadas na verso 1.0


!

Foi adicionado o collation set Hngaro, sem diferenciao de maisculas, desenvolvido e testado por Sandor Szollosi (ssani@freemail.hu). Nesta verso o Firebird suporta o set de caracteres ISO8859-2 (para a linguagem tcheca)

EXTENSES DE LINGUAGEM TRANSPORTADAS DO FIREBIRD 1.0.x


As seguintes extenses de linguagem, introduzidas no Firebird 1.0.x, so reproduzidas aqui, para sua convenincia.

(1.0) CURRENT_USER e CURRENT_ROLE


Estas duas novas variveis de contexto foram adicionadas para permitir referenciar o USER e (se implementado1) o ROLE do contexto da presente conexo.
CREATE GENERATOR GEN_USER_LOG; CREATE DOMAIN INT_64 AS NUMERIC(18,0); COMMIT; CREATE TABLE USER_LOG( LOG_ID INT_64 PRIMARY KEY NOT NULL, OP_TIMESTAMP TIMESTAMP, LOG_TABLE VARCHAR(31), LOG_TABLE_ID INT_64, LOG_OP CHAR(1), LOG_USER VARCHAR(8), LOG_ROLE VARCHAR(31)); COMMIT; CREATE TRIGGER ATABLE_AI FOR ATABLE ATIVE AFTER INSERT POSITION O AS BEGIN INSERT INTO USER_LOG VALUES( GEN_ID(GEN_USER_LOG, 1), CURRENT_TIMESTAMP, 'ATABLE', NEW.ID, 'I', CURRENT_USER, CURRENT_ROLE); END

CURRENT_USER um sinnimo DSQL de USER que aparece no SQL standard. Eles so idnticos. No existe qualquer vantagem de CURRENT_USER sobre USER.
1

Se voc ainda estiver usando um banco de dados InterBase v.4.x ou 5.1 com o Firebird, ROLE no ser suportado, assim o CURRENT_ROLE ser NONE (como definido pelo standard SQL na ausncia de um ROLE declarado) mesmo que o usurio informe ROLE vlido. Bancos com verso IB 5.5, IB 6 ou Firebird, tem o ROLE informado e verificado. Caso o ROLE no exista, ele passar a ser tratado como NONE sem que qualquer erro ocorra. Isto significa que no FB jamais devolver um ROLE invlido como CURRENT_ROLE, porque o valor retornado ser NONE. Este comportamento contrasta com o IB, onde o valor invlido aceito internamente, embora no de forma visvel para o SQL.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 30

(1.0) DROP GENERATOR


Permite que GENERATORs no utilizados sejam removidos da base de dados. O armazenamento ser liberado para reutilizao no prximo RESTORE. Acessvel em SQL e DSQL.
DROP GENERATOR <nome generator>;

(1.0) GROUP BY UDF


Agora possvel agregar um SELECT por grupo pelo resultado de uma UDF. Por exemplo.
select strlen(rtrim(rdb$relation_name)), count(*) from rdb$relations group by strlen(rtrim(rdb$relation_name)) order by 2

Um efeito colateral das alteraes para permitir o agrupamento por UDFs : Previamente no era permitida a utilizao de funes internas do Firebird em uma clusula GROUP BY. Agora isto possvel atravs da criao de uma estrutura similar a uma UDF :
select count(*) from rdb$relations r group by bin_or((select count(rdb$field_name) from rdb$relation_fields f where f.rdb$relation_name = r.rdb$relation_name),1)

(1.0) RECREATE PROCEDURE


Esta nova declarao DDL permite criar uma Stored Procedure com o mesmo nome de uma j existente, substituindo-a, sem que seja necessrio fazer antes um DROP da mesma. A sintaxe idntica a CREATE PROCEDURE. Disponvel em SQL e DSQL.

(1.0) RECREATE TABLE


Esta nova declarao DDL permite criar uma nova estrutura para uma tabela j existente, sem necessidade de que se faa antes um DROP da tabela antiga. A sintaxe idntica a CREATE TABLE. Note que RECREATE TABLE no preserva os dados existentes da tabela antiga. Disponvel em SQL e DSQL.

(1.0) SUBSTRING ( <express alfanumrica> FROM <pos> [FOR <tam>])


Funo interna que implementa a funo ANSI SQL SUBSTRING(). Ir devolver uma varivel contendo o byte da posio <pos> e todos os bytes subsequentes at ao final da expresso. Se a opo FOR <tam> estiver especificada, a extenso ser a menor destes dois valores: o tamanho <tam> especificado, ou o nmero de bytes at o final da expresso. O primeiro argumento poder ser uma expresso qualquer, constante ou identificador, que possa ser tratado como alfanumrico.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 31

<pos> deve resultar em um inteiro. <pos> tem ndice inicial 1, como outras declaraes SQL. Nem <pos> nem <tam> podem ser parmetros de Querys. Como <pos> e <tam> so posies de byte, o identificador pode ser um blob binrio, ou um blob sub_type 1 tipo texto, desde que o set de caracteres definido utilize um byte por caractere. A funo no trata, no momento, blobs de texto com sets de caracteres Chineses (2 byte/caractere) ou Unicode (3 bytes/caractere no mximo). Para um argumento do tipo alfanumrico (ao contrrio de um blob), a funo suporta qualquer set de caracteres. Disponvel em SQL e DSQL.
UPDATE ATABLE SET COLUMNB = SUBSTRING(COLUMNB FROM 4 FOR 99) WHERE ...

Consulte tambm a seo de Funes Externas (UDFs) e seguinte, para detalhes de alteraes e adies biblioteca de UDF padro.

(1.5) Aperfeioamento do Marcador de Comentrio de uma Linha


Dmitry Yemanov

Os comentrios de uma linha podem ser utilizados em qualquer posio, no apenas no incio da linha. Assim, na verso 1.5, o marcador "--" pode ser utilizado para comentar a linha no final de uma declarao num script, stored procedure, trigger ou declarao DSQL. Assim, pode ser utilizado para comentar partes no desejadas de uma declarao. Todos os caracteres a partir do marcador at o fim da linha (CR ou LF) sero ignorados.
... WHERE COL1 = 9 OR COL2 = 99 -- OR COL3 = 999

(1.0) Novo marcador de Comentrios


Claudio Valderrama

Para uso em scripts, DSQL, stored procedures e triggers. Exemplo


-- Este um comentrio

Este novo marcador pode ser utilizado para comentar uma simples linha de cdigo num script, numa declarao DDL/DML, stored procedure ou trigger. A lgica para ignorar caracteres a seguinte: 1. Ignorar os caracteres -- se este par de caracteres for o primeiro depois de um indicador de Fim de Linha (LF em Linux/Unix, CRLF em Windows) 2. Continuar a ignorar os caracteres at o prximo indicador de fim-de-linha (EOL) Esta lgica no prevista para ser aplicada juntamente com blocos de comentrio lgico ( /* um comentrio */ ). Em outras palavras, no use os marcadores -- dentro de um bloco de comentrio, e no utilize marcadores de bloco em uma linha que contenha marcadores --.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 32

SESSES ISQL INTERATIVAS: Tenha em mente o seguinte quando trabalhar numa sesso ISQL interativa : O ISQL aceita particionar uma declarao em segmentos contnuos, mostrando a mensagem CON> at que seja recebido o caractere de terminao (normalmente ;). Se for digitado -- no incio de uma linha de continuao, a lgica de ignorar ser mantida at encontrar a marcao de fim-de-linha (EOL) na tela ou arquivo de sada se pressionado ENTER. Uma fonte potencial de erros contar que a linha seguinte tambm ser ignorada. O problema com o ISQL acontece porque ele tem seus comandos especficos que precisam ser tratados apenas pelo prprio ISQL. Se eles no forem identificados devido a uma colocao incorreta de "--", ento sero encaminhados ao servidor. Obviamente, o servidor no entender os comandos do ISQL SET e SHOW e portanto eles sero rejeitados.

(1.0) Alter Trigger no mais incrementa o Contador de Alteraes na Tabela


Quando o contador das alteraes de meta dados de uma tabela qualquer atinge o valor mximo de 255, a base de dados fica indisponvel. Uma operao de Backup/Restore necessria para zerar o contador e para disponibilizar novamente a base de dados. A inteno desta funcionalidade forar limpezas da base de dados sempre que a sua estrutura tiver sofrido muitas alteraes, e no para inibir o uso de recursos do servidor. Anteriormente, cada vez que um trigger fosse definido como ATIVE/INATIVE atravs de uma operao ALTER TRIGGER, o contador de alteraes da tabela associada era incrementado. Assim, a o uso da ativao e desativao de triggers como recurso normal de operao era afetado, porque este uso faria o contador crescer rapidamente.

Novas Palavras Reservadas


As seguintes palavras do Firebird devem ser adicionadas lista de Palavras Reservadas publicadas para o Interbase 6.0.1. BIGINT (1.5) CURRENT_ROLE RECREATE SAVEPOINT CASE (1.5) CURRENT_TRANSACTION (1.5) ROW_COUNT (1.5) CURRENT_CONNECTION (1.5) CURRENT_USER RELEASE

As seguintes palavras esto reservadas para o futuro: ABS CHAR_LENGTH LEADING TRAILING BOOLEAN CHARACTER_LENGTH OCTET_LENGTH TRUE BOTH FALSE TRIM UNKNOWN

As seguintes palavras estavam reservadas no Firebird 1.0, mas j no o so no Firebird 1.5: BREAK IIF DESCRIPTOR SKIP FIRST SUBSTRING

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 33

As seguintes palavras no-reservadas so reconhecidas pelo Firebird 1.5, se utilizadas nos seus respectivos contextos estruturais: COALESCE LAST NULLIF UPDATING DELETING LEAVE NULLS USING INSERTING LOCK STATEMENT

Estas palavras novas no InterBase 6.5 e 7 (no reservadas no Firebird) devem tambm ser tratadas como reservadas, para manter a compatibilidade: BOOLEAN PERCENT TEMPORARY FALSE PRESERVE TIES GLOBAL ROWS TRUE

Funcionalidades no ISQL Capacidade de readline na shell do isql


Mark O'Donohue

Suporte ao histrico de comandos (como o readline do Unix) foi adicionado a interface do ISQL. Agora, as teclas Acima e Abaixo podem ser usadas para navegar pelos comandos j submetidos na sesso ISQL.

Funes Definidas pelo Usurio (UDFs) No ib_udf


rpad (instring, tam, car)
Juan Guerrero

Preenche a string fornecida, atravs da adio do caractere padchar at a string resultante ter o tamanho tam. A string de entrada poder ter no mximo 32766 bytes. Tam no poder exceder 32765 bytes. Declarao DECLARE EXTERNAL FUNCTION rpad CSTRING(80), INTEGER, CSTRING(1) RETURNS CSTRING(80) FREE_IT ENTRY_POINT 'IB_UDF_rpad' MODULE_NAME 'ib_udf'; lpad (instring, tam, car)
Juan Guerrero

Preenche a string fornecida, atravs da aposio do caractere car at a string resultante ter o tamanho tam. A string de entrada poder ter no mximo 32766 bytes. Tam no poder exceder 32765 bytes. Declarao DECLARE EXTERNAL FUNCTION lpad CSTRING(80), INTEGER, CSTRING(1)

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 34

RETURNS CSTRING(80) FREE_IT ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf'; log (x, y)


Paul Vinkenoog

Esta funo possua um erro muito antigo, em que os argumentos x e y estavam invertidos. Deveria devolver o logaritmo base x de y, mas de fato devolvia o log base y de x. Foi corrigido. Se a funo era utilizada previamente nas suas aplicaes, VERIFIQUE O SEU CDIGO! Ou os resultados obtidos eram incorretos, ou os valores estavam deliberadamente trocados para que fossem obtidos os resultados corretos.

Em f b _ u d f
1. As funes *NVL e *NULLIF foram mantidas para manter compatibilidade com verses anteriores, mas esto obsoletas em razo da introduo das novas funes internas CASE, COALESCE e NULLIF. 2. Note que a fbudf no consegue processar campos string com um tamanho maior do que 32Kb - 1 bytes. Esta limitao poder causar efeitos colaterais quando strings so concatenados antes de serem passadas como argumentos as UDFs. Se a soma dos campos ultrapassar o limite, o comportamento ser indefinido. A funo poder devolver resultados sem sentido ou o cdigo do fbudf poder executar uma operao ilegal. 3. Em um Banco de Dados portado que tenha sido criado com o Firebird 1.0.x, e em que tenham sido declaradas as funes fbudf truncate e round, estas declaraes no sero funcionais para o Firebird 1.5 porque as posies de entrada foram alteradas. Ser preciso fazer um DROP das funes e uma nova declarao das mesmas a partir do fbudf.sql script do diretrio de UDF da verso 1.5.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 35

Novo Arquivo de Configurao firebird.conf

O Diretrio Raiz do Firebird


O diretrio raiz de instalao do Firebird utilizado de diversas formas, durante a instalao, e tambm como atributo para rotinas do servidor, parmetros de configurao e de clientes. Como existem vrias formas de indicar ao servidor onde encontrar o valor para este atributo, programadores e administradores de sistema devem conhecer a lgica de precedncia que o servidor observa na partida, para a determin-lo corretamente. Win32 Superserver e Classic (tanto o servidor como o cliente): 1) Varivel de ambiente FIREBIRD 2) Parmetro RootDiretory no firebird.conf 3) Registro: HKLM\SOFTWARE\ SOFTWARE\Firebird Projet\Firebird Server\Instances\DefaultInstance verificando a chave RootDiretory. 4) O diretrio um nvel acima ao do executvel do servidor. Win32 Embedded (Servidor Embutido): 1) Varivel de ambiente FIREBIRD 2) Parmetro RootDiretory no firebird.conf 3) O diretrio onde fbembed.dll (renomeado fbclient.dll) est localizado. Linux Classic: 1) Varivel de ambiente FIREBIRD 2) Parmetro RootDiretory no firebird.conf 3) Caminho padro de instalao (/opt/firebird) Linux Superserver: 1) Varivel de ambiente FIREBIRD 2) Parmetro RootDiretory no firebird.conf 3) O diretrio localizado um nvel acima ao do executvel do servidor. (obtido via symlink "/proc/self/exe", quando suportado) 4) Caminho padro da instalao /opt/firebird)

Parmetros
Quase todos os Parmetros possuem valores padres. Nomes de parmetros e seus valores diferenciam maisculas no Linux, mas no em Windows. Para alterar o valor padro de um parmetro para elimine o marcador de comentrio (#) e altere o valor. O arquivo de configurao pode ser alterado com o servidor em execuo, mas para efetivar as alteraes necessrio parar e reiniciar o servio. As configuraes seguem o formato: Nome_parmetro valor Nome_parmetro um alfanumrico que no contm espaos em branco e que nomeia uma propriedade de configurao do servidor.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 36

valor um nmero, um Booleano (1=Verdadeiro, 0=Falso) ou um alfanumrico que define o valor do parmetro.

Parmetros do Sistema de Arquivos RootDiretory


Uma string, caminho absoluto do diretrio raiz no sistema de arquivos local. Deve permanecer comentada, a menos que se deseje forar o procedimento de partida a utilizar um diretrio de instalao do servidor Firebird, diferente daquele que seria automaticamente detectado.

DatabaseAccess
Suporta a nova funcionalidade de Alias. Em verses anteriores, o servidor podia conectar-se a qualquer base de dados no seu sistema de arquivos local, e era acionado pelos clientes que informavam o caminho absoluto para o arquivo da base de dados. Este parmetro permite restringir o acesso aos bancos apenas atravs do seu Alias, ou a bases de dados localizadas em determinados pontos da rvore de diretrios do sistema de arquivos. DatabaseAccess pode ser None, Restrict ou Full. Full (o valor padro) permite o acesso a arquivos de bases de dados qualquer parte do sistema de arquivos local. None restringe o acesso a bases de dados que se encontrem definidas em aliases.conf. Restrict permite configurar os grupos de diretrios que contero arquivos de bancos de dados acessveis pelo servidor. Pode-se definir um ou mais diretrios, separados por ponto e vrgula, para definir um ou mais locais permitidos. Por exemplo, Unix: /db/databases;/userdir/data Windows: D:\data Caminhos relativos so tratados como pertencentes ao caminho que o servidor estabeleceu como sendo o seu diretrio raiz. Por exemplo, no Windows, se o raiz do Firebird o diretrio C:\Programas\Firebird, ento o valor abaixo ir restringir acesso do servidor somente aos arquivos que estejam localizados em C:\Programas\Firebird\userdata: DatabaseAccess = Restrict userdata NOTA Shadowing de Banco de Dados a implementao atual de DatabaseAccess tem uma falha que torna obrigatrio o uso da configurao Restrict caso o shadowing esteja ativado para qualquer banco no Servidor.

ExternalFileAccess
Era external_file_diretory em isc_config/ibconfig mas a sintaxe foi alterada. Prov trs nveis de segurana concernentes a EXTERNAL FILES (arquivos texto com formato fixo que so acessados como tabelas da base de dados). O valor uma string a qual se pode atribuir None, Full ou Restrict. None (o valor padro) desativa o uso de arquivos externos no servidor; Restrict permite restringir a localizao dos arquivos externos a diretrios especficos. Indique um ou mais diretrios separados por ponto e vrgula, onde os arquivos externos devero estar localizados. Por exemplo: Unix: /db/extern;/mnt/extern Windows: C:\ExternalTables

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 37

Caminhos relativos so tratados como relativos ao caminho que o servidor reconhece como sendo o seu diretrio raiz de instalao. Por exemplo, no Windows, se o caminho reconhecido for o diretrio C:\Programas\Firebird, ento o valor abaixo ir restringir o acesso do servidor somente a arquivos externos que estejam localizados em C:\Programas\Firebird\userdata\ExternalTables: ExternalFileAccess = Restrict userdata\ExternalTables Full permite que os arquivos externos sejam acessados em qualquer diretrio do sistema. Veja a recomendao de Cuidado aps o prximo parmetro de configurao, UdfAccess.

UdfAccess
Era external_function_diretory em isc_config/ibconfig mas a sintaxe foi alterada. Foi mudado no s o nome do parmetro, mas tambm a forma como os valores so definidos. O propsito das alteraes foi ativar opcionalmente nveis de proteo para mdulos de biblioteca externa definidas pelo usurio, um conhecido alvo de ataques maliciosos. UdfAccess pode ser None, Restrict ou Full. Restrict (o valor padro) mantm a funcionalidade que era disponibilizada pelo parmetro external_function_diretory no Firebird 1.0, para restringir a localizao das bibliotecas externas a locais especficos do sistema de arquivos. Fornea um ou mais diretrios, separados por ponto-evrgula, para armazenagem das bibliotecas de UDF, Filtros BLOB e definies de set de caracteres. Por exemplo,: Unix: /db/extern;/mnt/extern Windows: C:\ExternalModules Caminhos relativos so tratados como relativos ao caminho que o servidor reconheceu como sendo o diretrio de raiz de instalao do Firebird. Assim, no Windows, se o diretrio raiz do Firebird for C:\Programas\Firebird\userdata, o valor abaixo restringir o acesso do servidor a arquivos externos localizados em C:\Programas\Firebird\ExternalModules: ExternalFileAccess = Restrict userdata\ExternalModules None desabilita o uso de bibliotecas externas. Full permite que as bibliotecas externas em qualquer local do sistema possam ser acessadas. Cuidado :: Evite definio de diretrios particularizados para UdfAccess e ExternalFileAccess que provoque o compartilhamento de uma mesma rvore de diretrios. Os valores padres so seguros. Caso esteja configurando caminhos prprios, e no tome o cuidado de estabelecer locais separados para os dois tipos de arquivos, voc deixar o servidor vulnervel execuo de cdigo no autorizado. Um exemplo do que deve ser evitado:
UdfAccess = UDF; /bad_dir ExternalFileAccess = /external; /bad_dir/files

UdfAccess e ExternalFileAccess tero uma parte da rvore em comum, /bad_dir/files, onde um usurio poderia criar um arquivo externo /bad_dir/files/hackudf.so com cdigo prprio, e executlo neste sistema comprometido.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 38

Parmetros dos Recursos CpuAffinityMask


Era cpu_affinity em isc_config/ibconfig Na verso SuperServer do Firebird em Windows, e em mquinas SMP, existe uma falha que faz com que o sistema operacional transfira constante todo o processamento entre os processadores existentes. Isto acaba com a performance. Este parmetro pode ser utilizado em sistemas SMP em Windows para estabelecer uma afinidade do Firebird com um nico processador. NOTA O Firebird SuperServer, at e incluindo a verso 1.5, podem no suportar o recurso de HyperThreading no Windows em algumas placas mes mais recentes. Para evitar problemas de balanceamento, pode ser necessrio desabilitar o HyperThreading no Bios do Sistema.

CpuAffinityMask um inteiro, a mscara da CPU. Exemplo CpuAffinityMask = 1 Usa apenas a primeira CPU (CPU 0). CpuAffinityMask = 2 usa apenas a segunda CPU (CPU 1). CpuAffinityMask = 3 Usa a primeira e segunda CPU. Calculando o valor da mscara da afinidade Voc pode usar esta sinalizao para definir a afinidade do Firebird com qualquer processador ou combinao de processadores (no servidor Classic) instalado no sistema. Considere as CPUs como uma matriz numerada de 0 a n-1, onde n o nmero total de processadores instalados e i o nmero da matriz de uma CPU. M outra matriz contendo a o valor da mscara de cada CPU selecionada. O valor de A a soma dos valores de M. Use a frmula seguinte para estabelecer M e obter o valor da mscara A: Mi = 2I A = M1 + M2 + M3. . . Por exemplo, para selecionar o primeiro e quarto processador (processador 0 e processador 3) calcule da seguinte forma: A = 20 + 23 = 1 + 8 = 9

DeadlockTimeout
Era deadlock_timeout em isc_config/ibconfig Intervalo em segundos (inteiro) que o gerenciador de bloqueio aguardar se um conflito ocorrer, antes de eliminar os bloqueios de processos mortos e efetuar um novo ciclo de verificao de deadlock. Normalmente, deadlocks so detectados instantaneamente. Este intervalo s ocorrer quando algum erro o provocar.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 39

O valor padro de 10 segundos adequado para quase todas as condies. Diminuir este valor no vai necessariamente reduzir o tempo em que um deadlock devolve uma exceo de conflito. Se for baixo demais, o efeito pode ser verificaes extras desnecessrias e que podem degradar o desempenho do sistema.

DefaultDbCachePages
Era database_cache_pages em isc_config/ibconfig Nmero de pgina de dados alocadas em memria pelo servidor, por banco de dados. O valor configurado pode ser estabelecido para cada base de dados. O valor padro para o SuperServer de 2048 pginas. Para o Classic 75. As verses SuperServer e Classic utilizam a memria de formas diferentes. No SS a memria compartilhada por todas as conexes, enquanto a Classic aloca a memria definida estaticamente para cada conexo.

EventMemSize
Inteiro, representa o nmero de bytes de memria reservado para o gerenciador de Eventos. O valor padro 65536 (64 Kb).

LockAcquireSpins
Era lock_acquire_spins Relevante apenas para ambientes SMP executando servidor Classic. Num servidor Classic, apenas um processo cliente pode acessar a tabela de locks num determinado momento. Um mutex controla este acesso. Os processos clientes podem requerer o mutex condicionalmente ou incondicionalmente. Se for condicional, a requisio poder falhar e dever ser repetida. Caso seja incondicional, a requisio aguardar at ser atendida. O parmetro LockAcquireSpins estabelece o nmero de tentativas que sero efetuadas se o mutex for condicional. Inteiro. O padro 0 (incondicional). No existe qualquer recomendao de valor mnimo e mximo.

LockHashSlots
Era lock_hash_slots em isc_config/ibconfig Utilize este parmetro para ajustar a lista de lock hash. Sob grande carga, a taxa de transferncia pode ser aumentada ampliando-se o nmero de hash slots para distribuir a lista em cadeias menores de hash. Um nmero primo recomendado. O valor padro 101.

LockGrantOrder
Era lock_grant_order em isc_config/ibconfig Quando uma conexo deseja obter o lock ou bloqueio de um objeto, obtm um bloco de requisio de lock que especifica o objeto e o nvel de lock requerido. Os blocos de requisio so conectados a aos blocos de locks como requisies j atendidas, ou como requisies ainda pendentes. O parmetro LockGrantOrder um Booleano. O padro (1=True) indica que as requisies de lock devem ser atendidas no modelo primeiro a chegar primeiro a ser servido. A configurao falsa (0), emula o comportamento do InterBase v3.3, que concedia o lock to logo ele ficasse disponvel. Este modo pode resultar em requisies no atendidas por um longo tempo.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 40

LockMemSize
Este inteiro representa a quantidade bytes na memria alocados para o gerenciador de locks. Para um servidor Classic, LockMemSize indica o valor inicial alocado que poder crescer dinamicamente at esgotar toda a memria ("Lock manager is out of room"). Se houver muitas conexes ou caches de pginas muito grandes, aumente este valor, para evitar estes erros. No SuperServer, a memria alocada pelo gerenciador no aumenta dinamicamente. O valor padro no Linux e Solaris de 98.304 bytes (96 Kb). No Windows, de 262144 (256 Kb).

LockSemCount
Parmetro inteiro que especifica o nmero de semforos disponveis para comunicao entre processos (IPC). O valor padro 32. Use este parmetro em ambientes que no utilizem processos paralelos para aumentar ou reduzir o nmero de semforos disponveis.

SortMemBlockSize
Este parmetro permite configurar, em bytes, o tamanho de cada bloco de memria utilizado pelas rotinas de ordenao em memria. O valor padro de 1Mb, mas pode ser definido para qualquer valor at o mximo estabelecido pelo parmetro SortMemUpperLimit (a seguir).

SortMemUpperLimit
Quantidade mxima de memria, em bytes, que pode ser alocada para rotinas de ordenao. O valor padro de 67108864 bytes (64 Mb) para o SuperServer e 8388608 (8 Mb) para o Classic.
CUIDADO: No Classic, considere que aumentar o o tamanho do bloco de memria ou o limite de memria utilizada afeta cada conexo/instncia do servidor e aumentar o uso total de memria consideravelmente.

Parmetros de Comunicao ConnectionTimeout


Era connection_timeout em isc_config/ibconfig Nmero de segundos de espera antes de abandonar uma tentativa de conexo. O valor padro 180.

DummyPacketInterval
Era dummy_packet_interval em isc_config/ibconfig Intervalo em segundos (inteiro) que o servidor ir aguardar antes de enviar um dummy packet para um cliente inativo para confirmar uma conexo. NO USE ESTA OPO em servidores Win32 com clientes TCP/IP. Provoca um aumento constante de utilizao da memria no paginada que poder travar ou derrubar o Windows do lado do cliente, como explicado aqui: http://support.microsoft.com/default.aspx?kbid=296265 Excluindo-se o Win32-com-TCP/IP, este o nico meio de detectar e desconectar clientes inativos quando NamedPipes (NetBEUI), XNET ou IPC so utilizados. No h qualquer restrio conhecida para sistemas POSIX.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 41

Normalmente, o Firebird usa a opo do socket SO_KEEPALIVE para controlar as conexes ativas. Se o timeout de 2 horas (valor padro) no for ideal, ajuste os parmetros do sistema operacional apropriadamente: ! Em SOs do tipo UNIX, modifique o contedo de /proc/sys/net/ipv4/tcp_keepalive_*. ! Em Windows, siga as instrues deste artigo: http://support.microsoft.com/default.aspx?kbid=140325 O padro deve ser 0 e no 60 como era no Firebird 1.0 e na maior parte das RC do 1.5. O valor de 60 dever ser utilizado como padro em sistemas que faam uso do envio de pacote dummy.

RemoteServiceName
Valor padro = gds_db

RemoteServicePort
Estes dois parmetros permitem substituir o nome do servio TCP/IP ou a porta TCP/IP utilizada para a conexo dos clientes, quando um deles for diferente dos utilizados como padro (gds_db/tcp 3050). Mude um dos parmetros, no os dois. O RemoteServiceName verificado primeiramente e caso uma entrada seja encontrada no arquivo de servios a porta especificada por RemoteServicePort utilizada. Se o servio no for localizado, ser usada a porta padro 3050. NOTA: Se uma porta de conexo for indicada na string de conexo TCP/IP, ela ter precedncia sobre RemoteServicePort.

RemoteAuxPort
O comportamento herdado do InterBase de transmitir mensagens de notificao de eventos para a camada de rede atravs de portas TCP/IP selecionadas de forma aleatria, tem sido uma constante fonte de erros de rede e conflitos com firewalls, a ponto de at mesmo provocar a queda do servidor em certas condies. Este parmetro permite configurar uma nica porta TCP para todo o trfego de notificaes de eventos. O valor de instalao padro (0) conserva o comportamento tradicional de portas randmicas. Para definir uma porta especfica para a notificao de eventos, use um nmero inteiro correspondente a uma porta disponvel.

RemoteBindAddress
Por padro, os clientes podem conectar-se por meio de qualquer interface de rede atravs da qual o Host do servidor aceite ser acessado. Este parmetro permite relacionar o servio Firebird a requisies recebidas somente atravs de uma nica interface e rejeitar conexes de quaisquer outras interfaces de rede. Isto deve ajudar a contornar problemas em algumas sub-redes onde o servidor controle o trfego de mltiplas interfaces. String, com endereo IP vlido. Valor padro (sem ligao) em branco.

TcpRemoteBufferSize
O servidor faz leituras para antecipar-se ao cliente e pode enviar vrias linhas de dados num nico pacote. Quanto maior o tamanho do pacote, mais linhas sero enviadas em cada transferncia. Use este parmetro com cuidado e compreenso profunda dos seus efeitos no desempenho da rede! caso

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 42

precise aumentar ou reduzir o tamanho do pacote TCP/IP usado para os buffers de envio e recebimento. Afeta tanto o cliente quanto o servidor. O valor um inteiro (tamanho do pacote em bytes) entre 1448 e 32768. O valor padro da instalao de 8192.

Parmetros especficos POSIX LockSignal


Parmetro inteiro, sinalizador do UNIX para comunicaes entre processos. Valor padro: 16

RemoteFileOpenAbility
USAR APENAS COM EXTREMA CAUTELA

Parmetro Booleano que, se configurado como True, permite que o Servidor abra arquivos de bases de dados que residam em parties montadas a partir de sistema de arquivos em rede (NFS). Como o sistema de arquivos se encontra fora do controle do sistema local, esta uma funcionalidade muito arriscada e que no deve ser habilitada com o propsito de ler/escrever bases de dados de importncia vital para voc. O valor padro 0 (Falso, desativado) e assim deve ser mantido, a menos que se esteja bem ciente dos seus efeitos.

TcpNoNagle
Era tcp_no_nagle em isc_config/ibconfig No Linux, por padro, a biblioteca de socket minimizar as escritas, acumulando-as antes do real envio dos dados, usando um algoritmo interno (implementado como a opo TCP_NODELAY do socket de conexo) conhecido como o Algoritmo de Nagle. Ele foi proejtado para evitar problemas com pacotes pequenos, conhecidos como tinygrams, em redes lentas. Por padro, TCP_NODELAY ativado (valor 0) quando o Firebird Superserver instalado no Linux. A sua desativao poder aumentar a velocidade em redes lentas. Preste ateno na dupla negao : colocar o parmetro como True desativa o TCP_NODELAY, e coloc-lo como False ativa-o. Em verses at e inclusive a 1.5, esta funcionalidade s pode ser ativada para o Superserver.

Parmetros especficos do Windows CreateInternalWindow


O protocolo local Windows usa uma janela escondida para a comunicao entre processos entre o cliente local e o servidor. Esta janela IPC criada na partida do servidor quando o CreateInternalWindow for true (1, valor padro). Configure-o como 0 (desativado) para executar o servidor sem a janela e desativar o protocolo local. Com o protocolo local desativado, possvel executar mltiplas instncias do servidor simultaneamente.

DeadThreadsCollection
Uma parametrizao para o gerenciador de processos no Windows, este valor inteiro define o nmero de ciclos de mudana de prioridade (veja PrioritySwitchDelay, a seguir) que o gerenciador executar antes de destruir um processo (ou fech-lo). A imediata destruio (ou fechamento) de processos ativos exigiria um semforo e uma chamada de bloqueio, gerando uma sobrecarga considervel. Em vez disso, o gerenciador de processos os mantm

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 43

em espera. Assim que o processo completar a sua tarefa, ele ser marcado como inativo. O processo inativo destrudo (ou fechado) aps n iteraes do ciclo do gerenciador, onde n o valor do parmetro DeadThreadsCollection. Para que um servidor possa gerenciar um grande nmero de conexes vrias centenas ou mais o valor do parmetro dever ser ajustado para acima do valor padro, que 50.

GuardianOption
Parmetro booleano utilizado em servidores de Windows para determinar se o Guardian deve reiniciar o servidor sempre que ele termine de forma anormal. O valor padro de instalao (1=True) o far. Para desabilitar este recurso, defina o parmetro como falso (0).

IpcMapSize
Era server_client_mapping em ibconfig Tamanho em bytes para o segmento de memria mapeado pelo cliente para a comunicao entre processos (IPC) no modelo de conexo usado pela cliente local no Windows. No possui qualquer equivalncia em outras plataformas. Inteiro, de 1024 at 8192. O valor padro 4096. Aumentar o tamanho da memria mapeada poder melhorar o desempenho na leitura de grandes quantidades de dados, ou de dados de grande dimenso, tais como BLOBs grficos. NOTA: Este parmetro no poder mais ser alterado a partir do cone do Guardian localizado na rea de Notificao.

IpcName
Valor padro: FirebirdIPI O nome da rea de memria compartilhada usada como canal de transporte no protocolo local. Na Verso 1.5 o valor padro FirebirdIPI no mais compatvel com as verses anteriores do Firebird nem com o InterBase. Use o valor InterBaseIPI para recupera a compatibilidade, quando necessrio.

MaxUnflushedWrites
Este parmetro foi introduzido na Verso 1.5 para contornar uma falha nos sistemas operacionais Windows Server, em que escritas assncronas nunca eram gravadas no disco, exceto quando o servidor Firebird era fechado de forma controlada. (Escritas assncronas no so suportadas no Windows 9x ou ME.) Assim, em sistemas 24/7, as escritas assncronas nunca eram efetivadas de fato. Este parmetro determina a freqncia com que pginas retidas sero gravadas no disco quando o parmetro Forced Writes estiver desativado (e a escrita assncrona ativada). O valor um inteiro, que representa a quantidade de pginas retidas antes de ser solicitada uma gravao em disco, que ser executada da prxima vez que for efetuado um commit da transao. O valor padro 100 nas instalaes do Windows e -1 (desativado) nas instalaes das outras plataformas. Se o fim de um ciclo MaxUnflushedWriteTime (ver abaixo) ocorrer antes que o nmero limite de pginas retidas o seja, a gravao requisitada imediatamente e o nmero de pginas retidas zerado.

MaxUnflushedWriteTime
Este parmetro define o tempo mximo de reteno de pginas para a escrita assncrona, antes que elas sejam gravadas em disco, quando o Forced Writes estiver desativado (escrita assncrona ativada). O seu valor um inteiro que definir o intervalo, em segundos, entre a ltima gravao em disco e a

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 44

ativao de um sinal para que seja executada a gravao, na prxima vez que for efetuado um commit da transao. O valor padro de 5 segundos nas instalaes Windows e -1 (desativado) nas instalaes das outras plataformas.

PrioritySwitchDelay
Configurao do Gerenciador de Processos no Windows, este valor inteiro estabelece o tempo, em milissegundos, que dever ser aguardado antes que a prioridade de um processo inativo seja colocada como baixa e prioridade de um processo ativo seja definida como alta. Uma iterao desta srie de alteraes de prioridade representa um ciclo do gerenciador de processos. O valor padro 100 ms; estabelecido atravs de medies com processadores Intel PIII/P4. Para processadores com de menor freqncia de velocidade, ser preciso um intervalo maior.

PriorityBoost
Valor Inteiro que define o nmero de ciclos extra dado a um processo quando sua prioridade elevada para alta. O valor padro 5.

ProcessPriorityLevel
Era server_priority_class no ibconfig Classe/Nvel da prioridade para o processo do servidor. Este parmetro substitui o parmetro server_priority_class das verses pr 1.5, ver abaixo com uma nova implementao. Os valores inteiros so : 0 prioridade normal, valor positivo prioridade elevada (o mesmo que a opo -B[oostPriority] no instsvc.exe nas opes configure e start) valor negativo prioridade baixa. Nota: Todas as modificaes deste valor devero ser cuidadosamente testadas para assegurar que eles efetivamente melhoraram o tempo de resposta do Servidor.

RemotePipeName
Aplicvel apenas para conexes NetBEUI

Parmetro String, o nome do pipe usado como canal de transporte no protocolo NetBEUI. O nome da pipe equivale ao nmero da porta para o TCP/IP. O valor padro, interbas, compatvel com verses anteriores do Firebird e com o InterBase.

Parmetros para configurar o espao temporrio usado para ordenaes


Quando o tamanho do buffer interno pequeno demais para acomodar as linhas envolvidas em uma operao de ordenao, o Firebird precisa criar arquivos temporrios de ordenao no sistema de arquivos do servidor. Por padro, ser verificado o caminho especificado pela varivel de ambiente FIREBIRD_TMP. Se a varivel no estiver disponvel, o servidor tentar usar a pasta /tmp do sistema de arquivos do Linux/UNIX, ou C:\temp no Windows NT/2000/XP. Nenhum destes locais permite configurao do espao a ser utilizado. O Firebird dispe de um parmetro que permite configurar o espao em disco que ser usado para armazenar estes arquivos temporrios. Convm utiliz-lo, para assegurar que sempre haver espao suficiente para ordenao em todas as condies. Todas as requisies CONNECT ou CREATE DATABASE compartilham a mesma relao de diretrios temporrios e cada uma cria os seus prprios arquivos temporrios. Os arquivos de ordenao sero liberados aps o fim da ordenao ou aps a liberao da requisio. Na Verso 1.5, o nome do parmetro mudou de tmp_diretory para TempDiretories e a sintaxe do parmetro tambm foi alterada.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 45

TempDiretories
Substitui as entradas tmp_diretory em isc_config/ibconfig Informa uma lista de um ou mais diretrios, separados por ponto-e-vrgula (;), onde arquivos temporrios de ordenao podem ser armazenados. Cada item poder incluir um argumento opcional de tamanho mximo, em bytes, de armazenamento. Se este argumento for omitido ou invlido, o Firebird esgotar todo o espao no diretrio antes de passar para a prximo diretrio da lista. Por exemplo : Unix: /db/sortfiles1 100000000;/firebird/sortfiles2 Windows: E:\sortfiles 500000000 Caminhos relativos so tratados como relativos ao caminho que o servidor em execuo estabeleceu como o do diretrio raiz de instalao do Firebird. Por exemplo, no Windows, se o diretrio raiz for C:\Programas\Firebird, o valor abaixo indicar ao servidor para que armazene os arquivos temporrios em C:\Programas\Firebird\userdata\sortfiles, at ao limite de 500 Mb: TempDiretories = userdata\sortfiles 500000000
Nota: Sem aspas, ao contrrio do que era requerido no Firebird 1.0

Parmetros de Compatibilidade CompleteBooleanEvaluation


Implementa o mtodo de avaliao de expresses Booleanas (completa ou parcial). O valor padro (0=False) faz com que a avaliao de expresses booleanas com predicados AND e OR seja interrompida to logo seja possvel obter um resultado VERDADEIRO OU FALSO que no poder mais ser afetado por quaisquer avaliaes posteriores. Em certas e raras condies (normalmente evitveis), possvel que uma expresso dentro de uma condio OR ou AND e que no tenha sido avaliada em razo desta configurao parcial, tenha o potencial de afetar o resultado final. Caso voc tenha a infelicidade de herdar uma aplicao que tenha tais caractersticas na sua lgica de SQL, use este parmetro para forar a avaliao completa at ter oportunidade de corrigi-la. O parmetro um booleano.
No subestime o fato de que esta opo afeta todas as avaliaes de Booleanas em todos os bancos de dados do servidor.

OldParameterOrdering
A verso 1.5 encaminhou e resolveu um conhecido erro do InterBase que provocava uma ordenao idiossincrtica na estrutura XSQLDA dos parmetros de sada devolvidos aos clientes. O erro vinha de to longe que muitas aplicaes, drivers e interfaces existentes possuam solues embutidas para contornar o problema no lado do cliente. As verses 1.5 e posteriores corrigiram esta condio na API e so instaladas com o OldParameterOrdering=0 (Falso). Mude o parmetro Booleano para True caso precise do comportamento anterior, para manter compatibilidade com cdigos j existentes.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 46

Aliasing dos Arquivos BD


A verso 1.5 do Firebird introduz o apelido ou alias de arquivos de base de dados para melhorar a portabilidade das aplicaes e para aumentar o controle interno e externo do acesso s bases de dados.

Aliases.conf
Configure os alias de arquivos de base de dados no arquivo texto aliases.conf, localizado no diretrio raiz da Instalao do Firebird. O aliases.conf similar a : # # List of known database aliases # -----------------------------# # Exemplos: # # dummy = c:\data\dummy.fdb # Como em todos os arquivos de configurao do Firebird, o smbolo '#' funciona como indicador de comentrios. Para configurar um alias, simplesmente apague o '#' e altere a linha com o dummy para o valor correto do caminho do banco de dados: # fbdb1 est no servidor Windows: fbdb1 = c:\Firebird\sample\Employee.fdb # fbdb2 est no servidor Linux fbdb2 = /opt/databases/killergames.fdb # Voc pode editar o aliases.conf com o servidor em execuo. No existe qualquer necessidade de parar ou reiniciar o servidor para que as novas entrada no aliases.conf sejam aplicadas.

Conexo usando um caminho com alias


A string de conexo alterada na sua aplicao cliente dever ser : Nome_servidor:alias Seguindo esta estrutura, no exemplo abaixo, a seguinte string de conexo solicitaria ao servidor Firebird sendo executado em um computador Linux de nome Servidor para localizar e conectar ao cliente o banco de dados armazenado no caminho identificado como fbd2 em aliases.conf : Servidor:fbdb2

Nomear bases de dados no W indows


Note que agora a extenso recomendada para bases de dados no Windows ME e XP .FDB, para evitar possveis conflitos com o recurso de Recuperao de Sistema do Windows. Caso este procedimento no seja observado nestas plataformas, ocorrero os conhecidos problemas de atraso na primeira conexo base de dados em que os arquivos primrios e/ou secundrios tenham a extenso convencional .gdb.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 47

Equipes de Desenvolvimento Firebird


Programador
Dmitry Yemanov

Pas
Federao Russa

Tarefas principais
Coordenador de Verses; melhorias no DSQL e PSQL; implementao do Embedded Server; diversos aperfeioamentos do meta dados; Alias para base de dados; trigger mltipla ao; tipo de dado BigInt; novas variveis de contexto; servidor Classic para Windows; inmeras resolues de erros. Especificao e implementao de funcionalidades SQL (SAVEPOINTs, Bloqueio pessimista); melhorias no meta dados; reimplementaes do Servidor; pesquisa e correo de erros; problemas de arquitetura; habilitao de Servios API no Classic em Linux; melhoria do desempenho; verses Classic para Linux. Melhorias do Otimizador; diversas novas funcionalidades DSQL. Avaliao do Cdigo; pesquisa e correo de erros; melhorias do PSQL; Correo, especificao e implementao de UDFs. Novas funcionalidades PSQL e DSQL; autor e coordenador de funcionalidades de segurana; correo do cdigo; compilaes Superserver para Linux Converso do cdigo do Firebird para C++; melhoria do desempenho; transporte de funcionalidades; pesquisa e correo de erros. Programador de novos sets de caracteres; profunda limpeza do cdigo e remodelao da rvore; compilaes MinGW. Programador e co-coordenador do Jaybird. Especificador e co-coordenador do JayBird; Especificao das ferramentas de documentao do Firebird. Desenvolvedor e coordenador do .NET provider para o Firebird. Implementou interface PLUG-IN para o set de caracteres; coordenador de compilaes Darwin; implementao inicial do novo modelo de memria. Pesquisa e correo de erros; limpeza de cdigo; verses SINIX-Z. Limpeza de cdigo; compilaes MinGW. Compilaes Linux (Verso 1.0); especificador / coordenador de ferramentas QA. Correo de erros; consultoria tcnica; aumento do nmero mximo de ndices.

Nickolay Samofatov

Federao Russa

Arno Brinkman Claudio Valderrama

Pases Baixos Chile

Alex Peshkoff

Federao Russa

Mike Nordell

Sucia

Blas Rodriguez Somoza

Espanha

Roman Rokytskyy David Jencks

Alemanha U.S.A.

Carlos Guzman Alvarez John Bellardo

Espanha U.S.A.

Erik Kunze Dmitry Sibiryakov Pavel Cisar

Alemanha Federao Russa Repblica Checa

Ann Harrison

U.S.A.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 48

Programador
Mark O'Donohue

Pas
Austrlia

Tarefas principais
Funcionalidades de linha do isql; correo de erros; compilaes boot (Verso 1.0); correo do cdigo (Verso 1.0). QA; instaladores Win32; painel de controle padro Win32. Adicionadas funcionalidades de PLAN para triggers; limpeza de cdigo. Compilaes Intel Solaris. Re-implementao de servios de instalao no Win32. Aperfeioamentos, atualizaes de sets de caracteres. Coordenador do projeto de documentao Firebird. Coordenador do projeto de documentao do Firebird; correes do UDF. Melhorias no painel de controle Win32; desenvolvedor do Gerenciador de Configurao do Firebird; Internacionalizao do mesmo. Melhorias no programa do painel de controle do Win32 Organizador do Bugtracker; limpeza de cdigo. Programador do driver Jaybird Tipo 2. Implementador de collations dos sets de caracteres. Resoluo de erros de GSTAT. Resoluo de erros para tipo de dados ARRAY. Aumento de velocidade do sweep; corrigido o commit de 2 Fases. Resoluo de erros. Resoluo de erros. Resoluo de erros. Resoluo de erros. Instaladores Win32 no-oficiais. Novas UDFs. Compilaes FreeBSD.

Paul Reeves Ignacio J. Ortega

Frana Espanha

Konstantin Kuznetsov Olivier Mascia Peter Jacobi Tilo Muetze Paul Vinkenoog

Federao Russa Blgica Alemanha Alemanha Pases Baixos

Artur Anjos

Portugal

Achim Kalwa Sean Leyne Ryan Baldwin Sandor Szollosi Dmitry Kuzmenko Artem Petkevych Vlad Horsun Tomas Skoda Evgeny Kilin Oleg Loa Erik S. La Bianca Tony Caduto Juan Guerrero Chris Knight

Alemanha Canada U.K. Hungria Federao Russa Ucrnia Ucrnia Eslovquia Federao Russa Federao Russa U.S.A. U.S.A. Espanha Austrlia

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 49

Programador
Neil McCalden Grzegorz Prokopsi Paul Beach Geoffrey Speicher Helen Borrie

Pas
U.K. Hungria U.K. U.S.A. Austrlia

Tarefas principais
Compilaes Solaris. Compilaes Debian. Compilaes HP-UX. Compilaes FreeBSD. Autora das Notas da Verso; testes de campo e Thought Police

"OS HERIS DOS TESTES DE CAMPO "


Pavel Kuznetsov Eugene Kilin Dmitry Kovalenko Vladimir Kozloff Barry Kukkuk Yakov Maryanov Christian Pradelli Daniel Rail Volker Rehn David Ridgway David Rushby Pavel Shibanov Ruslan Strelba

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 50

NOTAS

DE

INSTALAO

Instalar o Firebird 1.5 em W indows 32

LEIA ANTES!
Com a introduo de dois novos modelos de servidor no Win32 as opes de instalao para o Firebird aumentaram.
! !

Tenha certeza de estar logado como Administrador (no se aplica ao Win9x ou ME) Todos os modelos de Servidor, Super, Classic e Embedded, bem como as ferramentas de administrao e o cliente podem ser instalados a partir do programa de instalao para Windows. Para uma instalao completa de verso, altamente recomendvel usar o instalador se houver um disponvel. Use o gbak para fazer uma cpia reserva da sua base de dados de segurana isc4.gdb. Voc poder restaur-la mais tarde com o nome de security.fdb. Caso utilize configuraes especficas no ibconfig poder haver algumas configuraes que voc queira converter para os parmetros equivalentes no firebird.conf. Estude as notas sobre o firebird.conf para poder definir o que pode ser simplesmente copiado e o quais os parmetros precisaro ser adaptados para a nova Sintaxe. Caso determinados arquivos de configurao existam no diretrio de instalao eles sero mantidos pelo programa de instalao e SOBREPOSTOS se voc descompact-los de um kit zipado para o local padro. Estes arquivos so: security.fdb firebird.log firebird.conf aliases.conf Todas as verses podem ser instaladas a partir de um arquivo zip. Este mtodo ser mais rpido do que atravs do instalador caso voc esteja familiarizado com instalaes do Firebird 1.5 a partir de arquivos zip. Todavia poder ser uma tarefa spera para um iniciante em Firebird. Pressupe-se que: 1 Voc compreende como funciona a sua rede. 2 Voc compreende porque um sistema cliente/servidor precisa ter servidor e clientes. 3 Voc leu todo o resto destas notas da verso ou pelo menos tem a noo de que precisar llas se algo parecer estar incorreto. 4 Voc sabe como acessar o grupo de discusso do firebird-support quando se encontrar em dificuldades. Inscreva-se em http://www.yahoogroups.com/groups/firebird-support

Se j possuir uma verso anterior do Firebird ou InterBase no seu servidor e acha que poder desejar retornar a ela, estabelea um ponto de retorno antes de comear.
!

Use a verso existente do GBAK para efetuar uma cpia dos seus arquivos de banco de dados em formato transportvel.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 51

V at o diretrio de Sistema e faa uma cpia de reserva do gds32.dll. Recomendamos que renomeie a cpia como "gds32.dll.ib5" ou "gds32.dll.fb103", ou algo igualmente informativo; ou esconda-o em um outro diretrio. Poder tambm ser uma boa idia fazer uma cpia de segurana da biblioteca de execuo do Microsoft C++, msvcp60.dll. O programa de instalao no dever sobrepor a sua verso deste arquivo, mas algo de anormal pode ocorrer. PARE QUALQUER SERVIDOR FIREBIRD OU INTERBASE QUE ESTEJA EM EXECUO O programa de instalao tentar detectar verses prvias do Firebird ou InterBase instaladas e/ou em execuo. Em uma instalao que no o utilize, voc estar por contra prpria! O local padro do Firebird 1.5 ser C:\Arquivos de Programas\Firebird_1.5. Se a sua verso anterior j estiver instalada neste diretrio e voc tiver a inteno de usar os locais padres, renomeie o diretrio existente.

Para instalar o Firebird como servio: caso pretenda usar a nova funcionalidade de login seguro, crie um "usurio de servio firebird" no sistema com nome e senha sua escolha como um usurio normal com os privilgios apropriados. Voc dever ler primeiro o documento nomeado README.instsvc.txt. Se voc possuir um kit compactado, poder encontr-lo no diretrio /doc a partir da raiz do arquivo zip. Caso no possua um kit compactado, o arquivo s estar acessvel ao final da instalao. Voc pode ler o mesmo documento no seguinte endereo: http://cvs.sourceforge.net/viewcvs.py/firebird/firebird2/doc/README.instsvc

LEIA EM SEGUIDA !
Uma das metas de especificao do Firebird 1.5 era preparar o caminho para mltiplas instalaes do Servidor. Isto permitir aos usurios executar diferentes verses lado a lado. O Firebird 1.5 suporta isto, embora de forma no muito bem documentada, e ainda requerendo muitas intervenes de um usurio experiente. Futuras verses do Firebird tornaro este processo menos complicado. Mas neste meio tempo, o Firebird 1.5 precisar preparar o terreno. O que nos fora a confrontar o problema da instalao da biblioteca. Ao mesmo tempo, a Microsoft tem tomado as suas prprias medidas para controlar a instalao de bibliotecas de diferentes verses. Analisadas em conjunto, estas duas polticas implicam em um novo procedimento para a instalao de bibliotecas para o Firebird 1.5 e futuras verses.

Instalao das bibliotecas de sistema Microsoft


Os problemas associados com a instalao de diferentes verses das bibliotecas de sistema Microsoft so to conhecidos, que receberam o codinome de Inferno das Dlls. A partir do lanamento do Windows 2000, a Microsoft tornou quase impossvel a atualizao das DLLs de sistema. Para contornar este problema, a Microsoft recomenda agora que cada aplicao instale cpias locais das bibliotecas que so requeridas. O Firebird 1.5 segue esta prtica e coloca as bibliotecas requeridas no diretrio \bin junto com o Servidor.

Instalao do fbclient.dll
A partir da verso 1.5 gds32.dll no mais utilizada como biblioteca cliente. Agora ela chama-se fbclient.dll. Dados os problemas enfrentados pela prpria Microsoft com o inferno das DLLs, no fazia muito sentido continuar instalando a biblioteca cliente do Firebird no diretrio de sistemas. Como

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 52

desejamos permitir a instalao de mltiplas instncias de Servidor estaramos criando nosso prprio inferno se prossegussemos com a prtica de instalar o cliente no diretrio de sistemas. Assim, a partir da verso 1.5 a biblioteca cliente residir na pata \bin juntamente com todos os outros binrios. Uma nova chave de registro foi adicionada e todas as aplicaes compatveis com o Firebird devero utiliz-la para localizar a verso correta que elas desejam usar. A nova chave : HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances Firebird garantir a existncia de pelo menos uma entrada neste registro. Ela ser conhecida como : DefaultInstance e conter o caminho para o diretrio da (sim, voc adivinhou) instalao padro. Aplicaes que no tenham interesse por uma instalao em particular podero usar a instncia padro para localizar a fbclient.dll. Verses futuras do Firebird iro encontrar novas entradas na chave Instances. Aplicaes sero capazes de enumerar as entradas do registro e determinar a biblioteca da instncia que elas desejam carregar.

Suportando drivers e aplicaes legadas


Tradicionalmente, aplicaes que usam Interbase ou Firebird tm esperado carregar o cliente GDS32.dll encontrado na pasta de sistemas. O Firebird 1.5 fornece uma ferramenta chamada instclient.exe que pode instalar um clone do fbclient.dll na pasta de sistemas do Windows. Este clone modificado instantaneamente para que sua informao de verso informe 6.3, para prover compatibilidade com aplicaes prvias que verificam a verso do arquivo GDS32.dll e no tem como interpretar valores como 1.5. Durante o processo de instalao o instalador procura por instalaes anteriores do Interbase e do Firebird. Caso nada seja encontrado ser copiada a nova GDS32.dll. Caso seja detectada qualquer verso possvel do Interbase ou do Firebird instalado a GDS32.dll no ser copiada. De qualquer forma, a ferramenta instclient.exe poder ser utilizada mais tarde. Pretende-se que futuras verses do Firebird no tentem mais instalar gds32.dll na pasta de sistemas e que em um determinado momento ela seja removida da distribuio. A ferramenta instclient.exe pode tambm instalar a prpria FBCLIENT.DLL na pasta de sistemas do Windows, para satisfazer aplicaes e ferramentas que precisem carrega a partir desta pasta. Uso do instclient.exe: instclient i[install] [ -f[orce] ] biblioteca q[uery] biblioteca r[emove] biblioteca

onde biblioteca : fbclient | gds32. -z, que pode ser usada com qualquer opo, mostra a verso. A informao de verso e a contagem de compartilhamento da biblioteca so tratadas automaticamente. O uso da opo f[orce] desconsidera a verificao de verso.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 53

NOTA A opo f[orce] pode danificar outra verso de Firebird ou Interbase j instalada. Voc poder ter que reiniciar o sistema para finalizar a instalao da cpia. Para mais detalhes, veja o documento README.Win32LibraryInstallation.txt que est localizado no diretrio raiz ou na pasta \doc da sua instalao.

Desinstalao de verses de teste


Deve ser destacado que o instalador remove qualquer fbclient.dll que seja encontrada na pasta de sistemas. O instalador tambm remove a chave obsoleta de registro HKLM\Software\FirebirdSQL.

Usando o programa de Instalao Firebird para o Win32


Esta a instalao mais simples. Basta executar o instalador e responder os dilogos de forma apropriada. Depois ter respondido por volta de dilogos, ser visualizada uma caixa com uma lista drop-down que, quando aberta, ser similar a esta. Esta realmente a ltima oportunidade para selecionar o tipo de instalao que voc quer.

Escolha a instalao desejada e clique em "Next" para avanar nos dilogos. Servio ou aplicao? Se voc selecionar a verso de instalao Superserver ou Classic, e a verso do seu SO suportar servios, voc dever indicar se pretende executar o Firebird como servio ou como aplicao. A menos que tenha uma necessidade especfica para executar o servidor como aplicao, opte por servio. Manual ou automtico?

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 54

Com a opo automtica, o Firebird ir partir toda vez que o computador onde foi instalado seja ligado. Com a opo manual voc iniciar o servidor apenas quando requisitar. Opo do Guardian O Guardian um utilitrio que pode ser executado "em cima" do Superserver e reinici-lo caso ele caia por qualquer razo. No desenvolvimento, voc pode optar por no us-lo. Em ambiente de trabalho ele poder remediar uma situao em que o aplicativo pare de funcionar e o DBA (administrador) no se encontre disponvel para o reiniciar. Diretrio de Instalao (Root) Se decidir no usar o diretrio padro de instalao, navegue at o local previamente criado; ou simplesmente digite o seu caminho completo. A pasta destino no precisa existir previamente: o programa de instalao pedir a sua confirmao e ir cri-la, se necessrio. Eventualmente, os dilogos iro parar e o servidor ir, ou partir silenciosamente ou pedir a sua permisso para reiniciar a mquina a tarefa de reinicializao ser necessria caso o programa de instalao tenha sobreposto a msvcp60.dll, ou se uma gds32.dll mais antiga estava carregada quando o programa de instalao se iniciou.

Instalando o Superserver a partir de um kit compactado


A instalao do FB 1.5 similar em princpio a das verses anteriores. Caso no possua o programa especfico de instalao (distribudo em separado) os passos sero os seguintes: Use o unzip para extrair os arquivos para uma pasta separada (como alguns nomes foram alterados, no faz muito sentido extrair os arquivos da v1.5 para a mesma pasta do IB/FB1) - V at o diretrio para o qual os arquivos foram extrados e dentro dela localize a pasta bin (daqui por diante, chamaremos de <raiz> o diretrio onde os arquivos da v1.5 foram instalados). - execute instreg.exe instreg.exe install faz com que caminho do diretrio de instalao acima seja escrito na chave de registro (HKLM\Software\Firebird Projet\Firebird Server\Instances\DefaultInstance) - se quiser registrar um servio, execute tambm instsvc.exe: instsvc.exe install. - Opcionalmente, faa uma cpia de fbclient.dll e gds32.dll para a pasta de sistema do OS. -

Instalando o Classic Server a partir de um kit compactado


Para instalar a modalidade CS, a nica diferena ser indicar um parmetro adicional para o instsvc.exe: instsvc.exe install -classic Repare que isto implica que s possvel ter uma arquitetura do Servidor, ou fbserver.exe (Superserver) ou fb_inet_server.exe (o processo principal o Classic), instalada como servio. Instalao simplificada

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 55

Caso no precise registrar um servio, ento voc no dever executar o instreg.exe ou o instsvc.exe. Basta extrair o contedo do arquivo zip em uma pasta prpria executar o servidor: fbserver.exe -a Ele considerar o diretrio pai como diretrio raiz da instalao. Desinstalao Para remover o FB 1.5 sem um desinstalador Windows voc dever: - parar o servidor. - executar "instreg.exe remove". - executar "instsvc.exe remove". - apagar o diretrio de instalao. - apagar os clientes fbclient.dll e gds32.dll da pasta de sistema do SO

Instalando o servidor Embedded a partir de um kit compactado


O servidor embedded interliga um cliente a um servidor com todas as funcionalidades numa biblioteca dinmica (fbembed.dll). Ele tem exatamente as mesmas funcionalidades que o Superserver e exporta os mesmo pontos de entrada da interface API padro do Firebird. Registro As entradas do Registro para o Firebird (onde o servidor normalmente procura pela localizao da pasta de instalao) so ignoradas. O diretrio raiz servidor embedded a pasta um nvel abaixo daquela onde o arquivo binrio (biblioteca) se encontra. Acesso Base de Dados Apenas o acesso verdadeiramente local permitido. O servidor embedded no possui suporte para protocolos remotos, ento nem mesmo o acesso via "localhost" funcionar. Autenticao e segurana A base de dados de segurana (security.fdb) no utilizada pelo servidor embedded e portanto no necessria. Qualquer usurio pode conectar-se a qualquer banco de dados. Assim, como tanto o servidor quanto o cliente so executados no mesmo espao de endereo (local), a segurana uma questo de acesso fsico. Os privilgios SQL so validados, tal como nas outras modalidades. Compatibilidade Qualquer quantidade de aplicaes pode ser executada em um servidor embedded sem quaisquer conflitos. Ter um servidor IB/FB sendo executado simultaneamente tambm no causar qualquer problema. Mas importante ressaltar que no possvel acessar simultaneamente o mesmo banco de dados a partir de mltiplos servidores embedded, porque eles compartilham a arquitetura SuperServer e precisam de acesso exclusivo ao banco de dados. Estrutura de arquivos para o Servidor Embedded Basta copiar fbembed.dll para a pasta onde se encontra a aplicao desejada. E ento renome-lo para fbclient.dll ou gds32.dll, dependendo de como o programa se conecta ao banco de dados. Efetue cpias usando os dois nomes caso precise usar as ferramentas de Administrao (isql, gbak, etc.) Tambm devero ser copiados os arquivos firebird.msg, firebird.conf (se necessrio) e ib_util.dll na mesma pasta.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 56

Se bibliotecas externas forem requeridas pela sua aplicao, p.ex. suporte INTL (fbintl.dll) ou bibliotecas UDF, elas devero ser colocadas em uma pasta separada do aplicativo. Para poder utilizlas, coloque-as em uma pasta que reproduz a estrutura de diretrios padres do Firebird, i.e., em subdiretrios nomeados /intl e /udf criados diretamente abaixo do diretrio onde foram copiados os arquivos bsicos do Firebird. Exemplo D:\my_app\app.exe D:\my_app\gds32.dll (fbembed.dll renomeado) D:\my_app\fbclient.dll (fbembed.dll renomeado) D:\my_app\firebird.conf D:\my_app\aliases.conf D:\my_app\isql.exe D:\my_app\ib_utils.dll D:\my_app\gbak.exe D:\my_app\firebird.msg D:\my_app\intl\fbintl.dll D:\my_app\udf\fbudf.dll

Ento, inicie a sua aplicao. Ela usar o servidor embedded como uma biblioteca cliente e ter acesso aos bancos de dados locais. NOTA Desde que voc mantenha a estrutura de diretrios de acordo com estas regras, no necessrio alterar o parmetro RootDirectory no firebird.conf. Porm, se voc decidir distribuir sua aplicao com o servidor embedded com uma estrutura diferente de diretrios, tome o cuidado de ler antes o documento README_embedded.txt da distribuio do Servidor embedded, para instrues adicionais de configurao

Desinstalao
A rotina de desinstalao do Firebird mantm e renomeia os seguintes arquivos chaves: Mantm security.gdb ou renomeia-o para security.fbnnnn. Mantm firebird.log. Mantm firebird.conf ou renomeia-o para firebird.confnnnn Mantm aliases.conf ou renomeia-o para aliases.confnnnn "nnnn" o nmero da verso da instalao anterior. Nenhuma tentativa feita de remover arquivos que no tenham feito parte da instalao original. Arquivos compartilhados como o fbcliente.dll e o gds32.dll sero removidos se o contador de compartilhamento (share count) indicar que nenhuma outra aplicao est usando-os. As chaves do Registro criadas sero removidas.

Outras Notas Winsock2


O Firebird requer o WinSock2. Todas as plataformas Win32 devero ter o WinSock2, exceto o Win95. feita uma verificao da presena da biblioteca Winsock2 durante a instalao. Caso ela no seja encontrada a instalao falhar. Para fazer uma atualizao do seu sistema consulte este link: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q177719

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 57

Windows ME e XP
No Windows ME e XP (Edies Home e Profissional) existe uma funcionalidade denominada Recuperao de Sistema, que provoca uma auto-atualizao (backup caching?) de todos os arquivos no sistema com extenso ".gdb". O efeito uma lentido no acesso aos bancos de dados InterBase/Firebird, a ponto de uma quase paralisia, porque efetuada uma cpia de segurana destes arquivos cada vez que ocorre uma operao de E/L. (No XP no h opo de Recuperao de Sistema nos Servidores .NET). Um arquivo no diretrio Windows do ME, c:\windows\system\filelist.xml, contm os "tipos protegidos de arquivo", e a extenso ".gdb" est relacionada. Charlie Caro, inicialmente sugeriu que se removesse a extenso GDB da seo "includes" deste arquivo. Porm, desde ento, ficou comprovado que o WinME consegue restaurar a lista. No XP, no sequer possvel editar o arquivo filelist.xml. Em ME, as solues permanentes que podemos sugerir so: ! Utilizar a extenso FDB (Firebird DB) para os arquivos de Banco de Dados ! Mover a o Banco de Dados para a pasta C:\Meus Documentos, que ignorada pela Recuperao de Sistema. ! Desativar completamente o recurso de Recuperao de Sistema (verifique as instrues na documentao do Windows). No Windows XP Edies Home e Profissional voc poder mover as bases de dados para uma partio separada, e configurar o System Restore para excluir esse volume. O Windows XP utiliza uma cpia inteligente, assim a lentido verificada no Windows ME pode no ser to significativa no XP, pelo menos para arquivos menores. Para arquivos maiores (por exemplo: Bancos de Dados Firebird!) no parece existir uma soluo melhor, se os seus arquivos ".gdb" estiverem localizados no sistema de arquivos geral. Estamos tentando obter uma descrio precisa do problema e uma soluo comprovada para comunicarmos aqui.Se voc acha que pode ajudar com uma descrio do problema ou com uma soluo alternativa, por favor envie uma mensagem para o grupo de discusso ib-support ou firebird-devel em news://news.atkin.com/ O comportamento do desligamento do Windows XP um conhecido buraco negro. H uma pausa significativamente longa enquanto o servidor tenta parar o servio. Durante este tempo a tela indica que o Firebird est sendo executado como uma aplicao. Este problema parece afetar s ao Windows XP e ele s acontece se o Guardian no estiver sendo utilizado para parar o servio do Firebird. Portanto, us-lo a forma de contornar o problema at que uma melhor soluo seja encontrada.

Instalao no UNIX / Linux


(Originalmente escrito por Mark O'Donohue, revisado para 1.5) O servidor Firebird disponibilizado em duas modalidades, Classic que executada como um servio, e SuperServer que executado como um daemon em segundo plano. O usurio que estiver tendo seu primeiro contato com o Firebird pode usar qualquer verso, embora seja provvel que a verso clssica oferea uma melhor plataforma para experincias iniciais com o Firebird.

NOTAS LEIA ANTES


1) preciso ter direitos de usurio root para instalar o Firebird.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 58

2) A instalao no Linux requer que o pacote glic instalado tenha verso igual ou superior a gblibc2.25. 3) Para uma verificao superficial de compatibilidade Linux, consulte esta tabela, mas no a considere palavra final sobre o assunto. Distribuies de binrios Linux podem variar dependendo de quando e onde elas foram montadas. 4) Garanta que os editores de pacote, ed e vim, esto instalados no seu sistema. Se o editor requerido no estiver presente, o pacote ser instalado, mas os scripts de instalao iro falhar. (NOTA Esta dependncia pode no futuro ser substituda por sed.)

INSTALAO EM LINUX
As instrues a seguir referem-se a instalao da Classic. Para instalao da edio Superserver o CS ser substitudo pelo SS. Por exemplo, o pacote FirebirdCS-1.5.0-nnnn.i86.rpm ser substitudo por FirebirdSS-1.5.0-nnnn.i86.rpm. Para uma instalao rpm linux
$rpm -ivh FirebirdCS-1.5.0-nnnn.i686.rpm

Para uma instalao .tar.gz linux


$tar -xzf FirebirdCS-1.5.0-nnnn.tar.gz $cd FirebirdCS-1.5.0-nnnn.i86 $./install.sh

* ou FirebirdSS-1.5.0-nnnn O que uma instalao Linux far A instalao Linux ir: 1. Tentar parar algum servidor que esteja em execuo. 2. Adicionar o usurio firebird e o grupo firebird se eles ainda no existirem. 3. Instalar a aplicao na pasta /opt/firebird e criar direcionamentos para as bibliotecas em /usr/lib e para os cabealhos em /usr/include 4. Automaticamente adicionar gds_db na porta 3050 em /etc/services se a entrada ainda no existir 5. Automaticamente adicionar localhost.localdomain e HOSTNAME em /etc/host.equiv 6. A verso SuperServer instala tambm um script de partida em /etc/rc.d/init.d/firebird. 7. A verso Classic instala um script de inicializao do servidor firebird em /etc/xinet.d/firebird, ou para sistema inetd antigos, uma entrada adicionada no arquivo /etc/inetd. 8. Especificamente na distribuio SuSE um novo direcionamento rcfirebird criado em /usr/bin para o script init.d, e uma entrada Firebird criada em /etc/rc.config. 9. Inicia o servio / servidor. O Firebird deve partir automaticamente em runlevel 2, 3 e 5. 10. gerada randomicamente e configurada uma senha para o usurio SYSDBA que ser armazenada em /opt/firebird/SYSDBA.password. 11. adicionada uma entrada em aliases.conf para o banco de dados exemplo, employee.fdb.

Testes da instalao Linux Passo 1 Acessando o banco de dados


$cd /opt/firebird/bin $isql -user sysdba -password <senha*>

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 59

>connect localhost:employee.fdb /*este um acesso atravs do alias >select * from sales; >select rdb$relation_name from rdb$relations; >help; >quit;

*A senha foi gerada para /opt/firebird/SYSDBA.password.

voc

na

instalao.

Ela

pode

ser

obtida

no

arquivo

Passo 2 Criando um banco de dados A partir da verso 1.5, o servidor firebird ser executado por padro pelo usurio firebird. Embora esta sempre tenha sido a recomendao, anteriormente o padro era executar o servidor pelo usurio root. Quando em execuo pelo usurio root, o servidor possua direitos plenos para ler, criar e apagar bancos de dados em qualquer local do sistema de arquivos POSIX. Por questes de segurana, o servio deveria ter sua capacidade de ler, criar e apagar arquivos limitada. Enquanto a nova configurao melhor da perspectiva da segurana, ela requer que cuidados especificos sejam tomados na criao de novos bancos de dados: 1) O usurio firebird deve possuir diretos de escrita na pasta onde ser criado o banco de dados. 2) O valor recomendado para o atributo DatabaseAccess no arquivo /opt/firebird/firebird.conf dever ser None, para permitir o acesso apenas atravs das entradas do arquivo aliases.conf. 3) Usar entradas no aliases.conf para abstrair dos usurios a localizao fsica dos bancos de dados. Mais informaes sobre alias aqui. Os procedimentos para criao de novos bancos variaro conforme a configurao escolhida. No entanto, recomendamos os seguintes passos com esta sugesto de configurao: 1) Se a pasta do usurio Firebird ainda no foi criada, mude para o usurio root e crie a pasta: $su root $mkdir p /var/firebird $chown firebird:firebird /var/firebird 2) Crie fisicamente o novo banco e configure uma entrada de alias para ele. Como usurio root ou firebird, execute o seguinte script: $cd /opt/firebird/bin $./createDBAlias.sh test.fdb /var/firebird/test.fdb (O uso : createDBAlias.sh <nome do banco> <caminho do banco>) 3) Como uma alternativa ao item 2, os procedimentos do script createDBAlias.sh podem ser executados um a um por: $vi /opt/firebird/aliases.conf e acrescente uma linha no fim do arquivo: test.fdb /var/firebird/test.fdb 4) Ento crie o Banco de Dados:

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 60

$/opt/firebird/isql -u sysdba -p <senha*> SQL>create database 'localhost:test.fdb'; SQL>quit; 5) Se o valor de DatabaseAccess em /opt/firebird/firebird.conf estiver definido com Full ou um caminho restrito (por exemplo: DatabaseAccess=/var/firebird) outra alternativa para o passo 2 criar fisicamente o banco de dados diretamente, utilizando o caminho absoluto junto com o nome do arquivo: $/opt/firebird/isql -u sysdba -p <senha*> SQL>create database '/var/firebird/test.fdb'; SQL>quit; Caso use esta opo, o arquivo do banco de dados tambm poder ser acessado diretamente sem que seja feita uma entrada no arquivo de alias. $/opt/firebird/isql -u sysdba -p <senha*> SQL>connect '/var/firebird/test.fdb'; SQL>quit; *A senha foi gerada para /opt/firebird/SYSDBA.password. Dicas e alguns Scripts teis Complementando os arquivos padres de instalao, esto disponveis na pasta bin desta verso os seguintes scripts: voc na instalao. Ela pode ser obtida no arquivo

changeDBAPassword.sh Altera a senha do usurio Firebird SYSDBA e, se necessrio, altera o script de inicializao /etc/rc.d/init.d/firebird para que seja utilizada tambm a nova senha. createAliasDB.sh Uso: createAliasDB.sh <dbname> <dbpath>. Este script cria fisicamente um novo banco de dados e adiciona uma entrada no arquivo aliases.conf. fb_config Um script que pode ser usado com makefiles para gerar os caminhos de include requeridos e incluir as diretivas de lib para a verso instalada do Firebird. fb_config -help mostrar a lista completa de opes. changeGdsLibraryCompatibleLink.sh somente Classic Alterna o direcionamento da biblioteca cliente para libgds.so entre a multi processada libfbclient.so e a uni processada libfbembed.so que permite o acesso embedded direto a um banco de dados. Para manter a compatibilidade com instalaes anteriores, libgds.so por padro aponta para libfbembed.so. Acesso direto ou embedded aos arquivos de banco de dados - A instalao clssica oferece um modo embedded de acesso que permite que programas acessem diretamente o arquivo de banco de dados. Para operar neste modo, um usurio com permisses de banco de dados precisar de acesso privilegiado a alguns arquivos de configurao e de estado do firebird.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 61

Obtendo acesso ao banco de dados: Agora que 'firebird' (e no root) o usurio padro para a execuo do aplicativo, voc precisar saber como incluir um usurio no grupo firebird e como habilitar o seu acesso aos bancos de dados. Isto est documentado nas notas leiame, mas os seguintes passos devem lev-lo at onde voc precisa chegar:

Para adicionar um usurio (por exemplo, skywalker) ao grupo firebird, o usurio root precisar fazer: $ usermod -G firebird skywalker Na prxima vez que o usurio 'skywalker' entrar no sistema ele poder comear a trabalhar com os bancos de dados firebird. Para listas dos grupos a que um usurio pertence, digite a seguinte linha de comando: $ groups
!

Problemas NTPL com distruibuies Linux recentes: A nova NPTL (Native POSIX Thread Library) do Red Hat 9 (at o momento) causar problemas para o Superserver e os programas compilados localmente, incluindo as ferramentas de Administrao. Gbak, em partircular,indicar um erro de Broken Pipe. Para contorn-lo:

1. em /etc/init.d/firebird LD_ASSUME_KERNEL=2.2.5 export LD_ASSUME_KERNEL Isto resolve a instncia do Servidor. Voc precisar tambm ter uma varivel de ambiente definida no seu ambiente local. Ento: 2. Adicione o seguinte em /etc/profile, para garantir que todo usurio o utilizar como ferramenta de linha de comando. aps HISTSIZE=1000 adicione LD_ASSUME_KERNEL=2.25 E na linha seguinte, exporte-o: export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUT_RC LD_ASSUME_KERNEL

Desinstalando em Linux
Caso precise fazer uma desinstalao, faa-a como usurio root. Os exemplos a seguir base utilizam a extenso CS do Servidor Classic, mas so vlidos tambm para o Superserver, substituindo-se o CS pelo SS. Para pacotes rpm: $rpm -e FirebirdCS-1.5.0 or para instalaes .tar.gz: $/opt/firebird/bin/uninstall.sh

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 62

Instalao do Firebird Classic & SuperServer no Solaris 2.7 Sparc


No est atualmente disponvel. Por favor, consulte as Notas da Verso 1 como uma referncia para instalaes 1.5.

Instalao do Firebird Classic no MacOS X / Darwin


No est atualmente disponvel. Por favor, consulte as Notas da Verso 1 como uma referncia para instalaes 1.5.

Build ou Instalao do Firebird no FreeBSD


No est atualmente disponvel. Por favor, consulte as Notas da Verso 1 como uma referncia para instalaes 1.5.

Configurando a porta de servio no cliente e no servidor


Por padro um servidor Firebird observa a porta 3050 por requisies de conexo de clientes. Ela registrada com o nome de gds_db. A boa nova que, se voc quiser manter estes padres voc no precisar fazer nada, quer no servidor ou nos clientes para configurar a porta de servio. Voc pode optar por uma porta diferente, por um nome de servio diferente ou alterar ambos. Voc pode precisar fazer isto se 3050 for requerido por um outro servio, por exemplo, um servio concorrente gds_db configurado para outra verso de servidor Firebird ou InterBase. H diversos meios para se modificar os valores padres. Tanto o servidor como clientes precisam ser configurados para se alterar o nome ou a porta de servio, ou ambos, atravs de um dos seguintes mtodos: 0 1 2 3 4 Na string de conexo do cliente. No comando para iniciar o executvel do servidor. Ativando os parmetros RemoteServicePort ou RemoteServiceName no firebird.conf (V.1.5 em diante) No daemon de configurao (para Classic em sistemas POSIX) Atravs de uma entrada no arquivo de servios.

Antes de examinar cada uma destas tcnicas, ser til examinarmos a lgica utilizada pelo servidor para determinar a porta que ser observada e pelo cliente para definir a porta que ser utilizada para o envio das suas requisies.

Como o servidor determina a porta observada


O executvel do servidor possui um parmetro de linha opcional (-p) que pode indicar ou o nmero da porta que ser observada ou o nome do servio da porta que ser observada. Neste ponto, se o parmetro estiver presente, quer a porta 3050, quer o nome do servio (gds_db) ser substitudo pelo argumento fornecido atravs da opo p. Depois, ou inicialmente, se no for usada a opo p, o servidor verifica no firebird.conf os parmetros RemoteServiceName e RemoteServicePort:

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 63

Se ambos estiverem comentados pelo marcador "#" ento assumido o valor padro e nenhuma alterao ocorrer. Qualquer argumento recebido atravs da opo -p permanece e valores no fornecidos permanecem com o valor padro. Se RemoteServiceName tiver sido ativado, mas no RemoteServicePort, ento o nome da porta de servio ser substitudo, somente se ele j no tiver sido alterado anteriormente pela opo p. Se RemoteServicePort foi ativado, mas no RemoteServiceName, ento o nmero da porta ser substitudo, somente se ele j no tiver sido alterado previamente pela opo p. Se ambos RemoteServicePort e RemoteServiceName foram ativados, ento RemoteServiceName tem precedncia, se j no houve alterao prvia atravs do argumento p. Se j houve modificao prvia, o valor de RemoteServiceName ignorado e o valor de RemoteServicePort substitui 3050. Neste ponto, se tiver havido substituio, quer do nome do servio, quer do nmero da porta, ambas as verses do servidor, v. 1.0 e v.1.5, executaro uma verificao do arquivo services para procurar uma entrada com a combinao correta de nome de servio e nmero de porta. Caso a combinao seja encontrada tudo estar perfeito. Se no, se o nome do servio no for gds_db uma exceo ocorrer e o servidor interromper sua partida. Se gds_db for o nome da porta de servio e nenhuma outra porta puder ser relacionada ao servio, ele ser automaticamente mapeado para 3050.

Se o nome padro do servio for modificado, voc ter que adicionar uma entrada no arquivo de Servios veja o tpico mais a frente, Configurando o arquivo de servios.

Usando a opo de substituio p


Note que esta opo j estava disponvel no Firebird 1.0.x tambm, mas no tinha sido ainda documentada. Iniciar o servidor com o parmetro opcional p permite substituir ou o nmero padro da porta (3050) ou o nome padro do servio (gds_db) que o servidor utiliza para observar as requisies de conexo. O comando permite substituir um deles, mas no ambos. A partir da verso Firebird 1.5 voc poder combinar a opo p com configuraes do firebird.conf para possibilitar a alterao tanto do nmero da porta quanto do nome do servio. Syntax for TCP/IP server-command <other switches> -p port-number | service-name Por exemplo, para iniciar o Superserver como uma aplicao e modificar o nome do servio de gds_db para fb_db: fbserver -a -p fb_db Ou, para alterar a porta de 3050 para 3051: fbserver -a -p 3051 Syntax for WNet redirection

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 64

Em uma rede WNet, substitua a sintaxe do argumento p acima pela seguinte sintaxe barra-barraponto-arroba": fbserver -a -p \\.@fb_db ou fbserver -a -p \\.@3051

Classic no POSIX: o daemon inetd ou xinetd Assim como o servidor Firebird Classic em Linux ou UNIX, o daemon inetd ou xinetd configurado para observar na porta padro e para transmitir atravs do nome de servio padro. O script de instalao registrar a notao apropriada no arquivo de configurao /etc/inetd.conf ou /etc/xinetd.conf. Voc poder alterar a configurao atual, se necessrio. A seguir, um exemplo do que voc encontrar no arquivo xinetd.conf ou inetd.conf aps instalar um servidor Firebird Classic no Linux: # default: on # description: FirebirdSQL server # service gds_db { flags = REUSE KEEPALIVE socket_type = stream wait = no user = root # user = @FBRunUser@ log_on_success += USERID log_on_failure += USERID server = /opt/firebird/bin/fb_inet_server disable = no } Caso voc configure a porta de servio para valores diferentes dos padres, voc precisar alterar xinetd.conf ou inetd.conf de acordo. Reinicie xinetd (ou inetd) com kill -HUP para assegurar que o daemon use a nova configurao. NOTA Requisies de conexo falharo se ambos xinetd (ou inetd) e fbserver (ou ibserver) tentarem observar a mesma porta. Se a mquina host possuir esta configurao ambgua, ser necessrio configurar os parmetros para que cada servidor tenha a sua prpria porta de servio.

Usando um parmetro do arquivo de configurao


Voc pode configurar tanto RemoteServiceName como RemoteServicePort no firebird.conf para modificar o nmero da porta padro (3050) ou o nome padro do servio da porta (gds_db) que o servidor usa para aguardar requisies de conexo. O servidor usar um parmetro RemoteService* , mas no ambos. Caso voc configure ambos, RemoteServicePort ser ignorado em todos os casos, exceto quando o servidor for iniciado atravs de um comando que inclua a opo p indicando a modificao do nome do servio. Assim, voc pode utilizar a opo p e o parmetro RemoteService* , em combinao, para alterar tanto o nmero da porta quanto o nome do servio.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 65

Se o valor padro do nome do servio for alterado, ento ser preciso fazer uma indicao no arquivo de Servios. CUIDADO! Se voc ativar RemoteServiceName ou RemoteServicePort, mas mantiver os valores padres inalterados, mesmo assim eles sero tratados como modificados. Ento, ser necessrio fazer uma notificao explcita no arquivo de servios com as configuraes padres de porta.

Configurando o cliente para que ele encontre a porta de servio


Se voc configurar o seu servidor com os valores padres (servio gds_db observando na porta 3050) nenhuma configurao adicional ser requerida. Se o servidor estiver aguardando em uma porta diferente ou usando um nome diferente de servio, a aplicao cliente e / ou a mquina onde ele executado precisaro de alguma ativao de parmetros para ajudar a biblioteca cliente do firebird a encontrar a porta que est sendo utilizada. A string de conexo utilizada pelo cliente pode incluir informao sobre a porta do servidor observada. O cliente Firebird 1.5 pode opcionalmente usar uma cpia local do firebird.conf. Pode ainda ser preciso fazer algumas alteraes no arquivo de servios do cliente.

Usando a string de conexo


Se apenas o nmero da porta tiver sido alterado, inclua ento o novo nmero da porta ou o nome do servio na string de conexo. Isto funcionar com todas as verses do Firebird. Sintaxe para conexes TCP/IP Para se conectar a um banco de dados em um servidor chamado Alice, que est transmitindo na porta 3050, e com o nome servio fb_db, a string de conexo deveria ser: para POSIX: alice/fb_db:/data/teaparty.fdb Ou, se o nome do servio for gds_db e o nmero da porta for 3051: alice/3051:/data/teaparty.fdb Para Windows: alice/3051:D:\data\teaparty.fdb alice/fb_db:D:\data\teaparty.fdb Note que o separador entre o nome do servidor e a porta uma barra invertida e no dois pontos. Os dois pontos antes do caminho fsico ainda so requeridos. Sintaxe para conexes WNet Em uma rede WNet, use a notao estilo UNC: \\alice@3051\d:\teaparty.fdb ou \\alice@fb_db\d:\teaparty.fdb Se o nmero da porta do servio ou o nome do servio tiver sido modificado, voc precisar registrar a alterao no arquivo de servios.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 66

Usando a sintaxe de portas com alias de banco de dados.


Para conectar-se atravs de uma porta no padro, utilizando o alias de um banco de dados, afixe o nmero da porta ou servio ao nome do servidor, e no ao alias. Por exemplo, suponha que o alias do banco esteja definido no aliases.conf como: rabbit = /data/teaparty.fdb A string de conexo da sua aplicao com o servidor 'alice' deveria ser: alice/fb_db:rabbit or alice/3051:rabbit

Usando cpias do firebird.conf


A partir da verso do Firebird 1.5, voc poder manter opcionalmente uma cpia do firebird.conf do lado do cliente, tambm no diretrio raiz da instalao, e configurar o RemoteServiceName ou o RemoteServicePort para ajudar o cliente a localizar a porta do servidor.
!

Voc pode configurar um dos dois parmetros para complementar a outra configurao j alterada pela string de conexo; ou para substituir apenas o RemoteServiceName ou o RemoteServicePort sem utilizar a string de conexo para isto. Se voc preferir evitar informar o nome do servio ou o nmero da porta na string de conexo e o servidor estiver usando valores no padres para ambas as configuraes, voc poder configurar tanto RemoteServiceName como RemoteServicePort. Voc deveria usar esta tcnica caso a sua aplicao cliente precise manter a capacidade de se conectar com servidores Interbase ou Firebird.

Localizao de componentes Firebird nos clientes


Quando voc baseia uma aplicao no uso do firebird.conf em mquinas clientes, importante que a biblioteca cliente saiba onde encontrar este arquivo. Voc precisar definir uma pasta Raiz de instalao do Firebird e informar o sistema a sua localizao. Use a varivel de ambiente FIREBIRD para fazer isto. Alternativamente, os clientes do windows podem usar a chave de Registro do Firebird. Com uma configurao correta de cliente, voc poder tambm utilizar uma instncia local do arquivo de mensagens.

Configurando o arquivo de servios


Voc no precisa modificar a configurao da porta de servio se o seu Firebird ou os clientes usarem os valores padres de instalao, gds_db na porta 3050. Se gds_db for o nome do servio e ele no puder ser relaciona a qualquer outra porta, a 3050 ser mapeada automaticamente. Se voc estiver configurando a porta de servio para usar um nmero ou nome diferente, tanto o servidor quando os clientes devero ser explicitamente atualizados para refletir a alterao da configurao. Tanto em Linux quanto em Windows, esta informao armazenada no arquivo de servios.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 67

Localizando o arquivo de servios


! ! !

No Windows NT/2000/XP/S2003, o arquivo C:\windows\system32\drivers\etc\services. No Windows 95/98/ME, ele C:\windows\services. No Linux/UNIX /etc/services.

A notao para um servio deve parecer com esta: gds_db 3050/tcp # Firebird Server 1.5 Abra o arquivo usando um editor de textos e adicione uma linha ou edite a notao gds_db existente como segue:
!

Para um servidor ou cliente Firebird 1.0.x, altere ou o nome do servio ou o nmero da porta para configurar como o servidor ir ser iniciado.

Para um servidor Firebird 1.5 ou mais recente, edite ou adicione uma linha, conforme requerido. Se houver um servidor Firebird 1.0 ou InterBase instalado no mesmo computador, mantenha as entradas requeridas por eles e adicione uma nova entrada para definir como o servidor Firebird 1.5 iniciar.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 68

Informaes Adicionais

Informao adicional sobre o Firebird pode ser encontrada em: http://firebird.sourceforge.net/ Ou nos sites afiliados: http://firebirdsql.org/ http://www.ibphoenix.com/ http://www.cvalde.com/ Se estiver interessado em participar do desenvolvimento do Firebird, ou se quiser iniciar uma discusso sobre alguma possvel falha, participe do grupo de desenvolvimento firebird-devel. Para inscrever-se, envie uma mensagem em branco para: mailto:firebird-devel-request@lists.sourceforge.net Com a palavra 'subscribe' no campo do assunto.

Por favor, no utilize a lista firebird-devel para postar questes de suporte.


Para suporte tcnico, participe do grupo de discusso firebird-support em : http://www.yahoogroups.com/groups/firebird-support Para suporte especfico do InterClient e desenvolvimento e suporte em Java, use o grupo: http://www.yahoogroups.com/groups/Firebird-Java O grupo firebird-support trata questes tcnicas sobre o Firebird e o InterBase(R). Por favor, leve os problemas e dvidas envolvendo Delphi ou outras linguagens de programao para os fruns apropriados. A comunidade open-source mantm outros grupos de discusso sobre diferentes aspectos do desenvolvimento do Firebird. Por favor, verifique na seo Mail Lists e Newsgroups no Site da Comunidade Firebird. Os grupos de discusso de desenvolvimento, a lista geral da comunidade, assim como outras listas de interesse para programadores Firebird e InterBase, esto espelhadas no servidor de Notcias em : news://news.atkin.com/ Suporte Pago ao Firebird a nvel mundial pode ser obtido atravs do IBPhoenix (os endereos de contato e os valores esto disponveis em http://www.ibphoenix.com/ ). Alguns membros da equipe Firebird tambm esto disponveis para suporte ou consultoria. Por favor, contate-os diretamente. Servios de Recuperao de Bases de Dados em Firebird ou InterBase tambm podem ser prestados pelo IBPhoenix. Para fazer uma anlise e tentar uma possvel recuperao de base de dados corrompida, voc pode utilizar o IBSurgeon, que pode ser encontrado em IBase.ru (http://www.ibase.ru/) IBase.ru tambm prestas servios de recuperao na Rssia e Europa.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 69

Ofertas / Pedidos de patrocnio do desenvolvimento do Firebird devem ser enviados diretamente para a Fundao FirebirdSQL Inc. Envie um email para foundation@firebirdsql.org. Se preferir o contato com os administradores do projeto Firebird envie um email para firebirds@users.sourceforge.net. Discusso Geral sobre melhorias do FB podem ser acessadas no grupo Firebird-priorities: http://www.yahoogroups.com/community/Firebird-priorities IB-Architect ( http://www.yahoogroups.com/community/ib-architect )dever ser utilizado APENAS para discusses tcnicas de design. Questes de Suporte/converso no devero ser tratadas aqui.

Ferramentas e Drivers
Programas Desktop Clientes de Bases de Dados Diversas opes excelentes de ferramentas de Administrao Grficas para o Firebird esto relacionadas na pgina Contributed Downloads em http://www.ibphoenix.com/. Algumas so Open Source, algumas so gratuitas e outras so produtos comerciais reconhecidos. O programa IBConsole da Borland no recomendado como cliente de administrao para o Firebird 1.5. Drivers e Componentes JAVA: O projeto de driver Jaybird JDBC desenvolvido ativamente no mbito do projeto Firebird. Foram lanados inicialmente um driver Tipo 4 JDBC/JCA e um driver beta Tipo 2. O Cdigo fonte e os executveis podem ser obtidos na pgina de verses do Firebird : http://sourceforge.net/projet/showfiles.php?group_id=9028 Para suporte e participao no desenvolvimento e testes, inscreva-se no frum Firebird-java em http://www.yahoogroups.com/community/firebird-java .NET: Firebird possui um projeto driver .NET em andamento. Cdigo fonte e binrios podero ser encontrados na pgina de verses do Firebird em : http://sourceforge.net/projet/showfiles.php?group_id=9028 Para suporte e participao no desenvolvimento e testes, inscreva-se no frum Firebird .NET provider : http://lists.sourceforge.net/lists/listinfo/firebird-net-provider Delphi e C++Builder : Os usurios tem a seu dispor duas poderosas alternativas de acesso direto a API do Firebird, ambas com bom suporte prprio e da comunidade de programadores. So elas :
! !

IB Objets de Jason Wharton em http://www.ibobjets.com/ FIBPLus em http://www.devrace.com/

C++ : a biblioteca de acesso C++ gratuita 'IBPP' (http://www.ibpp.org/), licena MPL, hospedada no sourceforge.net, completamente portvel para Win32 e Linux e provavelmente outras plataformas POSIX. Ela ser til quando se desejr ter um acesso de baixo nvel a API, mas com um nvel de abstrao C++ independente de qualquer ambiente particular de desenvolvimento.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 70

ODBC: A lista de drivers ODBC pode ser encontrada na pgina Contributed Downloads em http://www.ibphoenix.com/. O espao para discusso do desenvolvimento do driver ODBC/JDBC Open Source o frum : http://lists.sourceforge.net/lists/listinfo/firebird-odbc-devel PHP: Um grupo est trabalhando para converter a antiga extenso existente do Interbase para o padro atual do Firebird. Para informaes sobre este projeto, inscreva-se no frum Firebird-PHP em : http://www.yahoogroups.com/community/firebird-php PYTHON: KInterbasDB uma extenso Python que implementa suporte ao Firebird com compatibilidade padro Python Database API 2.0. Suporte completo e nativo da API do cliente Firebird; com verses estveis e em desenvolvimento ativo. Licena Open Source BSD. Verses e informaes podem ser encontradas em : http://kinterbasdb.sourceforge.net/

Documentao
A documentao do InterBase v 6.0 tambm se aplica a esta verso do Firebird. Uma verso beta dos manuais do Interbase(tm) 6 em formato Adobe Acrobat pode ser encontrada em : ftp://ftpc.inprise.com/pub/interbase/techpubs/ib_60_doc.zip Um ndice estruturado da Documentao mantido no site da comunidade Firebird em : http://firebird.sourceforge.net/index.php?op=doc um trabalho ainda em curso e todas as contribuies so bem vindas envie uma mensagem para firebird-docs@lists.sourceforge.net Alguns guias de instalao e alguns HowTos podem ser obtidos na rea de documentao em : http://www.firebirdsql.org/ Ou mais diretamente em : http://sourceforge.net/projets/firebird O principal repositrio para questes tcnicas e de utilizao o site da IBPhoenix : http://www.ibphoenix.com/ IB Phoenix tambm disponibiliza assinaturas de CDs atualizados freqentemente (verses avulsas tambm esto disponveis) contendo os manuais publicados por eles Using Firebird e The Firebird Reference Guide. Alguma documentao adicional pode ser obtida diretamente na rea tcnica do site da Borland: http://www.borland.com/techpubs/interbase/

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 71

Correes e Adies desde a verso 1.0


Tracker # (sem #) (sem #) (sem #) (sem #) (sem #) Melhoria Descrio
Corrigidas algumas inconsistncias nos nomes dos Sets de caracteres. GSTAT caa com algumas combinaes de opes. Corrigido o tratamento de SAVEPOINT em BREAK|LEAVE/EXIT. Otimizador alterado para optar por ndices simples no lugar de compostos e para utilizar ndices nicos com especificao idnticas. Melhoria nas ferramentas de instalao do Win32, instsvc.exe e instreg.exe. Nmero mximo de (DB_PAGE_SIZE/16)-2, ndices por tabela passou de 64 para

Contribuidor
P. Jacobi D. Yemanov D. Yemanov A. Brinkman

O. Mascia

A. Harrison, transportado para 1.5 por N.Samofatov

721792 775003 774987 (sem #) (sem #) 736318 (sem #) Melhoria Melhoria

Uma conexo aberta for muito tempo provocava leak de memria no dispositivo do kernel do Sistema Operacional UDF log(x, y) devolvia log(y, x).

N. Samofatov

P. Vinkenoog, N. Samofatov P. Vinkenoog, N. Samofatov A. Peshkoff

UDFs ltrim('') e rtrim('') devolviam NULL; rtrim omitia o 1 caractere.

Resolvida a queda do servidor causado pela perda do contexto da transao. Resolvida a queda do servidor para qualquer combinao de sub-select e between. "<valor> STARTING WITH <campo>" falhava quando usado com ndices. Conflitos de Lock no existentes ocorriam aps a execuo de triggers pr (update/delete). Definio de INSERTING/UPDATING/DELETING reservadas. como palavras no

A. Peshkoff

D. Yemanov A. Peshkoff

N. Samofatov

Adicionadas novas (mais especficas) mensagens de erro para algumas das alteraes da verso 1.5.

D. Yemanov, A. Brinkman, A. Peshkoff A. Peshkoff

Correo de Segurana

Adicionada opo login a instsvc.exe para permitir a instalao do servio FB com uma conta diferente de localsystem.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 72

Tracker # Melhoria (sem #) Melhoria (sem #) (sem #) 745090 e outras questes da instalao RC2 (sem #)

Descrio
Reintroduzido o trimming de campos VARCHAR nos protocolos remotos. Queda aleatria do servidor quando eram preparadas queries de grande dimenso. Aperfeioamento da Configurao fazre com que o tratamento dos caminhos no firebird.conf esteja em conformidade com os do SO. Argumentos de UDF do tipo DATE/TIME (dialeto 3) incorretos. Possvel violao de integridade referencial.

Contribuidor
D. Yemanov D. Yemanov

A. Peshkoff

Oleg Loa Vlad Horsun, D. Yemanov Erik S. LaBianca, N. Samofatov

Problema com permisses para firebird.conf (SF #745090). Gerao de aliases.conf na instalao; uso de rpmbuild para criar os pacotes Linux. Permitir fcil ajuste de LockSemCount em plataformas POSIX. Sem necessidade de usar gds_drop ou reiniciar a mquina para que as modificaes sejam utilizadas. Definio de FIRST/SKIP como palavras no reservadas. Referncia de conexo errada aps exceo em PSQL. Declaraes BREAK/LEAVE e EXIT esto agora disponveis para uso em triggers. Possvel corrupo de ndices durante a execuo de garbage collection.

N. Samofatov

Melhoria (sem #) (sem #) (sem #) (sem #)

N. Samofatov A. Peshkoff D. Yemanov

Vlad Horsun, D. Yemanov N. Samofatov

Resolvidos problemas com tratamento de tabelas temporrias: 1) Falha de segurana em todas as plataformas POSIX exceto FREEBSD/OPENBSD relacionada com o uso de mktemp (possveis ataques DoS ou aumento de privilgios)

S eram gerados 27 nomes de tabelas nicos em win32 (o que poderia provocar comportamentos inesperados nas verses SS).

(sem #) (sem #)

Alteraes no gestor de eventos: desativado o uso de portas definitivas nas verses CS devido a problemas conhecidos. Permitir o uso de funes agregadas de diferentes contextos dentro de outras funes agregadas. Exemplo: SELECT MAX((SELECT RDB$RELATIONS COUNT(*) FROM RDB$RELATIONS)) FROM

D. Yemanov

A. Brinkman

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 73

Tracker # (sem #) (sem #) (sem #) (sem #) (sem #)

Descrio
Possveis quedas na desconexo quando era usada a notificao de eventos. Modificaes no Gerenciador de Servios: funcionalidades de GSTAT / GSEC no esto disponveis via Servios API na win32 CS (at v1.6). Estatsticas erradas de registro so reportadas quando a operao falha por algum motivo. stdin/stdout no pode ser usado para redirecionar a E/S para o console, na verso win32 do GBAK. Redimensionamento da tabela de locks com problemas em CS. Resolvido o "lock manager out of room" (Win32 CS 1.5 RC1) ou quedas (possvel em todas as outras verses CS do Interbase/Firebird). Aperfeioamento do INTL: permitir que a funo UPPER funcione para WIN1251 set de caracteres sem collations explcitos. Possvel corrupo da base de dados quando era modificado/apagado em um pr trigger o prprio registro que o disparou. Tamanho do Buffer excedido na chamada a isc_database_info(). Modificao no Gerenciador de Configurao: O servidor fecha na ausncia /erro do firebird.conf registrando erro no log de sistema. Correo nos Servios API: ativadas as estatsticas dos Servios API para plataformas POSIX verso CS. Modificaes no parser. 1) 2) ROWS_AFFECTED foi renomeado para ROW_COUNT CONNECTION_ID/TRANSACTION_ID foi renomeado CURRENT_CONNECTION/CURRENT_TRANSACTION para

Contribuidor
D. Yemanov

D. Yemanov

D. Yemanov

A. Peshkoff

N. Samofatov

Melhoria
BUGCHECK(291)

N. Samofatov, D. Yemanov A. Peshkoff

(sem #) (sem #) (sem #) (sem #)

Oleg Loa A. Peshkoff

N. Samofatov

D. Yemanov

3) Alguns dos novos smbolos foram definidos como no-reservados

(sem #) (sem #) (sem #)

Correo nos Servios API: servios API parcialmente disponibilizados para as verses CS win32. Envio incorreto de eventos (uso desnecessrio de pacotes OOB).

D. Yemanov

Jim Starkey, Paul Reeves N. Samofatov

Melhoria no tratamento de bloqueios : os conflitos so agora detectados e reportados to logo sejam recebidas todas as notificaes dos processos em bloqueio, i.., quase instantaneamente na maior parte dos casos. O Servidor caa em algumas operaes de Servios API.

(sem #)

A. Brinkman

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 74

Tracker # (sem #) (sem #)

Descrio
Recursos avanados de segurana : implementado o acesso configurvel a bases de dados, tabelas externas e bibliotecas UDF. Resolvidas algumas perdas de memria/recursos.

Contribuidor
A. Peshkoff

Mike Nordell, A. Peshkoff, N. Samofatov,D. Yemanov D. Yemanov D. Yemanov

(sem #) 213460, 678718 (sem #) (sem #)

Tamanho de Buffer excedido com arrays multidimensionais. Diversos problemas com eventos em servidores com vrios endereos IP. NOTA: Agora possvel configurar uma determinada porta para o processamento de eventos. Resolvidas algumas perdas de recursos.

Mike Nordell, A. Peshkoff N. Samofatov

Corrigidos os Servios API: ativados os servios API para plataformas POSIX nas verses CS. Notas: 1. Modificaes necessrias no Win32 CS ainda no esto prontas. 2. Servio de Backup/Restore foi corrigido, testado e dever funcionar. 3. Validao de Bancos foi parcialmente corrigida e poder ser usada. 4. provvel que os outros servios ainda no funcionaro com o CS.

(sem #) (sem #)

Melhorias SQL: permitir Nulos em unique constraints e ndices (especificao SQL-99). Melhoria de Desempenho: o log de alteraes VIO agora usa uma rvore B+ para armazenar os dados de registros dos SAVEPOINT. Melhora do desempenho ao se efetuar mltiplas modificaes de registros numa nica transao (na ordem de 2-3X para 100.000 registros). Corrupo da Base de Dados aps o recuo at um SAVEPOINT depois de grande quantidade de operaes DML (que provocasse a liberao do SAVEPOINT da transao) e com registros que tivessem sido modificados antes do SAVEPOINT utilizado e eliminados dentro do SAVEPOINT. Melhorado o EXECUTE STATEMENT. Agora possvel devolver valores a partir do SQL dinmico. Sintaxe: EXECUTE STATEMENT <valor> INTO <lista_variveis>; (um s registro) ou FOR EXECUTE STATEMENT <valor> INTO <lista_var> DO <lista_declaraes>;

D. Yemanov, N. Samofatov N. Samofatov

(sem #)

N. Samofatov

(sem #)

A. Peshkoff

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 75

Tracker # (sem #) (sem #) (sem #) (sem #) (sem #)

Descrio
O servidor ficava preso na desconexo aps modificaes massivas. Melhorias no otimizador : Subselects na clusula SET do UPDATE agora podem usar ndices. Erro "Context already in use" no caso de DISTINCT com subqueries. Melhorias nas capacidades de isc_database_info: lista das transaes atualmente ativas agora acessvel via chamada a isc_database_info. Melhoria de Desempenho: avaliao de expresso booleana parcial. NOTA: o comportamento controlado pela opo "CompleteBooleanEvaluation" do firebird.conf. Por padro 0 (avaliao parcial).

Contribuidor
D. Yemanov A. Brinkman

A. Brinkman N. Samofatov

Mike Nordell

(Beta 2 erro) (sem #) (sem #) (sem #)

Estouro da Pilha Interna durante a preparao de comando.

D. Yemanov, Mike Nordell Mike Nordell

Melhoria de Desempenho para a arquitetura IA32 CPU: aumento de velocidade para as operaes com ndices. Mudana nos triggers universais: permitido o acesso aos contextos (OLD e NEW) nos triggers universais. Melhorias no Otimizador: quando um n-semelhante e outros ns (geq, leq, between...) esto disponveis para a obteno por ndice, ento usado o n-semelhante em vez dos outros. Longas demoras durante a conexo/desconexo no WinXP. Limpeza genrica: remoo de cdigo no utilizado.

D. Yemanov

A. Brinkman

(sem #) (sem #)

A. Brinkman Blas Rodriguez Somoza, Erik Kunze A. Brinkman

523589

A View afetava o resultado de um query. Comentrio: O problema era que RSE's (dentro de um view) no eram sinalizados como variantes.

(sem #)

Modificado o comportamento do modo forced writes: agora, se FW=off (desativado), a freqncia com que as dirty pages so escritas no disco pode ser configurada (permite maior confiabilidade quando o FW est desativado nas plataformas Win32). A base de dados de segurana foi renomeada para security.fdb. Novo arquivo de configurao : firebird.conf foi finalmente publicado. Novas funes definidas pelo usurio LPAD e RPAD adicionadas na biblioteca IB_UDF.

Blas Rodriguez Somoza

(sem #) (sem #) (sem #)

D. Yemanov D. Yemanov Juan Guerrero

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 76

Tracker # (sem #) (sem #)

Descrio
Algumas vezes GFIX no permitia usar as opes "-user" e "-password" (erro "incompatible swiches"). Cache da segurana de conexo : banco de dados de segurana agora carregado na memria diminuindo o tempo das conexes subseqentes ao servidor de dados. 1. 2. A Memria usada pelo servidor foi reduzida. E/S externa direta quando no existe memria disponvel para ordenao.

Contribuidor
D. Yemanov

D. Yemanov

Melhorias

D. Yemanov

Maior quantidade de streams e predicados suportado pelo otimizador.

508594 (sem #)

LEFT JOIN com VIEWs: simples LEFT JOIN num VIEW com apenas uma clusula ON no usava um ndice mesmo quando isso era possvel. Novos sets de caracteres : DOS737, DOS775, DOS858, DOS862, DOS864, DOS866, DOS869, WIN1255, WIN1256, WIN1257, ISO8859_3, ISO8859_4, ISO8859_5, ISO8859_6, ISO8859_7, ISO8859_8, ISO8859_9, ISO8859_13. NOTA: Collations para os sets acima no esto ainda disponveis.

A. Brinkman

Blas Rodriguez Somoza

(sem #) (sem #)

Modificaes em CREATE VIEW: proibida a sub clusula PLAN. Alterado o tratamento de agregados - introduzida a compatibilidade com agregados anteriores. O campo mais interno dentro de uma funo agregada determina o contexto ao qual o agregado pertence. Melhorias no otimizador: melhores otimizaes de queries JOIN "complexas" (LEFT JOIN, views, SPs, etc). As maiores perdas de memria foram resolvidas. Novas funes API: funes IB7-compliant retornam a verso da biblioteca cliente - isc_get_client_version(), isc_get_client_major_version(), isc_get_client_minor_version() Melhorias no Sort/merge: merging (planos SORT MERGE) agora feito em memria pelo mdulo de ordenao. Alteraes no build Win32: 1. Alterados os nomes dos objetos USER32 para permitir executar o servidor simultaneamente ao IB/FB1. Nome do Mapa para o protocolo local (IPC) foi alterado. Assim, a biblioteca cliente da v1.5 no mais compatvel com as verses anteriores via IPC. Todos os nomes de protocolos de transporte (porta e servio INET,

D. Yemanov A. Brinkman

(sem #) (alpha 5 erro) (sem #)

A. Brinkman

D. Yemanov D. Yemanov

(sem #) (sem #)

D. Yemanov

D. Yemanov

2.

3.

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 77

pipe WNET, mapa IPC) so agora configurveis via firebird.conf.

Tracker # (sem #) (sem #) Melhoria

Descrio
Novo gerenciador de memria interno foi modificado para permitir um melhor desempenho. RDB$FIELD_LENGTH para views que continham concatenaes de campos long CHAR/VARCHAR, assumia valores incorretos. Melhoria nos Triggers: adicionadas variveis de ao em tempo de execuo (predicados INSERTING/UPDATING/DELETING). Exemplo: if (INSERTING) then new.OPER_TYPE = 'I'; else new.OPER_TYPE = 'U';

Contribuidor
N. Samofatov

D. Yemanov

D. Yemanov

(sem #) 221921 213859 Melhoria (sem #) (sem #) Melhoria (sem #) 625899 (sem #) 521952 (sem #) (sem #)

Os cursors (clusula WHERE CURRENT OF) no podiam ser usados em triggers. ORDER BY no tinha qualquer efeito. Subquery estabelecida por um 'IN'. Permitido uso de expresses arbitrrias na clusula ORDER BY. O servidor caa quando eram usadas UNIONS numa VIEW e essa VIEW era usada numa clusula WHERE dentro de um subquery. Limpeza genrica de cdigo: estruturas dentro de Y-valve.

D. Yemanov

A. Brinkman A. Brinkman N. Samofatov A. Brinkman

A. Peshkoff, N. Samofatov D. Yemanov

Comentrios de Linha-nica (--) so agora permitidos em qualquer posio da declarao SQL. "Request sycnhronization error" com a declarao BREAK. Bugcheck 291. Alterao PSQL: EXECUTE VARCHAR foi renomeado para EXECUTE STATEMENT. No current record for fetch operation-nenhum registro encontrado para leitura. QLI no compreendia o tipo de dados BIGINT. Tamanho de variveis de texto dentro de procedures/triggers no era copiado para a estrutura do descritor.

D. Yemanov A. Peshkoff A. Peshkoff

A. Brinkman

D. Yemanov A. Brinkman

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 78

Tracker # (sem #)

Descrio
Alteraes FIRST/SKIP e ORDER BY -1. 2. 3. Implementada a clusula ORDER BY em subqueries. Proibido FIRST/SKIP para views. Permitido o valor zero como argumento vlido para FIRST.

Contribuidor
D. Yemanov

(sem #) (sem #)

Buffer excedido (MAXPATHLEN) e nome local da funo diretrio reescrito. Foi modificado o mapeamento de parmetros do SQLDA para ser consistente com a ordem e nmero de parmetros da string SQL de origem. NOTA: Voc pode ativar o comportamento anterior de mapeamento (por razes de compatibilidade) usando o parmetro do gerenciador de configurao "OldParameterOrdering".

Erik Kunze

N. Samofatov

Melhoria (sem #) (sem #) (sem #)

Melhorias no Otimizador: deixar que os subqueries tambm usem ndices quando o seu parente for uma stored procedure. Removida a limitao de tamanho do pedido. Tratamento de Nulls first/last e collation na clusula "order by" das unions. Limpeza genrica de cdigo; renomeaes, novas safe macros, suporte para mingw.

A. Brinkman

D. Yemanov N. Samofatov

Erik Kunze, Ignacio J. Ortega, D. Sibiryakov N. Samofatov

(sem #) Melhoria (sem #) 623992 (sem #) Melhoria

Implementao de bloqueio explcito de registro finalizada. Dever estar estvel e consistente. Melhoria no Otimizador: melhor tratamento dos ns AND dentro dos ns OR. Excees dentro de um ciclo for/while em triggers no eram tratados corretamente. Duplas barras na string de conexo.

A. Brinkman

A. Peshkoff

Paul Reeves, Mark ODonohue A. Peshkoff D. Yemanov

Deadlock durante algumas operaes de base de dados. Melhoria no Otimizador: se alguns ndices com grande diferena de seletividade puderem ser usados para obteno de dados, apenas os melhores sero usados enquanto os outros sero ignorados. Problema com identificadores com aspas em expresses de plan.

(sem #)

N. Samofatov

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 79

Tracker # Melhoria (sem #) (sem #) (sem #) Melhoria Melhoria Melhoria (sem #) (sem #)

Descrio
A arquitectura CS agora suportada no Win32, mas ainda no pode ser considerada estvel. Assim, toda a informao ser bem vinda. As Stored procedures no so mais recompiladas antes de serem apagadas. Novo collation para WIN1251 charset: WIN1251_UA para a linguagem Ucraniana e Russa. Alterao na biblioteca cliente: as rotinas API j no so mais exportadas por ordinals. Novo gerenciador de configurao: ativada a mesma configurao baseada em arquivo texto para todas as plataformas suportadas. Melhoria no Otimizador: foi acrescentado melhor suporte para usar ndices com "OR". E obter o melhor ndice composto paras ns "AND". Adicionado o suporte para tratamento de SAVEPOINT explcito em DSQL. Limpeza de Protocolo: O protocolo de rede IPX/SPX no mais suportado. Limpeza de plataformas obsoletas: algumas plataformas j no eram suportadas pelo presente cdigo. DELTA, IMP, DG_X86, M88K, UNIXWARE, Ultrix, NeXT, ALPHA_NT, DGUX, MPE/XL, DecOSF, SGI, HP700, Netware, MSDOS, SUN3_3

Contribuidor
D. Yemanov

N. Samofatov

D. Yemanov

D. Yemanov

D. Yemanov

A. Brinkman

N. Samofatov Sean Leyne

Sean Leyne

Melhoria Melhoria Melhoria

Melhoria no Otimizador: adicionado o suporte para a deteco do uso de ndice com sub-selects em select agregado. Melhoria no gerenciador de processos para Win32 SS: agora o servidor dever ser mais rpido na resposta sob carga intensa. Adicionado suporte para bloqueio explcito de registro. O comportamento do Wait nos modos de transao isc_tpb_wait ainda no est estvel. Sintaxe: SELECT <...> [FOR UPDATE [OF col [, col ...]] [WITH LOCK]]

A. Brinkman

A. Peshkoff

N. Samofatov

558364 (sem #) (sem #)

Os Triggers fracassavam na tentativa de compilar se o PLAN fosse usado. Uma Transao Distribuda (2PC) no podia ser rolled back devido a erros de rede. Limpeza genrica: ISC_STATUS_LENGTH e macros MAXPATHLEN.

Ignacio J. Ortega Vlad Horsun, Erik Kunze Erik Kunze

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 80

Tracker # 496784

Descrio
Quando o otimizador encontra ndices para o LEFT JOIN, comporta-se como o INNER JOIN. Resolvido o problema que fazia com que outer joins complexos produzissem resultados errados. O subtipo BLOB ignorado em domnios de sistemas gerados para campos de expresso em views. Erro de instalao resolvido: instreg.exe no criava o valor de registro "GuardianOptions". Perda de Recursos no tratamento recursivo de procedimentos DDL, o que fazia com que alguns DDL falhassem. Check constraint que use apenas um campo de tabela agora eliminada automaticamente quando este campo eliminado. Novas variveis de sistema ROWS_AFFECTED em PSQL: devolve o nmero de linhas afetadas pela ltimo comando INSERT/UPDATE/DELETE. Para quaisquer outras declaraes alm de INSERT/UPDATE/DELETE, o resultado ser sempre zero.

Contribuidor
N. Samofatov

(sem #) (sem #) (sem #) (sem #) 451927

D. Yemanov

D. Yemanov

N. Samofatov

N. Samofatov

D. Yemanov

446240

Mensagens de exceo dinmicas: permitido definir a mensagem que ser exibida na ocorrncia de uma exceo diferente daquela com que a exceo foi criada. Sintaxe: EXCEPTION nome [valor];

D. Yemanov

547383

Novas variveis de sistema SQLCODE e GDSCODE fornecem acesso ao erro ocorrido dentro de um bloco-WHEN em PSQL. Fora do blocoWHEN, devolve 0 (sucesso). Semntica de reinicializao de Exceo : permite que uma exceo j tratada em PSQL seja relanada num bloco WHEN. Sintaxe: EXCEPTION; Nenhum efeito fora do bloco-WHEN.

D. Yemanov

(no #)

Digitman

(no #) Melhoria Melhoria (no #)

O servidor caa durante o garbage collection sob carga intensa. Compilao de meta dados deferida: resolvido grande nmero de causas do conhecido erro; "objeto em uso". Novo tratamento da ordenao de Nulos: permitir ordenao de Nulos definida pelo usurio. Gstat mostrava valor errado para elemento maxdup.

N. Samofatov N. Samofatov

N. Samofatov

D. Kuzmenko

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 81

Tracker # (no #) 451925

Descrio
usada uma nova chave de registro no win32: SOFTWARE\FirebirdSQL\Firebird. Nomes de ndices de constraints definidos pelo usurio: permitido usar nomes definidos pelo usurio ou o nome da restrio, para ndices que imponham restries. Nova declarao RECREATE VIEW: substitui o par de declaraes DROP VIEW / CREATE VIEW. Sintaxe: RECREATE VIEW nome <definio_view>;

Contribuidor
--

D. Yemanov

Melhoria

D. Yemanov

(no #)

Trigger cujo nome comea por 'RDB$' no pode ser alterado ou eliminado. Arquivos da distribuio foram renomeados de acordo com o nome Firebird. Agora so fbserver, fbclient, firebird.msg, etc. A nova biblioteca cliente a fbclient, e dever ser usada pelos novos projetos baseados no FB. GDS32 apenas aponta para a fbclient e fornecida somente para manter a compatibilidade. Adicionados novos ndices de sistema (RDB$INDEX_41, RDB$INDEX_42, RDB$INDEX_43). Agora a verso do ODS a 10.1.

D. Yemanov

(no #)

Vrios

(Pequeno incremento no ODS ) 451935

D. Yemanov, N. Samofatov

Novo comando CREATE OR ALTER para triggers e stored procedures, permitindo criar ou alterar um objeto da base de dados dependendo da sua existncia prvia. Sintaxe: CREATE OR ALTER nome <definio_objeto>;

D. Yemanov

(no #) (no #)

Apareciam dependncias invlidas na base de dados (tal como DB$34) aps alteraes de meta dados. Declarao de variveis locais aperfeioada : simplificada a sintaxe e possibilidade de declarao e definio das variveis em um mesmo comando. Sintaxe: DECLARE [VARIABLE] nome <tipo_de_varivel> [{'=' | DEFAULT} valor]; Exemplo: DECLARE my_var INTEGER = 123;

D. Yemanov

Claudio Valderrama

(no #)

Desativada a declarao BREAK para triggers (como EXIT) devido a limitaes internas conhecidas.

D. Yemanov

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 82

Tracker # 555839, 546274

Descrio
Agrupamento aperfeioado : permite usar GROUP BY para funes internas e subqueries, bem como para valores posicionais (isto , a posio relativa da coluna, ou seja, o grau da coluna no conjunto de dados retornados). Nova funo interna COALESCE permite que uma coluna possa ser calculada por uma srie de expresses, em que a primeira expresso que resulte em um valor no nulo ser o valor da coluna. Nova funo interna NULLIF para sub-expresses. Retorna NULL se o resultado for igual a um valor especfico, ou o prprio valor da sub expresso. Nova funo interna CASE permite que o resultado de uma coluna possa ser determinado atravs do resultado de uma expresso condicional. Sweep automtico em segundo plano bloqueava. O servidor caa quando estruturas XSQLDA no eram preparadas para todos os parmetros de um comando. PSQL: ativado suporte para blocos BEGIN...END vazios. Resolvida parcialmente uma falha de segurana de meta dados. BigInt arrays no funcionavam. Implementada execute procedure e concatenao de string, visando permitir que qualquer expresso possa ser utilizada como parmetro de SP. Concatenao de caracteres vazios para Agregados. Suporte de Readline (histrico de comandos) para ISQL. Novo tipo de dados, BIGINT, que permite o uso SQL nativo de nmeros inteiros de 64-bit (Apenas no Dialeto 3). Permitir que um Trigger universal seja disparado para diferentes tipos de aes. Novo CONNECTION_ID e TRANSACTION_ID de sistema acessvel em PSQL. Retorna identificador interno apropriado, armazenado na pgina de cabealho da base de dados.

Contribuidor
A. Brinkman

451917

A. Brinkman

451917

A. Brinkman

451917 545725 (no #) (no #) 567931 (no #) 437859

A. Brinkman

A. Peshkoff D. Yemanov

D. Yemanov D. Yemanov Artem Petkevych D. Yemanov

562417 Melhoria 446206 451922 446238, 446243

D. Yemanov M. ODonohue D. Yemanov

D. Yemanov

D. Yemanov

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 83

Tracker # 446180

Descrio
Alias de Base de Dados no servidor: conexo a qualquer base de dados usando um "alias" em vez da localizao fsica da mesma. A lista de apelidos de banco de dados conhecidos armazenada no arquivo aliases.conf localizado na raiz da instalao do servidor. Exemplo: Entrada do alias no arquivo de configurao: minha_base_dados = c:\dbs\my\database.gdb Texto para conexo ao BD na aplicao: localhost:minha_base_dados

Contribuidor
D. Yemanov

(no #) Melhoria

Novo gerenciador de plugin e interface INTL. Ordenao em memria: se o plano SORT for usado numa declarao SQL, a ordenao processada em memria. Se no houver memria disponvel para esta operao, recorre ao mtodo anterior com utilizao de arquivo temporrio. Queda da aplicao na tentativa de extrao de nulo como DATE. Nova extenso da declarao PSQL EXECUTE VARCHAR permite a execuo de declaraes de SQL dinmico em SPs/triggers. (Posteriormente renomeado para EXECUTE STATEMENT). Profunda limpeza e reviso do cdigo.

John Bellardo D. Yemanov

538201 446256

Claudio Valderrama A. Peshkoff

(no #) (no #) (no #) (no #)

Sean Leyne, Erik Kunze John Bellardo Mike Nordell, John Bellardo John Bellardo, M. ODonohue, Erik Kunze Mike Nordell, John Bellardo, M. ODonohue

Novo gerenciador de memria. Nova lgica de tratamento de excees.

Nova configurao de compilao baseada no autoconf.

(no #)

O transporte do cdigo de C para C++.

Equipe de Traduo: Hlcio Sugiyama

v.1.08 Notas da Verso Firebird 1.5

08 fevereiro 2004

Pgina 84

Você também pode gostar