Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
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.
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.
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.
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.
08 fevereiro 2004
Pgina 4
Mdulo Base de Dados de Segurana Arquivo de Mensagens Arquivo de Log Verso de ODS
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.
Binrio do Classic server Gerenciador de lock Classic Controle Superserver Binrio Superserver Arquivo de Configurao Biblioteca Cliente
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
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.
08 fevereiro 2004
Pgina 5
Plataforma Windows
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.
N/A
gds32.dll
ibconfig InterBaseAPI
firebird.conf FirebirdAPI
08 fevereiro 2004
Pgina 6
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
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
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)
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
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));
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 ...;
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)
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}
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).
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).
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
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
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)
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.
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.
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.
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
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
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;
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
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.
08 fevereiro 2004
Pgina 21
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
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
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.
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
08 fevereiro 2004
Pgina 24
Exemplos
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
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
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)
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).
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.
08 fevereiro 2004
Pgina 27
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 ^
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;
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 )
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.
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
08 fevereiro 2004
Pgina 29
! !
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)
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.
08 fevereiro 2004
Pgina 30
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)
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.
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
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 --.
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.
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
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
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.
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)
08 fevereiro 2004
Pgina 34
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.
08 fevereiro 2004
Pgina 35
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.
08 fevereiro 2004
Pgina 36
valor um nmero, um Booleano (1=Verdadeiro, 0=Falso) ou um alfanumrico que define o valor do parmetro.
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
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.
08 fevereiro 2004
Pgina 38
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.
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.
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.
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.
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
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.
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.
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
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
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.
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
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.
08 fevereiro 2004
Pgina 46
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.
08 fevereiro 2004
Pgina 47
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
Alex Peshkoff
Federao Russa
Mike Nordell
Sucia
Espanha
Alemanha U.S.A.
Espanha U.S.A.
Ann Harrison
U.S.A.
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.
Frana Espanha
Konstantin Kuznetsov Olivier Mascia Peter Jacobi Tilo Muetze Paul Vinkenoog
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
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
08 fevereiro 2004
Pgina 50
NOTAS
DE
INSTALAO
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.
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 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
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.
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.
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.
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?
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.
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
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.
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.
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
* 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.
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;
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:
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.
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
08 fevereiro 2004
Pgina 62
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.
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.
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.
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.
08 fevereiro 2004
Pgina 66
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.
08 fevereiro 2004
Pgina 67
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.
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.
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 :
! !
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.
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/
08 fevereiro 2004
Pgina 71
Contribuidor
P. Jacobi D. Yemanov D. Yemanov A. Brinkman
O. Mascia
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
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.
Correo de Segurana
Adicionada opo login a instsvc.exe para permitir a instalao do servio FB com uma conta diferente de localsystem.
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
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
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
08 fevereiro 2004
Pgina 73
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
Correo nos Servios API: servios API parcialmente disponibilizados para as verses CS win32. Envio incorreto de eventos (uso desnecessrio de pacotes OOB).
D. Yemanov
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
08 fevereiro 2004
Pgina 74
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
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.
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>;
(sem #)
N. Samofatov
(sem #)
A. Peshkoff
08 fevereiro 2004
Pgina 75
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
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 #)
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.
08 fevereiro 2004
Pgina 76
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
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
(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
A. Brinkman
D. Yemanov D. Yemanov
(sem #) (sem #)
D. Yemanov
D. Yemanov
2.
3.
08 fevereiro 2004
Pgina 77
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
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.
A. Brinkman
D. Yemanov A. Brinkman
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
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
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
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
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
Sean Leyne
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
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.
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
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
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
08 fevereiro 2004
Pgina 81
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
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
08 fevereiro 2004
Pgina 82
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
A. Brinkman
A. Peshkoff D. Yemanov
D. Yemanov
D. Yemanov
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.
538201 446256
Sean Leyne, Erik Kunze John Bellardo Mike Nordell, John Bellardo John Bellardo, M. ODonohue, Erik Kunze Mike Nordell, John Bellardo, M. ODonohue
(no #)
08 fevereiro 2004
Pgina 84