Anterior Próximo Sumário Fale conosco! OpenBASE! o Banco de Dados inteligente.

Manutenção e recuperação das Bases de Dados

Uma vez concluídas as tarefas de implementação, poderá ser iniciado o processo de manutenção dos Bancos de Dados, processando as informações neles contidas, selecionando, incluindo, alterando ou removendo elementos.

A manutenção das Bases de Dados OpenBASE é feita, principalmente, através da utilização dos utilitários de administração que apresentaremos mais adiante. Porém, os objetos que compõem os Bancos de Dados OpenBASE podem ser manipulados através das seguintes maneiras:

Recuperando Bases de Dados OpenBase

Este capítulo tem por finalidade orientar o usuário sobre como proceder em caso de ocorrência de pane no sistema devido, por exemplo, a:

A primeira conseqüência de uma pane no sistema é que todo o trabalho e dados armazenados em memória são perdidos, a não ser que tais informações tenham sido armazenadas em lugar seguro. Entretanto, o usuário OpenBase não precisa se alarmar em caso de pane no sistema, já que é possível recuperar os dados perdidos e re-estabelecer a integridade referencial das Base de Dados.

O OpenBase permite a gravação de um log das transações denominado diário, possibilitando, com isso, recuperar todo o trabalho realizado a partir do último backup. O diário contém as transações realizadas nas bases de dados, podendo refazer tais transações.

Como recuperar Bancos de Dados

A seguir explicaremos como funcionam os métodos de recuperação de uma base de dados OpenBase, descrevendo como um esquema deve ser projetado, para uma possível recuperação da base de dados gerada pelo OpenBase, em caso de pane.

Elaboração do esquema do Banco

A definição do Banco de Dados deverá incluir algumas cláusulas importantes que permitem implementar métodos de recuperação das informações, conforme sintaxe a seguir:

BANCO [<percurso>] <nome_bd><codigo_de_seguranca>...

...[{ARQRECUP/DIARIO[=<arq>]/DIAREC[=<arq>]/AUTOREC}]...

...[{BLOQARQ/BLOQCHA/BLOQPAG/BLOQREG}]...

...

As cláusulas referenciadas na sintaxe acima já foram devidamente abordadas neste e em outros manuais. Vamos apenas ressaltar alguns aspectos importantes relacionados com a recuperação de Bancos de Dados. Para maiores detalhes, consulte, neste manual, o capítulo "Sistemas de definição de Bancos de Dados" assim como o manual específico do sistema DEFINE.

Veja a seguir as cláusulas pertinentes ao objetivo de recuperação de Bancos de Dados.

ARQRECUP

Determina que sejam criados um ou mais arquivos destinados a armazenar os dados das transações antes deles serem modificados. (imagem anterior do registro), permitindo assim que uma ou mais transações não completadas possam ser desfeitas a qualquer momento (rollback/undo).

DIÁRIO

Determina que seja utilizado o arquivo DIÁRIO (criando pelo programa BDSGBD) para armazenar todos os dados das transações depois deles serem modificados (imagem posterior do registro), permitindo, assim, que uma ou mais transações completadas possam ser refeitas, a qualquer momento, a partir de uma determinada data/hora ou a partir de uma determinada transação identificada pelo seu número. É necessário que a base de dados na qual tais transações serão refeitas, seja a mesma base de dados existente antes da geração do arquivo diário. Por isso, antes de "baixar" o diário, restabeleça via backup, tal base de dados.

Caso o usuário deseje, o arquivo DIÁRIO, poderá ser criado por banco. Para isto, basta que no esquema do banco de dados conforme exemplificado acima, na cláusula DIARIO=<arq> seja informado o nome do arquivo diário em <arq>.

Novas opções foram adicionadas ao utilitário BDSGBD para maximizar a utilização do arquivo diário. O usuário pode, a partir de agora, especificar o tamanho para o arquivo diário e onde serão exibidas mensagens de alerta sobre a gravação deste arquivo. Além destas adições, é possível a partir de agora, a gravação de pontos de sincronismos, forçando a atualização das informações em disco.

DIAREC

Determina que seja utilizado o arquivo DIÁRIO (criando pelo programa BDSGBD) para armazenar todos os dados das transações antes deles serem modificados e depois deles serem modificados. (guarda a imagem anterior e posterior do registro), permitindo, assim, que uma ou mais transações completadas possam ser desfeitas ou refeitas, a qualquer momento, a partir de uma determinada data/hora ou a partir de uma determinada transação identificada pelo seu número. Esta opção implica na utilização automática da opção ARQRECUP.

AUTOREC

AUTOREC, se o arquivo de recuperação contiver uma transação não completada, a recuperação será feita automaticamente sem solicitar a execução do utilitário bdrecu, desde que não exista nenhum outro processo ativo utilizando o banco e que o bloqueio seja do tipo banco.

Iniciação do gerenciador OpenBASE

O gerenciador de ambiente OpenBASE (DBSGBD) deverá ser iniciado conforme a seguir:

bdsgbd [-d –l<numero1> [-a<arquivo>] –t<device> -y<numero2> [-e]]

As cláusulas referenciadas na sintaxe acima já foram devidamente abordadas neste e em outros manuais. Vamos apenas apresentar algumas cláusulas importantes relacionados com a recuperação de Bancos de Dados. Para maiores detalhes, consulte, neste manual, o capítulo "Utilitários do ambiente OpenBASE" assim como o manual específico de utilitários OpenBASE.

Veja a seguir as cláusulas pertinentes ao objetivo de recuperação de Bancos de Dados.

-d

Determina a criação e utilização de jornalização (arquivo diário).

-l<numero1>

Define o tamanho em bytes do arquivo diário. <numero1> deve ser um valor inteiro.

-a <arquivo>

Determina (quando utilizada a opção –d) o nome do arquivo diário. Caso se omita, o nome do arquivo default é /usr/tsgbd/tsdic/diário. Caso se especifique diario=<arq> no esquema do banco de dados, não é preciso utilizar esta opção (apenas no unix).

-t<device>

Define o terminal onde serão exibidas as mensagens sobre a gravação do diário.

-y <numero2>

Define a freqüência para gravação de pontos de sincronismo. <numero2> deve ser um valor inteiro.

-e

Determina que na execução deste utilitário o arquivo diário deve ser esvaziando.

Quando o arquivo diário exceder o tamanho definido por <numero1>, o arquivo corrente é fechado e outro é aberto, possibilitando que sejam feitas cópias de segurança a cada troca de arquivo. Após a troca de arquivo a seguinte mensagem será enviada para o terminal indicado em <device>: "Gravando diário em <nome>", onde <nome> é o nome do diário atual. O nome do arquivo diário é acrescido de um dígito numérico, iniciando em 1 (um), e a cada troca de arquivo este dígito é incrementado de uma unidade. São possíveis até 9 (nove) arquivos diários.

A utilização da opção –y determina que a cada <numero2> transação serão executados dois comandos "sync" além da gravação de uma transação SYNTRA no arquivo diário, indicando um ponto de sincronismo. Os pontos de sincronismo gravados no arquivo diário servem para futuras recuperações do banco de dados pelos utilitários BDREDI e BDLIDI.

Para que o usuário desfrute plenamente do recurso da jornalização, deve haver uma rotina de backup do banco de dados e dos arquivos diários.

O comando "sync" grava efetivamente no disco as páginas alteradas no buffer pool (páginas armazenas em memória evitando o acesso sucessivo a disco). Deste modo estas informações não são perdidas em eventuais variações na tensão elétrica, isto acarreta em uma diminuição da performance, pois todos o buffers do sistema são atualizados.

Utilitários OpenBASE a serem acionados

Os utilitários aqui referenciados já foram devidamente abordadas neste e em outros manuais. Vamos apenas apresentar algumas cláusulas de utilitários relacionados com a recuperação de Bancos de Dados. Para maiores detalhes, consulte, neste manual, o capítulo "Utilitários do ambiente OpenBASE" assim como o manual específico de utilitários OpenBASE.

Veja a seguir algumas opções de utilitários relacionados com recuperação de Bancos de Dados.

BDLIDI

Para facilitar sua utilização foram adicionadas duas novas opções, uma para listar todas as transações de todos os bancos de dados e outra para listar apenas os pontos de sincronismo de um banco de dados. Veja a seguir a sintaxe e argumentos:

bdlidi [-S] –b <banco> -s<seg> -n<nivel> {-d<data-hora> l –t<numero>} [-a<diario>] [-y]

onde:

-S Lista todas as transações de todos os bancos de dados.

<banco> Nome do Banco de Dados

<seg> Representa o código de segurança do banco, especificado no esquema. Se omitido será assumido o valor 1.

<nivel> Representa a palavra de nível do usuário especificado no esquema. Se omitido,será considerado o valor "a".

-d<data_hora> Determina a data e a hora início da listagem. Data e hora devem estar no formato aa/mm/dd-hh:mm:ss.

-a<diario> Representa o nome do arquivo diário quando diferente do DEFAULT.

-t<numero> Representa o número da transação para início da listagem.

-y Lista todos os pontos de sincronismo do arquivo diário.

Permite verificar as transações do diário a partir de determinada data-hora ou a partir de uma determinada transação. Quando se utiliza a opção "-1" no utilitário BDSGBD, para dividir o arquivo diário, deve-se informar o nome do diário que se quer listar informações, caso contrário será listado o diário atual.

BDREDI

Permite refazer ou desfazer transações a partir do arquivo diário. Novas opções foram adicionadas ao utilitário BDREDI otimizando a recuperação de um banco de dados. Com essas adições pode-se recuperar somente um determinado arquivo, utilizar os pontos de sincronismo além de ser possível a geração de um scrip shell com as chamadas ao utilitário BDVERI. Veja a seguir a sintaxe e argumentos:

bdredi –b<banco> -s<seg> -n<nivel> [-r] [-a<diario>] [-y<numero> -f<arquivo>] {-d<data-hora>I t<numero1>}[-e][-O]

Para obter uma explicação a respeito de cada uma das cláusulas apresentadas na sintaxe acima consulte o capítulo "Utilitários do ambiente OpenBASE" deste manual assim como a documentação específica dos utilitários do ambiente OpenBASE.

Este utilitário serve para recuperar bancos de dados a partir de uma data ou transação. A opção "-r" determina que as transações serão desfeitas e só pode ser utilizada para bancos de dados que tenham a opção DIAREC. O utilitário BDREDI ao executar, lê seqüencialmente o arquivo diário pesquisando a data/transação inicial para o banco de dados, prossegue até o fim do arquivo diário para que todas as transações sejam refeitas. Caso a opção "-r" (desfazer), seja especificada a leitura do arquivo diário será de trás para frente, até que a data/transação seja encontrada. Neste caso, cada transação encontrada para o banco de dados especificado, será refeita.

Se a data/transação não for especificada, a recuperação será feita a partir da data 00/00/00- 00:00:00, logo a partir da primeira transação.

Ao utilizar a opção –y, BDREDI lê o arquivo diário a partir do último registro contando os pontos de sincronismos até <numero>, neste instante a leitura do arquivo diário se inverte e as transações são recuperadas até a ultima transação especificada no arquivo diário.

Caso seja especificada a opção –e, o arquivo "bdveri.l" é criado a partir dos registros lidos pelo utilitário BDREDI no arquivo diário. Ao executar tal arquivo (sh bdveri.l) os registros com problemas são corrigidos a partir de chamadas ao utilitário BDINDC, que irá reconstruir somente as chaves com problema.

Problemas na abertura de bancos de dados

A seguir, segue um roteiro de como o usuário deve proceder em caso de problemas na abertura do banco de dados. Devem ser utilizados os seguintes utilitários.

BDRECU

Este utilitário serve para recuperar e desbloquear um banco de dados. Para obter uma explicação a respeito de cada uma das cláusulas apresentadas na sintaxe acima consulte o capítulo "Utilitários do ambiente OpenBASE" deste manual assim como a documentação específica dos utilitários do ambiente OpenBASE.

Veja a seguir a sintaxe e argumentos:

bdrecu –b<banco> [-s<segurança>] [-n<nivel>] [-c] [ -d<num>] [-O]

O utilitário BDRECU recupera e desbloqueia um Banco de Dados OpenBase e, para Bancos de Dados que possuam arquivo de recuperação, desfaz a última transação pendente no arquivo de recuperação.

Ao executar este utilitário, é mostrado o último modo de abertura e o número de vezes que o banco foi aberto sem ter sido corretamente fechado.

Deve-se executar este utilitário sempre que um processo, que utilize banco de dados OpenBase, seja interrompido de forma anormal, principalmente no uso de bloqueio de dados, onde para cada atualização é gravado um registro no arquivo de recuperação, de forma que, após a sua execução, o banco de dados volte ao estado normal. No caso de bloqueio central, é criado um arquivo de recuperação para cada processo que efetuar um pedido de bloqueio. Neste caso, o BDRECU verifica se para cada arquivo de recuperação do banco de dados o processo correspondente esta inativo, recuperando somente as transações de processos inativos. O utilitário BDRECU pode ser utilizado a qualquer momento, exceto para bancos de dados que utilizem bloqueio de banco. Neste caso, nenhum usuário deve estar utilizando o banco de dados, para que a tabela de bloqueios seja inicializada e o arquivo de recuperação do banco de dados seja esvaziado.

BDINDC

Este utilitário serve para otimizar a criação de arquivo de índices. Para obter uma explicação a respeito de cada uma das cláusulas apresentadas na sintaxe acima consulte o capítulo "Utilitários do ambiente OpenBASE" deste manual assim como a documentação específica dos utilitários do ambiente OpenBASE.

Veja a seguir a sintaxe e argumentos:

bdindc  –b <banco> [-s <segurança> [-n <nível>] [-a <arq_ban> [-S] 

  [-i {<nome>|<número1>}] [-c] [-v <valor> | -r [ -m <numero>]] [-O | -o]

Novas opções foram implementadas ao utilitário BDINDC para otimizar a criação de arquivos de índices, permitindo a reconstrução das chaves de um índice que tenham um determinado valor. Deste modo BDINDC percorrerá toda a cadeia deste valor refazendo apenas estes registros, este utilitário pode ser usado após a verificação do banco de dados pelo utilitário BDVERI que retorna as chaves e valores com erro.

O exemplo a seguir mostra a saída deste utilitário.

BDINDC -b exemplo -s1 -n niv15 -a pessoa -i "NOME.P"

Quando se utiliza a opção "-v <valor>" o arquivo de índice é mantido e somente a cadeia de <valor> é atualizada, por este motivo não teria sentido utilizar esta opção com a opção "-r".

BDVERI

Este utilitário serve para verificar as ligações entre os registros dos arquivos de um banco de dados. Para obter uma explicação a respeito de cada uma das cláusulas apresentadas na sintaxe acima consulte o capítulo "Utilitários do ambiente OpenBASE" deste manual assim como a documentação específica dos utilitários do ambiente OpenBASE. Veja a sintaxe e argumentosdeste utilitário no capítulo Admoinistração dos ambientes OpenBASE.

O utilitário BDVERI verifica um Banco de Dados quanto a correção das ligações entre registros de seus arquivos. Ao executar, lê os registros de cada arquivo verificando os endereços no cabeçalho do registro e seus índices, emitindo mensagens, se encontrar algum erro.

A opção "-r" é útil para diminuir a quantidade de registros verificados, já que geralmente os problemas ocorrem nos últimos registros dos arquivos.

Visando melhorar a recuperação e verificação de um banco de dados OpenBase e otimizar o algoritmo de verificação foram adicionadas novas opções ao utilitário BDVERI, para que na ocorrência de problemas em um banco de dados a recuperação seja mais rápida e eficiente. Com estas modificações BDVERI não verifica o banco de dados informando apenas os arquivos com problema, e sim arquivos, registros, valores das chaves e grava um arquivo chamado "bdindc.1" que contém chamadas ao utilitário BDINDC para que este reconstrua somente as chaves com problema, diminuindo a necessidade de descarregar e recarregar o arquivo com problema.

Caso o usuário prefira, poderá utilizar os utilitários BDDESC para descarregar todo o banco (ou um determinado arquivo) e BDRECA para carregar todo o banco ou BDADIC para carregar um único arquivo. Tais utilitários para correção de integridade e consistência de dados são utilizados para banco de dados com arquivos com muitos registros, pode ser um processo demorado. A descrição e sintaxe de tais utilitários podem ser obtidas no manual de utilitários da Tecnocoop Sistemas.

BDOTIM

Este utilitário serve para otimizar arquivos de índice ou arquivos de dados. Para obter uma explicação a respeito de cada uma das cláusulas apresentadas na sintaxe acima consulte o capítulo "Utilitários do ambiente OpenBASE" deste manual assim como a documentação específica dos utilitários do ambiente OpenBASE.

Veja a seguir a sintaxe e argumentos:

bdotim -b<banco> [-s<seguranca] [-n<nivel>] [-O] [-a<arquivo>] [-d] [-e] [-p] [-t]

Para otimizar arquivos de índice quando estes estiverem ocupando um espaço muito grande, ou a performance do banco de dados não estiver em bom nível.

Este utilitário, ao otimizar os arquivos de índices, cria uma cópia do arquivo original com a extensão ".V" no diretório do banco de dados.

Mesmo que não se especifique o arquivo do qual se deseja otimizar os índices, o BDOTIM só otimizara aqueles que forem necessários.

Objetivando dinamizar o processo de eliminação de espaços deixados pelos registros deletados em arquivos de dado, foi desenvolvida a opção "-p" para o utilitário BDOTIM. Com esta opção, ao executar este utilitário além de otimizar os arquivos de índice de um banco de dados também reorganiza-se os arquivos de dados retirando os registros "deletados", desta forma o antigo e oneroso processo de descarregar, definir e recarregar o arquivo é desnecessário.

Mensagens de erro mais freqüentes

Segue abaixo a relação de erros que podem ocorrer, ao se acessar uma base de dados OpenBase. A descrição destes erros pode ser obtida pelo comando:

bdmens <num do erro>

onde <num do erro> é o código do erro em relação ao qual se deseja informação. Estes números podem ser:

Erro 1 "DICIONÁRIO <banco> NÃO ACESSÁVEL"

Ocorre na tentativa de abertura de um banco de dados, quando este não existir ou estiver protegido. Neste caso, consulte o DBA ou verifique:

Erro 2 "DICIONÁRIO <banco> INVÁLIDO"

Ocorre na tentativa de abertura de um banco de dados quando este não for um arquivo no formato do dicionário de dados. Neste caso, verifique se nome do banco que se deseja abrir está correto.

Erro 3 "CÓDIGO DE SEGURANÇA INCORRETO"

Ocorre na tentativa de abertura de um banco de dados (DATABASE), quando o código de segurança passado no programa não é igual ao definido no banco de dados. Neste caso, consulte o DBA ou verifique:

Erro 815 "Erro na abertura do arquivo"

Se puder perder os dados já contidos no arquivo, simplesmente passe um define no esquema, recriando apenas aquele arquivo. Se os dados já existentes não puderem ser perdidos, utilize BDDESC no arquivo, e redefina o esquema, recriando apenas este arquivo. Depois utilize BDADIC para recuperar os dados do arquivo. Caso a sugestão acima não resolva, o problema pode estar no tamanho do arquivo que está muito grande ou no número de arquivos abertos ter ultrapassado o limite do sistema operacional . Neste caso ocorrerá o erro 1035, erro de leitura no arquivo. Recomenda-se alterar os parâmetros em maxfiles, nfile (hpux) ou o tamanho máximo de arquivos no arquivo /etc/security/limits (aix)

Erro 1012 "Não pode abrir arquivo"

Este erro ocorre quando algum arquivo de dados ou de índice não foi encontrado. Tais arquivos podem estar protegidos, ou a posição dos números sequenciais dos nomes arquivos de índices, já existentes, está incorreta. Neste último caso, execute o utilitário bdcnfg e acerte a posição(ínício ou fim) do número do índice nos arquivos de índice e compile(define) o esquema do banco de dados, para que o dicionário de dados seja recriado.

Erro 1035/1036 "LEITURA E GRAVAÇÃO DO ARQUIVO <arquivo>".

Este erro, identificado pelo número 1035 (leitura) ou 1036 (gravação) é um erro indireto do OPENBASE, causado por algum problema físico no disco ou alguma configuração do sistema operacional estar sub-dimensionada. O arquivo pode estar danificado ou este arquivo pode estar com o tamanho muito grande. No primeiro caso, recomenda-se utilizar o fsck do unix, ou scandisk do windows que corrigirá a possível área do disco danificada. No caso de o arquivo em questão estar com o tamanho muito grande, recomenda-se alterar os parâmetros em maxfiles, nfile (hpux) ou o tamanho máximo de arquivos no arquivo /etc/security/limits (aix). Uma terceira causa deste erro, é o numero máximo de arquivos abertos simultaneamente, do sistema operacional Ter estourado. Neste caso, deve-se Rever os parâmetros de configuração do sistema operacional ou utilizar a opção $file.

Erro 813 <arquivo <nome do arquivo> inválido tamanho no registro<num> no dicionário(num1>

Este erro ocorre, quando algum item de algum arquivo no esquema do banco de dados é alterado de tamanho ou tipo ou a este item é atribuído a qualidade de chave; o esquema do banco é compilado(define), o dicionário de dados é re-gerado, mas o arquivo de dados que teve o item alterado, não foi recriado. Com isso, o dicionário de dados contém um determinado tamanho de registro diferente do tamanho do registro no arquivo de dados, já que como o arquivo não foi recriado, ele não alterou o tamanho do registro. Para corrigir este erro, antes de compilar o esquema(define), descarregue o arquivo que foi modificado(bddesc), recrie tal arquivo após compilar o esquema do banco (define) e por fim, re-carregue o arquivo(bdadic).

Anterior Próximo Sumário Fale conosco! OpenBASE! o Banco de Dados inteligente.