|
|
(2 revisões intermediárias por um outro usuário não estão sendo mostradas) |
Linha 1: |
Linha 1: |
− | == 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 ==
| |
− |
| |
− | <code>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 ; ^</code>
| |
− |
| |
− | == Links Úteis ==
| |