Mudanças entre as edições de "Producao:Operacional/Instalacao/Firebird"

De Oazez
Ir para: navegação, pesquisa
(Criou página com '== Reparar base de dados corrompida == /opt/firebird/bin/fbmgr -shut -force -user SYSDBA -pass JJLERC /opt/firebird/bin/fbmgr -start -forever se for o firebird 2.* pode dar u...')
 
Linha 246: Linha 246:
  
 
== Links Úteis ==
 
== Links Úteis ==
 +
 +
http://www.josh-hartmann.com/firebird-performance-tweaking/

Edição das 11h43min de 11 de dezembro de 2014

Reparar base de dados corrompida

/opt/firebird/bin/fbmgr -shut -force -user SYSDBA -pass JJLERC /opt/firebird/bin/fbmgr -start -forever

se for o firebird 2.* pode dar um kill no guardian e depois no fbserver

O Interbase possui dois modos de escrita:

Síncrona e Assíncrona

Síncrona – Dados são gravados em disco imediatamente.

Assíncrona – É a escrita considerada “cuidadosa”, pois os dados são gravados assim que a transação for commitada. A desvantagem é que em ambiente de trabalho windows, estas instruções são ignoradas, uma vez que o próprio sistema operacional controla estas tarefas. Em sistemas como Linux e/ou Unix, este tipo de escrita funciona muito bem.

A vantagem deste tipo de escrita é a performance, uma vez que o sistema operacional irá gerenciar o cache de dados. Mas é preciso ter uma política muito boa de backup, para o caso de acontecer algum problema de corrupção.

Na versão 6 do Interbase, assíncrona é a escrita padrão.

Ajustando a escrita:

//ajusta em modo Síncrono

 gfix -write sync banco_de_dados.gdb

//ajusta em modo Assíncrono

 gfix -write async banco_de_dados.gdb

Reparando o banco.

Inicialmente, poderíamos utilizar vários programas para proceder com a recuperação do banco de dados, mas o próprio Interbase possui uma excelente ferramenta para isso.

Esta ferramenta é o GFIX que se encontra instalado no diretório BIN do banco de dados, e funciona em linha de comando no Prompt do MS-DOS.

A primeira coisa a ser definida, para facilitar e muito o trabalho, é incluir variáveis de ambiente no sistema operacional, onde iremos definir usuário, senha e localização (path) do GFIX. Para tanto, inclua as linhas abaixo no arquivo AUTOEXEC.BAT e depois disso reiniciar o computador:

SET ISC_USER=SYSDBA
SET ISC_PASSWORD=masterkey
SET PATH=%PATH%;c:\arquiv~1\borland\interb~1\bin

Note que a variável SET PATH poderá mudar de acordo com o diretório de instalação do interbase.

Caso o sistema operacional seja o Windows 2000, Windows 2000 Server ou Windows XP, você poderá incluir estas variáveis na opção “Variáveis de Ambiente” nas Propriedades do Sistema (Painel de Controle)

Lembrando que, a deverá ser observada a condição de Case-Sensitive para usuário e senha.

1º Passo ( Cópia e Acesso )

Sempre utilize uma cópia do banco de dados corrompido, além de possuir acesso exclusivo ao mesmo.

Proceda então com uma cópia utilizando o próprio windows explorer ou o MS-DOS, ex:

copy banco.gdb copia.gdb

2º Passo ( Verificar )

Verifique se o banco de dados realmente se encontra corrompido utilizando o seguinte comando:

gfix -v -full banco_de_dados.gdb

Caso o comando tenha indicado algum tipo de problema, aí sim iremos começar as rotinas de reparo do banco a seguir.

3º Passo ( Reparar ) gfix -mend -full -ignore banco_de_dados.gdb

Após este procedimento, deveremos novamente verificar se o banco foi reparado, utilizando o comando do 2º Passo. Caso ainda assim o banco continue apresentando erros, o próximo passo será efetuar um backup completo e depois restaurá-lo conforme descrito adiante.

Backup do Banco de Dados

Da mesma maneira como utilizamos o GFIX do Interbase, poderemos utilizar o utilitário de backup, o GBAK, que também se encontra instalado no diretório Bin do Interbase / Firebird e funciona em linha de comando. Veja alguns comandos descritos abaixo:

gbak -backup -v -ignore banco_de_dados.gdb arquivo_de_backup.gbk

Este é o comando em sua forma mais simples. Caso houver necessidade, por falhas no procedimento, por exemplo, poderá optar em incluir outras opções, como descrito abaixo:

Ignorar o “garbage collection”. gbak -backup -v -ignore -garbage banco_de_dados.gdb arquivo_de_backup.gbk

Ignorar transações em limbo: gbak -backup -v -ignore -garbage -limbo banco_de_dados.gdb arquivo_de_backup.gbk

Após proceder com o backup, poderemos agora finalmente tentar a restauração do mesmo, descartando informações danificadas, corrompidas, etc.

Restaurando o Banco de Dados

Para a restauração do banco, podemos continuar a utilizar o utilitário GBAK, conforme descrito abaixo:

Restauração básica:

gbak -create -v arquivo_de_backup.gbk novo_banco.gdb

Caso este procedimento relate erros, tente as seguitnes opções:

Não ativar indices durante a restauração:

gbak -create -v -inactive arquivo_de_backup.gbk novo_banco.gdb

Após a conclusão da restauração, você deverá ativar os índices manualmente.

Restaurar uma tabela de cada vez:

gbak -create -v -one_at_time arquivo_de_backup.gbk novo_banco.gdb

Este procedimento fará com que cada tabela seja restaurada e em seguida commitada, portanto desta maneira você poderá conseguir ao menos restaurar uma parte do banco de dados.

RDB$39

Anyway, before I found this thread, I came up with a simple hack that worked for me: - opened the fdb file that I could not restore in a hex editor, - found the tring RDB$ADMIN (it appeared at the very end , at least in my case) - changed a single letter, like RDB$ADMIN to RDB$ADMIM - saved - and now the restore works without an error

OU

Você tem um role criado com o nome RDB$ADMIN. Quando vc tenta restaurar a base de dados no FB 2.5, ele tenta criar um ROLE com esse mesmo nome (pois RDB$ADMIN é um SYSTEM ROLE no FB 2.5), e não está conseguindo (por isso a duplicidade).

(Esse ROLE pode estar aí porque alguém criou coincidentemente usando o mesmo nome que o FB 2.5 usa, ou então alguém migrou o banco pra FB 2.5, e depois resolveu voltar ele pra versão 2.1 (levando junto o role).

Enfim, faça uma cópia do banco, apague o ROLE e tente fazer o backup/restore no FB 2.5. Deve dar certo.)

Várias instâncias em uma mesma máquina

Instalacao de várias instancias do servidor firebird na mesma maquina

1) Parar as instancias já iniciadas

  . Utilize o painel de controle de servicos do windows e pare os servicos que 
    começam com "Firebird Guardian - *" e "Firebird Server - *", ou 
  . Na janela de comando como administrador:
    Va até a pasta do firebird, por exemplo:
      cd "\Program Files\Firebird\Firebird_2_5\bin"  (a tecla tab é sua amiga)
    Verificar quais instancias estao rodando
      instsvc -q
    Pare TODAS as instancias que estao rodando
      instsvc -p -n "Nome da Instancia"

2) Instale o servidor utilizando o instalador com os seguintes cuidados:

  . Use a opcao custom
  . Altere a pasta de instalacao para nao coincidir com as demais
  . Não nao instale como servico
  . Não use o guardian
  . Não inicie automaticamente
  . Não copie o gds32.dll para a pasta de sistemas
  

3) Altere a porta de conexao com esta instancia

  . Na pasta onde foi instalada a nova instancia, altere o arquivo firebird.conf
    com um editor de textos simples (notepad ou edit).
  . encontre a linha:
    #RemoteServicePort=3050 e faça as seguintes alterações:
    . remova ( # ) da frente do nome e depois,
    . altere o número da porta 3050 para qualquer outro número que nao estejam em 
      uso pelo windows e as outras instancias. Por exemplo 3051, 3052, 3053...
    . SALVE A ALTERAÇÃO
  

4) Crie a nova instancia

  . Na janela de comando como administrador:
    Va até a NOVA pasta do firebird, por exemplo:
      cd "\Program Files\Firebird\Firebird_2_5_OAZEZ\bin"  (a tecla tab é sua amiga)
  . Crie a nova instancia
    instsvc i -s -a -g -n "Nome da nova Instancia" <- OAZEZ por exemplo
    . Voce dever receber as mensagens:
      Service "Firebird Guardian - Nome da nova instancia" succefuly created.
      Service "Firebird Servier - Nome da nova instancia" succefuly created.
  . Inicie as instancias
    instsvc sta
    . Voce dever receber as mensagens:
      Service "Firebird Guardian - Nome da nova instancia" succefuly started.
  . Verifique se as instancia foram criadas e estao rodando via painel de controle, 
    ou como descrito acima.
    

5) Faca as alteracoes de firewall necessárias

6) A conexao a nova instancia deve acontecer utilizando a nova porta, por exemplo:

  . 127.0.0.1/3051:c:\oazez\dados\ArquivoMassa.gdb     
    

7) Caso voce tenha instalado versoes diferentes do firebird, cada aplicacao deve

  utilizar o cliente (gds32.dll) correto para evitar complicações futuras.
  

Referencias:

 Instalation Notes do Firebird
 http://www.destructor.de/firebird/multiinstance.htm
 http://dicasph.blogspot.com.br/2010/04/dois-firebird-20v-e-25v-instanciados.html
 

Reativar todos os índices de uma vez

SET TERM ^ ;

EXECUTE BLOCK AS DECLARE VARIABLE STMT VARCHAR(1000); BEGIN

 FOR
   SELECT
     'ALTER INDEX ' || RDB$INDEX_NAME || ' ACTIVE;'
   FROM
     RDB$INDICES
   WHERE
     (RDB$SYSTEM_FLAG IS NULL OR RDB$SYSTEM_FLAG = 0)
   ORDER BY
     RDB$FOREIGN_KEY NULLS FIRST
   INTO
     :STMT
 DO
   EXECUTE STATEMENT :STMT;

END^

SET TERM ; ^

Links Úteis

http://www.josh-hartmann.com/firebird-performance-tweaking/