Professional Documents
Culture Documents
Configurar o Firewall do Windows XP com SP2 para Interbase/Firebird Listar as tabelas e views do banco de dados Backup e restore com gbak Obter o valor de um generator Reiniciar a contagem de um generator Excluir generator Criar e usar domnios (domain's) Trocar o tipo de um campo Alterar o tamanho de um campo Transao multi-banco com IBX Excluir cdigo-fonte de stored procedure Obter os campos da chave-primria Definir forced writes usando o gfix Definir sweep interval com gfix Obter a data do servidor
Configurar o Firewall do Windows XP com SP2 para Interbase/Firebird O pacote de atualizao Service Pack 2 (SP2) do Windows XP inclui um Firewall para proteo da rede contra acesso no autorizado, seja pela internet ou atravs da rede local. Este programa bloqueia automaticamente quase todas as portas de acesso do protocolo TCP/IP, incluindo a porta 3050 que por padro usada pelos bancos de dados Interbase e Firebird.
Ento para que outros computadores possam acessar um banco de dados Interbase ou Firebird em um servidor com Windows XP com SP2 que esteja com Firewall ativado necessrio adicionar uma exceo, ou seja, informar ao Firewall que a porta 3050 no deve ser bloqueada. Para fazer isto siga os
os passos abaixo:
Clique em Iniciar/Configuraes/Painel de controle; Abra o item denominado Firewall do Windows; V para Excees; Clique em Adicionar porta; No campo Nome digite Firebird ou Interbase; No campo Nmero da Porta digite 3050; Escolha o protocolo TCP e clique em Ok.
Aps este procedimento a porta 3050 estar desbloqueada e o banco de dados Interbase ou Firebird estar acessvel atravs da rede.
Tabelas e views:
Somente tabelas:
Somente views:
Observao:
Para no incluir as tabelas e views de sistema, acrescente o filtro (RDB$SYSTEM_FLAG = 0 OR RDB$SYSTEM_FLAG IS NULL) na clusula WHERE. Exemplo:
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$VIEW_BLR IS NULL AND (RDB$SYSTEM_FLAG = 0 OR RDB$SYSTEM_FLAG IS NULL);
O InterBase/FireBird possui uma ferramenta de linha de comando especfica para fazer e restaurar cpias de segurana (backup). No Windows o nome do programa gbak.exe e no Linux seu nome gbak (sem extenso). Em ambos os sistemas a localizao deste arquivo o sub-diretrio bin do InterBase/FireBird.
Onde:
usuario: o nome de login do usurio (geralmente SYSDBA). senha: a senha do usurio. arquivo_banco: o arquivo de banco de dados (geralmente com extenso .gdb). arquivo_backup: o arquivo de backup (geralmente com extenso .gbk).
Exemplo de backup:
Exemplo de restore:
Para obter o valor de um generator devemos usar a funo GEN_ID do InterBase/FireBird. A sintaxe :
GEN_ID(NomeDoGenerator, Incremento);
Exemplos:
No primeiro exemplo o generator ser incrementado e o novo valor ser retornado. J no segundo exemplo o generator no ser incrementado e seu valor atual ser retornado.
Dentro de um trigger podemos atribuir o valor de um generator a um campo da tabela, como mostra o exemplo a seguir:
CREATE TRIGGER TRIG_Cliente_Inclusao FOR Cliente BEFORE INSERT AS BEGIN NEW.Codigo = GEN_ID(Gen_Cliente_Codigo, 1); END^
Para obter o valor de um generator atravs de uma aplicao, podemos executar o comando SELECT mostrado a seguir sobre uma tabela que possua apenas um registro:
Onde NomeTabela o nome de uma tabela do banco de dados que precisa ter um, e somente um, registro. Geralmente usamos a tabela de sistema RDB$DATABASE para este propsito. Eis um exemplo:
SET GENERATOR TO X;
Observao:
O valor obtido com GEN_ID(GEN_Cliente_Codigo, 1) aps o exemplo dado anteriormente ser 1 (um), pois a funo GEN_ID retorna o valor do generator j incrementado.
No FireBird:
No InterBase e FireBird domnios so como tipos de dados. Tais domnios tm grande semelhana com o conceito de domnio aplicado matemtica, ou seja, um domnio define um conjunto de valores vlidos para uma dada situao.
Podemos criar qualquer banco de dados sem fazer uso explcito de domnios. No entanto usar domnios explicitamente pode deixar o banco de dados mais organizado, com regras claras e bem definidas, e ainda conseguir uma economia substancial de mo de obra na construo e manuteno do banco.
CREATE TABLE Cliente( Codigo INTEGER NOT NULL, Nome Fone Fax VARCHAR(40) NOT NULL, VARCHAR(20), VARCHAR(20),
Celular VARCHAR(20), Renda NUMERIC(9,2) DEFAULT 0 NOT NULL, CONSTRAINT PK_Cliente PRIMARY KEY(Codigo), CONSTRAINT CHK_Cliente_Codigo CHECK(Codigo > 0), CONSTRAINT CHK_Cliente_Renda CHECK(Renda >= 0));
CREATE DOMAIN DM_NomePessoa VARCHAR(40) NOT NULL; CREATE DOMAIN DM_Fone VARCHAR(20); CREATE DOMAIN DM_Renda NUMERIC(9,2) DEFAULT 0 NOT NULL CHECK(VALUE >= 0);
CREATE TABLE Cliente( Codigo DM_ChavePrimaria, Nome Fone Fax DM_NomePessoa, DM_Fone, DM_Fone,
Comentrios:
O benefcio imediato do uso explcito de domnios a organizao do cdigo que define as tabelas. Como um mesmo domnio ser usado em vrias tabelas (exemplo: DM_NomePessoa), ganharemos muito tempo ao definir outras tabelas que comporo o banco de dados. O domnio DM_Fone um exemplo que demonstra como um mesmo domnio pode ser usado para colunas diferentes que possuem contedos semelhantes. Os domnios DM_ChavePrimaria e DM_Renda mostram aspectos mais interessantes na declarao de domnios, tais como a especificao de um valor padro (DEFAULT) e regras para validao (CHECK). Se mais tarde resolvermos alterar os nomes de pessoas para 50 caracteres, ou seja, VARCHAR(50), bastar alterar a definio do domnio DM_NomePessoa e todos os campos definidos com este domnio sero automaticamente ajustados. Neste caso bastaria o comando ALTER DOMAIN
DM_NomePessoa TYPE VARCHAR(50). Nos bancos de dados que crio, uso domnios explicitamente para todos os campos de todas as tabelas, mesmo onde aparentemente so desnecessrios. Mas bom lembrar que domnios mal definidos podem trazer mais prejuzos do que benefcios. Portanto, antes de sair criando domnios deliberadamente, faa um estudo minucioso do banco de dados a ser construdo.
Incio Trocar o tipo de um campo Para alterar o tipo de um campo no FireBird (ou InterBase 6.0 ou superior) execute o comando SQL abaixo:
Exemplos:
ALTER TABLE Cliente ALTER Nome TYPE VARCHAR(40); ALTER TABLE Venda ALTER Total TYPE NUMERIC(18, 2);
Obs:
Sugesto:
Incio Alterar o tamanho de um campo Para alterar o tamanho de um campo CHAR ou VARCHAR no FireBird (ou InterBase 6.0 ou superior) basta executar o comando SQL abaixo:
Exemplo:
Obs:
Este comando no funciona se a alterao de tamanho implicar em perda de dados, ou seja, no serve para reduzir o tamanho de um campo.
Embora seja um recurso pouco conhecido, o InterBase/FireBird suporta uma nica transao vinculada a dois ou mais bancos e os componentes InterBase Express (IBX) suportam este recurso de forma transparente. Para usar este recurso com IBX siga os passos abaixo:
Coloque um IBDatabase para cada banco de dados. Coloque apenas um IBTransaction. Conecte cada IBDatabase ao IBTransaction pela propriedade DefaultTransaction. Coloque quantos IBSQL ou IBDataSet forem necessrios. Conecte cada IBSQL ou IBDataSet ao respectivo IBDatabase pela propriedade Database. Conecte cada IBSQL ou IBDataSet ao mesmo IBTransaction pela propriedade Transaction. Pronto, agora s trabalhar normalmente.
Importante
Sugesto
Use esta tcnica sempre que precisar transferir dados de um banco de dados para outro.
Incio
Excluir cdigo-fonte de stored procedure Uma grande preocupao que tem tomado conta da cabea de muitos programadores a possibilidade de um programador concorrente pegar o cdigo-fonte das stored procedures armazenadas em banco de dados InterBase/FireBird. Uma soluo encontrada apagar o cdigo-fonte diretamente da tabela de sistema onde o InterBase grava as informaes relativas s stored procedures. Para fazer isto execute o comando abaixo:
Observaes
A mesma coisa pode ser feita com triggers. No entanto importante lembrar que voc no deve atribuir NULL, pois havia um bug no InterBase que fazia o trigger ser disparado duas vezes caso o cdigo-fonte estivesse NULL. No sei se o bug foi corrigido. De qualquer forma, atribua uma string qualquer, tal como no exemplo acima.
Execute o comando SELECT abaixo para obter os nomes dos campos da chave-primaria de uma tabela do InterBase ou FireBird.
WHERE C.RDB$RELATION_NAME = 'NomeDaTabela' AND C.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' AND S.RDB$INDEX_NAME = C.RDB$INDEX_NAME ORDER BY RDB$FIELD_POSITION
Observaes
Estes objetos com nomes iniciados com RDB$ so chamados de objetos de sistema e so usados internamente pelo InterBase/FireBird. As tabelas comeadas com RDB$ contm dados sobre a estrutura do banco de dados.
Para mudar a propriedade "Forced Writes" de um banco de dados InterBase usando o gfix faa:
Para ativar: gfix banco -write sync -user sysdba -password senha
Para desativar: gfix banco -write async -user sysdba -password senha
Onde:
banco = Caminho completo do banco de dados (arquivo .gdb). senha = senha do sysdba.
Observaes
Para definir o "sweep interval" de um banco de dados InterBase usando o gfix, execute:
Onde:
Observaes
Voc tambm poder alterar esta propriedade do banco de dados usando o IBConsole.
Isto facilmente possvel se voc usa um banco de dados Client/Server, tal como Interbase, SQL Server, Oracle, etc.
Observaes
A tabela usada no SELECT foi RDB$DATABASE, mas poderia ser qualquer tabela que possua apenas um registro. RDB$DATABASE uma tabela de sistema do Interbase.
Incio
http://www.tecnobyte.com.br/dica9.html