Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
1
Métodos para recuperar uma base de dados corrompida.
Causas de perda de dados e causas de corrupção.
Estratégias.
ZIM TECHNOLOGIES DO BRASIL
ZIM CORPORATION
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
2
Recuperação de uma base de dados corrompida
I)
Método I - zim0001 corrompido
II)
Método II – zim0001 corrompido
III) Método III – Base geral corrompida
IV) Método IV – Base geral corrompida
V) Método V - Para quem tem problemas de espaço em disco
VI) Causas de perda de dados ou corrupção e estratégiasESTRATEGIAS
1.
EVENTOS.-
2. Backup e Restauração
3.
ESTRATÉGIAS GERAIS
4.
COMO VERIFICAR A INTEGRIDADE DE SEU BANCO DE DADOS.
5. Error! Reference source not found.
6.
INTEGRIDADE E SEGURANÇA DE BANCOS DE DADOS ZIM.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
3
Recuperação de uma base de dados corrompida
I)
Método I - zim0001 corrompido
Neste caso utilize primeiro o zimfix para verificar se existe algum objeto com problemas, se existir os
mesmos devem ser recuperados antes de seguir em diante.
1) Crie uma nova base de dados Zim 7.11 (BaseNova):
# mkdir BaseNova
# cd BaseNova
# $ZIM/ziminit .
# cp ../Base_orig/config.db config.db
2) Copiar os arquivos de dicionário de dados da base de dados com problema, para a nova base de dados Zim
7.11 (BaseNova), EXCETO os arquivos Zim0001 e Zim0099
# cd Base_orig
# cp zim0002 zim0003 zim0004 zim0005 zim0006 zim0007 zim0008 zim0009 zim0010 zim0011 zim0012
zim0013 zim0014 zim0015 zim0016 zim0017 zim0018 zim0019 zim0040 zim0041 zim0042 zim0043
zim0044 zim0045 zim0080 zim0081 zim0082 zim0083 zim0084 zim0085 zim0086 zim0087 ../BaseNova
ou cp zim000[2-9] zim00[1-8]? ../BaseNova
3) # $ZIM/zimfiles +v > zfBase_orig.txt (executar este comando na base “Base_orig”)
4) Na nova base de dados (BaseNova), via DC criamos um novo Zim diretório chamado ZOMOBJ, e
executamos o ZOMCONFIG para configurá-lo para criar os objetos do ZOM neste diretório.
5) Alteramos o arquivo config.db da nova base de dados (BaseNova), aumentando o parâmetro descriptors
para 400.
6) Executamos os comandos abaixo no prompt do Zim da nova base de dados (BaseNova), para criar os
objetos no novo dicionário de dados (zim0001):
> zomenable
> zomreset
> zomcreate +t dirs - n ZIM
> zomcreate +t ents
> zomcreate +t roles
> zomcreate +t docs -pE (não criar docs já criados)
> zomcreate +t forms -pE (não criar forms já criados)
> zomcreate +t consts -pE (rels podem conter constantes)
> zomcreate +t vars
(rels podem conter variáveis)
> zomcreate +t rels
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
4
> zomcreate +t sets
> zomcreate +t disps
> zomcreate +t wins
> zomcreate +t menus
(sets podem envolver rels)
Edite o arquivo “errtrace” , para verificar e corrigir posíveis erros gerados no zomcreate.
7) > bye
# $ZIM/zimfiles +v > zfBaseNova.txt
(executar este comando na base “BaseNova”)
8) Copie os arquivos de dados zim0100 em diante da base original (Base_orig) para a base nova (BaseNova).
Não copie os arquivos de Diretórios (eles foram criados no comando zomcreate +t dirs –n ZIM), para saber
quais arquivos são diretórios, execute o comando “$ZIM/zimfiles +v|grep directory” na base original
(Base_orig).
Antes de copiar Compare os arquivos de dados “zfBaseNova.txt “ e “zfBase_orig.txt “, se existir arquivos
diferentes para a mesma tabela, copie seguindo o exemplo a seguir.
Exemplo: Na base original a tabela Clientes é zim0101
Na base BaseNova a tabela Clientes é zim0200
# cd ../BaseNova
# cp ../Base_orig/zim0101 zim0200
Copie também outros fontes e arquivos de configuração existentes.
9) altere o nome da base “Base_orig” para Base_orig.old
# cd ..
# mv Base_orig Base_orig.old
# mv BaseNova Base_orig
10) Lembre-se que você terá que recompilar todos os programas para pode efetuar seus testes, pois o zim0001
“recuperado” tem numeração de objetos internos do Zim, diferente do zim0001 “danificado”.
11) Para o processo de investigação sobre o problema de corrupção do dicionário de dados, aconselhamos
fortemente que seja executado o comando zomdiagnose, sempre que objetos forem incluídos/modificados,
para podermos descobrir a fonte do problema.
> zomdiagnose ;d zomoutputdoc
Dentro do documento zomoutputdoc terá a saída da execução do comando zomdiagnose.
12) Guarde a base Base_orig.old por um tempo (é a base original corrompida), qualquer problema na
recuperação, temos que usar esta para tentar outros métodos de recuperação.
13) Faça backup da base recuperada.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
5
II)
Método II – zim0001 corrompido
Neste método o zim0002 até zim0087 não podem estar corrompidos
1) Crie uma nova base de dados Zim 7.11 (BaseNova):
# mkdir BaseNova
# cd BaseNova
# $ZIM/ziminit .
# cp ../Base_orig/config.db config.db
2) Copiar os arquivos de dicionário de dados da base de dados com problema, para a nova base de dados Zim
7.11 (BaseNova), EXCETO os arquivos zim0001 e Zim0099
# cd Base_orig
# cp zim0002 zim0003 zim0004 zim0005 zim0006 zim0007 zim0008 zim0009 zim0010 zim0011 zim0012
zim0013 zim0014 zim0015 zim0016 zim0017 zim0018 zim0019 zim0040 zim0041 zim0042 zim0043
zim0044 zim0045 zim0080 zim0081 zim0082 zim0083 zim0084 zim0085 zim0086 zim0087 ../BaseNova
ou
cp zim000[2-9] zim00[1-8]? ../BaseNova
3) # $ZIM/zimfiles +v > zfBase_orig.txt (executar este comando na base “Base_orig”)
4) Na nova base de dados (BaseNova), via DC criamos um novo Zim diretório chamado ZOMOBJ, e
executamos o ZOMCONFIG para configurá-lo para criar os objetos do ZOM neste diretório.
5) Alteramos o arquivo config.db da nova base de dados (BaseNova), aumentando o parâmetro descriptors
para 400.
6) Copiar Objectlist e Keywords da base original
Cp ../Base_orig/dcrt/zim9805 ../BaseNova/dcrt
Cp ../Base_orig/dcrt/zim9808 ../BaseNova/dcrt
7) Executamos os comandos abaixo no prompt do Zim da nova base de dados (BaseNova), para recriar os
objetos no novo dicionário de dados (zim0001):
> zomenable
> let <UseExistingFileum> = $true
> zomfixup
> zomtouch *
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
6
7.1) Opção 1 para criar os objetos
> zomcreate +t dirs - n ZIM
> zomcreate +t ents
> zomcreate +t roles
> zomcreate +t docs -pE
> zomcreate +t forms -pE
> zomcreate +t consts -pE
> zomcreate +t vars
> zomcreate +t rels
> zomcreate +t sets
> zomcreate +t disps
> zomcreate +t wins
> zomcreate +t menus
(não criar docs já criados)
(não criar forms já criados)
(rels podem conter constantes)
(rels podem conter variáveis)
(sets podem envolver rels)
7.2) Opção 2 para criar os objetos
a) Execute o Zomconfig (para configurar o ZOM – e para processar por ordem de
dependência para garantir que objetos dependentes serão criados após os seu owners.
b) no Zomconfig fazer: Sort Order: DependencyLevel
c) no prompt do Zim executar:
> Zomcreate * - K $Ziminit
8) Para verificar se todos os objetos estão criados executar:
> Zomlist +pE! (Este comando lista todos os objetos não criados)
9) Executar novamente o comando:
> Zomcreate * -pE (recomandado pois alguns objetos dependentes de outros podem não ter sido criados ou
podem ter tido algum erro)
10) Edite o arquivo “errtrace” , para verificar e corrigir posíveis erros gerados no zomcreate.
11) > bye
# $ZIM/zimfiles +v > zfBaseNova.txt
(executar este comando na base “BaseNova”)
12) Copie os files zim0100 a zim0900 da base original (Base_orig) para a base nova (BaseNova). Não copie
os arquivos de Diretórios (eles foram criados no comando zomcreate +t dirs –n ZIM), para saber quais
arquivos são diretórios, execute o comando “$ZIM/zimfiles +v|grep directory” na base original (Base_orig).
Antes de copiar Compare os arquivos “zfBaseNova.txt “ e “zfBase_orig.txt “, se existir files diferentes para a
mesma tabela, copie seguindo o exemplo a seguir.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
7
Exemplo: Na base original (Base_orig) a tabela Clientes é zim0101
Na base nova (BaseNova)
a tabela Clientes é zim0200
# cd ../BaseNova
# cp ../Base_orig/zim0101 zim0200
Copie também outros fontes e arquivos de configuração existentes.
OBS.: Não copiar os arquivos de Diretórios Zim (eles foram criados no comando “zomcreate”.
13) altere o nome da base “Base_orig” para Base_orig.old
# cd ..
# mv Base_orig Base_orig.old
# mv BaseNova Base_orig
14) Lembre-se que você terá que recompilar todos os programas para pode efetuar seus testes, pois o zim0001
“recuperado” tem numeração de objetos internos do Zim, diferente do zim0001 “danificado”.
15) Para o processo de investigação sobre o problema de corrupção do dicionário de dados, aconselhamos
fortemente que seja executado o comando zomdiagnose, sempre que objetos forem incluídos/modificados,
para podermos descobrir a fonte do problema.
> zomdiagnose ;d zomoutputdoc
Dentro do documento zomoutputdoc terá a saída da execução do comando zomdiagnose.
16) Guarde a base Base_orig.old por um tempo (é a base original corrompida), qualquer problema na
recuperação, temos que usar esta para tentar outros métodos de recuperação.
17) Faça backup da base recuperada.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
8
III)
Método III – Base geral corrompida
1) Na base corrompida
Na base de dados a recuperar: executar os passos abaixo para gerar o diretório “port”, onde será
exportado o dicionário de dados do Zim:
# cd /basezim/baseorig
# mv port port.old
# mkdir port
# $ZIM/zim
> zomenable
> zomfixup
>zomtouch *
> zomexport *
> bye
# $ZIM/zimfiles +v > zfbaseorig.txt
2) Criar uma nova base de dados Zim: onde será importada as definições do item 1 acima, veja os passos
abaixo:
# mkdir /basezim/Base_orig.
# cd /basezim/Base_orig.
# $ZIM/ziminit.
# cp ../basezim/baseorig/port/* port
3) Executar os passos abaixo na base de dados “nova”: no prompt do Zim, para importar os objetos
utilizando Zomimport:
# $ZIM/zim
> zomenable
> let <UseExistingFileNum> = $true
> zomimport *
> bye
# $ZIM/zimfiles +v > zfBase_orig.txt
OBS o comando em vermelho acima, é utilizado para que o o Zim “crie” os arquivos de dados
(zimXXXX) com os mesmos números da base de dados origem.
4) Comparar o conteúdo dos arquivos zfbaseok.txt e zfBase_orig.txt: para verificar se os números
dos arquivos zimXXXX não foram alterados.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
9
5) Copiar os outros arquivos de configuração do Zim: diretórios de fontes e outros diretórios/arquivos
necessários para que seja possível compilar completamente a aplicação:
# cp ../basezim/baseorig/config.* .
# cp ../basezim/baseorig/dirs.zim .
# cp ../basezim/baseorig/areas.zim .
# cp ../basezim/baseorig/zimprof .
Outrossim, recomendamos fortemente o backup diário do dicionário de dados do Zim, na base de
dados de desenvolvimento, conforme relação abaixo:
# cd /basezim/basedes
# rm –f port/*.z50
# $ZIM/zim
> zomenable
> zomexport *
> bye
# $ZIM/zimfiles +f > zfbasedes.txt
# tar cvfz bkdiariozim.tar.gz ./dpsrt ./dcrt ./zim00* ./zimXXXX ./config.* ./areas.zim ./dirs.zim
./zimprof ./port ./zfbasedes.txt
OBS: os arquivos zimXXXX (em vermelho acima) serão os arquivos que tem diretórios
zimXXXX.ws associados com ele. Vamos supor que você tem o diretório zim0100.ws, você deverá
copiar também o arquivo zim0100.
Para o processo de investigação sobre o problema de corrupção do dicionário de dados (zim0001),
aconselhamos fortemente que seja executado o comando zomdiagnose, sempre que objetos forem
incluídos/modificados, para podermos descobrir a fonte do problema.
> zomdiagnose ;d zomoutputdoc
Dentro do documento zomoutputdoc terá a saída da execução do comando zomdiagnose.
6) Faça um backup da base recuperada
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
10
IV)
Método IV – Base geral corrompida
Para executar este método, é necessário que se cumpram os seguintes requisitos:
1) Manter backup diário de sua base de produção (baseprod)
2) A base de desenvolvimento tem que ser um espelho (idêntica) da base de produção (basedes).
3) Crie um pasta para baixar o backup (basebkp), e copie o backup para esta pasta.
Caso a)
4) Entre no Zim na base baseprod.
5) Execute: - zomenable
- zomexport *
6) Copie a pasta baseprod/port para basebkp/port.
7) Entre no Zim em basebkp
8) Execute:
- Zomenable
- Zomimport *
Caso b) – Ignore os itens 4) ao 8) e execute o item 9).
9) Na base “basebkp” (cd basebkp)
- Entre no Zim
- Entre no DC
- Adicione os objetos criados após o backup.
10) Execute o zomdiagnose com a sintaxe explicada nos métodos anteriores.
11) Teste a integridade desta base, se tudo estiver perfeito.
12) Renomeie a baseprod para baseprod.err (Base original corrompida).
13) Renomeie a basebkp para baseprod.
14) Faça um backup da “baseprod”.
(Base recuperada).
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
11
V)
Método V - Para quem tem problemas de espaço em disco
1) Faça novo backup da base corrompida
2) Copie o backup (sem corrupção) para a base corrompida.
- Entre no Zim
- Entre no DC
3) - Adicione os objetos criados após este backup.
4) Execute o zomdiagnose com a sintaxe explicada nos métodos anteriores.
5) Teste a integridade desta base, se tudo estiver perfeito, faça um backup novamente.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
12
VI)
Causas de perda de dados ou corrupção e estratégias
A perda de dados e corrupção não são comuns na maioria dos sistemas, mas ocorrências ocasionais são
inevitáveis e as causas podem ser diversas. Alguns dos eventos que podem causar perda de dados ou
corromper uma base de dados incluem:
1) EVENTOS.Evento
Descrição
Erro do usuário 1) Registros individuais, ou mesmo arquivos inteiros, podem ser apagados por acidente ou malintencionados.
2) Cancelamento de sessão de usuário: administrador do sistema cancela frequentemente sessões de
usuários (kill -9),(veja item 3);
3) Finalização inadequada da sessão Zim pelo usuário: sessão de usuário que fica "ativa" mas
desconectada, usuário fecha no botão ["X"] do emulador de terminal, ao invés de finalizar a aplicação Zim;
4) Alterar o Dicionário de dados em monousuário (ZIM) enquanto existem usuários trabalhando em
Multiusuário (ZIMMU, ZIMRT, ZIMRTMU,etc).
Terminação
Os arquivos podem ser corrompidos se o software for interrompido no meio de uma atualização por
anormal
eventos tais como uma falha de energia, um sistema de desligamento ou reiniciar, ou um sinal do sistema
do usuário ou a operação para finalizar a execução.
Falha de
Dados podem ser perdidos se um disco de repente, por algum motivo se torna ilegível (problema em
hardware
disco), corrupção de memória, bug do sistema operacional e etc.
Configuração
Alguns parâmetros de configuração com valores errados, podem causar corrupção:
LARGE FILE LOCKING:
O valor padrão para “large file locking” é não, para assegurar a adequada interoperacionalidade entre
versão diferente do Zim e diferentes Sistemas operacionais. Se o “large file locking” está definido no
arquivo config.db como “large file locking yes”, todos os usuários devem iniciar em sistemas que
suportam grandes arquivos, ou pode ocorrer corrupção em arquivos do banco de dados.
MAXIMUM USERS: Todos os usuários de uma determinada aplicação deve usar o mesmo valor para o
“maximum file number” e “maximum users”, ou pode resultar em corrupção de dados. Para garantir que
todos os usuários tenham o mesmo valor, coloque essa opção no banco de dados ou arquivo de
configuração padrão.
Diversos Fatores 1) - Diretórios e programas compilados podem conter ponteiros internos apontando para outras páginas.
Um desses indicadores está errado. .
- Um programa foi compilado e a referência do set está incorreta.
- Houve alteração na estrutura de objetos (Ents,Rels,Roles, forms,etc),
e o programa que invoca estes objetos é executado sem ser recompilado.
2) Não utilização do recurso de NAMED SETS nos programas compilados: aconselhamos fortemente aos
nossos clientes que façam a utilização do recurso de "NAMED SETS", para garantir que um mesmo "SET"
tenha sua estrutura "inalterada" durante seu tempo de utilização no sistema. Imagine o seguinte cenário
onde um "SET" é utilizado para diferentes tipos de tabelas e operações no banco (add, change, update ou
delete), se a estrutura que está sendo utilizado não estiver “adequada” ou “atualizada”, poderá provocar
corrupção de dados, e também do dicionário de dados.
Para utilizar NAMED SETS, basta cadastrar os “SETS” utilizados dentro dos programas, no dicionário de
dados do Zim, para isso entre no DC, opção Objects, Named Sets:
Set Name: informar aqui o nome do set
Directory Name: diretório do Zim onde o objeto deverá ser incluído
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
13
Set Specification: especificar a estrutura do set
Veja o exemplo abaixo para as tabelas tbbanco e tbagencia:
Set Name: SetBancoAgencia
Directory Name: Financeiro
Set Specification: tbbanco rbancoagencia tbagencia
Outros
Observe que na especificação do “SET” deve ser informado a estrutura das tabelas e relacionamentos a
serem utilizados no “SET”, se você mudar a estrutura (objetos Zim na especificação do “SET”) o “SET”
obrigatoriamente deverá ser outro!
find tbagencia rbancoagencia tbbanco ragenciaend tbendereco -> SetBancoAgencia  foi incluído um
objeto a mais no “SET”, portanto ele é um “SET” novo!
Se a corrupção ocorre na compilação de programas:
Aconselhamos que você crie blocos de compilação de programas, até descobrir qual programa está
provocando o erro de corrupção do dicionário de dados do Zim, isolando até chegar no programa ou na
sequência de passos que provoca a corrupção.
Eventos como estes podem acontecer em qualquer lugar, a qualquer momento, você deve planejar como irá
lidar com uma possível perda de dados no futuro. Seu plano deve incluir uma política periódica de tempo para
verificar a integridade de seu banco de dados.
Zim fornece proteção embutida contra esses eventos. Por exemplo, sistemas multi-usuário têm proteção
embutida contra o encerramento anormal. Um arquivo de transações é criado para cada usuário, aplicativo
para armazenar as atualizações para o banco de dados de uma transação em andamento. As atualizações são
copiados a partir do arquivo de transações para o banco de dados somente se a transação for confirmada (ou
seja, o comando é executado ENDTRANSACTION). Se a transação for abortada (ou seja, o comando
QUITTRANSACTION é executada, ou ocorreu um bloqueio) o conteúdo do arquivo de transações serão
descartadas. Como resultado, o encerramento irregular (a menos que ocorra durante a execução do
ENDTRANSACTION) terá o mesmo efeito que uma operação abortada (porque o comando
ENDTRANSACTION não é executado) e, portanto, mudanças parciais não serão feitas para o banco de dados
e o banco de dados permanece livre de corrupção.
A combinação de transações implícitas e explícitas em ZIM muttiusuário assegura que as bases de dados
permaneçam protegidas adequadamente contra a corrupção que pode resultar de múltiplos acessos e, ao
mesmo tempo, permitir o mínimo inconveniente possível aos usuários.
2) Backup e Restauração
Ao mecanismo do ZIM que implementa esta segurança dá-se o nome de auditagem de transações, a
qual somente se aplica aos ambientes multiusuários, e que consiste na constante gravação em arquivos
especialmente designados para esta tarefa de todos os dados alterados pelas transações dos usuários.
Abordando mais profundamente esta questão, cada vez que uma transação qualquer faz uma alteração
sobre algum arquivo de uma base de dados ZIM, esta alteração é registrada num arquivo especial denominado
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
14
arquivo de auditagem e chamado pelo nome de zimtrans.x, onde x é um número que identifica o usuário que
está fazendo a alteração. Como o ZIM trabalha os dados sempre em unidades de 1024 Kbytes denominadas de
páginas, estas é que são jogadas para o arquivo de auditagem conforme a transação for prosseguindo. Durante
a execução da transação, nenhuma alteração é feita sobre os arquivos reais da base de dados. Ao final da
transação, todas as páginas gravadas no arquivo de auditagem são transferidas “de uma vez só” para os
arquivos aos quais cada uma delas pertence. Somente neste ponto a transação é dada como concluída. Esta
forma de fazer as coisas pelo ZIM tem duas vantagens muito importantes, ambas visando à segurança e a
correta manipulação dos dados: primeiro, os arquivos são efetivamente modificados num curto espaço de
tempo; isto significa que a probabilidade dos arquivos ficarem num estado inconsistente é extremamente baixa
porque as páginas são transferidas em rajada para seus lugares definitivos. Em segundo lugar, se algum
problema ocorrer, como pane no equipamento, conflito de concorrência com outro usuário, ou mesmo o
desejo do próprio usuário em voltar atrás nas modificações, o ZIM simplesmente abandona o arquivo de
auditagem, deste modo impedindo que as alterações feitas dentro da transação se concretizem, sem que os
arquivos reais ao menos tenham sido tocados.
O momento em que o ZIM faz a transferência em rajada corresponde ao final da execução de um
comando qualquer numa transação implícita, ou na execução do comando ENDTRANSACTION numa
transação explícita. Por outro lado, o arquivo de auditagem é abandonado quando for executado o comando
QUITTRANSACTION numa transação explícita, ou quando o comando de uma transação implícita for
interrompido em meio à sua execução.
Uma transação é chamada de explícita porque compreende um ou mais comandos ZIM iniciados por
um comando TRANSACTION e terminados por um ENDTRANSACTION ou QUITTRANSACTlON. Uma
transação implícita é qualquer comando ZIM que atue sobre a base de dados, mas que não tenha sido
precedido pelo comando TRANSACTION.
Após o término da transação, normal ou anormalmente, e quando do início da próxima transação, o
ZIM pode dispor do arquivo de auditagem de duas formas diferentes: ou ele grava as alterações da nova
transação sobre aquelas feitas na transação anterior, ou prossegue emendando as novas alterações após as
anteriores. A decisão entre uma e outra é dada pela opção de configuração audit updates que o usuário coloca
no seu arquivo de configuração, que é lido ao iniciar sua sessão do ZIM. Se a opção for yes, o ZIM
prosseguirá emendando umas alterações após as outras; se for no ou não existir, o ZIM reaproveitará o espaço
anteriormente usado para novas transações. Em qualquer caso, se a transação anterior foi interrompida o
espaço eventualmente utilizado no arquivo de auditagem será reaproveitado.
O objetivo final de usar-se a auditagem de transações ligada é poder-se recuperar os arquivos da base
de dados, se for necessário. Esta recuperação é feita pelo utilitário ZIMRCVR (ZIM ReCoVeRy: Recuperador
ZIM).
Se por um lado à auditagem de transações desativada tem a vantagem de poupar área em disco (o
tempo de execução de qualquer transação, entretanto, não é alterado), por outro, não permite que se faça a
recuperação posterior da base de dados através do utilitário ZIMRCVR. Cabe ao Administrador da Base de
Dados determinar qual o caminho a ser seguido: se usar com mais economia os recursos de disco ou aumentar
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
15
a segurança dos dados. Algumas aplicações, pelas suas características de funcionalidade, podem perfeitamente
dispensar a auditagem de transações, enquanto que a maioria exige o emprego deste recurso.
Nesta mesma linha de raciocínio é bem fácil deduzir-se que se um usuário ativar a opção, todos os
outros também deverão ativá-la, pois do contrário, em caso da recuperação da base, algumas atualizações
serão feitas e outras não, deixando a base de dados inconsistente. Além disso, existe um perigo maior ainda
que é o de perder também o registro das atualizações feitas corretamente pelos usuários quando estes saírem
de suas sessões e os arquivos de auditagem coincidirem de ser utilizado por outros usuários que não possuem
a opção ativada. Como se sabe, a cada nova transação o arquivo é reinicializado, provocando a perda das
informações anteriormente gravadas. É por isto que a opção audit updates deve ser sempre colocada no
arquivo de configuração da base de dados, config.db.
Os Arquivos que Armazenam a Auditagem de Transações
Cada base de dados que está sob a execução do ZIM multiusuário possui um conjunto de arquivos
zimtrans que são reservados um para cada usuário que estiver ativo num dado instante. O primeiro usuário a
entrar em operação sobre a base (disparando o ZIMMU, ZIMRTMU ou ZIMQRTMU) começa a trabalhar
com o arquivo zimtrans.0, o segundo com o zimtrans.1 e assim por diante. Quando algum destes usuários
terminar sua sessão, o arquivo correspondente fica disponível para o próximo usuário que entrar (o qual até
poderá ser o mesmo que saiu). Portanto, se a opção audit updates estiver ativada, um determinado arquivo
zimtrans poderá conter as atualizações acumuladas de um ou mais usuários daquela base de dados. Em caso
contrário (isto é, quando a opção audit updates estiver desativada), os arquivos zimtrans só terão sentido
durante a existência de uma transação, podendo ser eliminados após o final da sessão (cuidado!!: somente
faça isto se a opção audit updates estiver desativada e quando todos os usuários também estiverem fora de
suas sessões!).
O local onde o ZIM grava os diversos arquivos de auditagem de transações (zimtrans.0, zimtrans.1,
etc.) é indicado por outra opção do arquivo de configuração do ZIM, audit path. Se esta opção não for
informada, os arquivos de auditagem serão gravados no diretório do sistema operacional onde a base de dados
se encontra. A vantagem do uso desta opção é o aumento da segurança das atualizações sobre a base de dados,
pois permite dissociar fisicamente a base de dados de sua auditagem. Por exemplo, a base de dados pode
residir num disco físico enquanto a auditagem reside em outro; se acontecer um problema com os discos, um
ou outro terá a chance de se salvar, permitindo a recuperação futura. Outra ideia interessante - que só
funcionará se houver memória suficiente disponível, se a opção de configuração audit updates estiver
desligada e se as transações forem bastante pequenas - consiste em desviar os arquivos de auditagem para um
disco virtual na memória, o que permitirá acelerar a execução das transações.
Um arquivo zimtrans contém, para cada transação iniciada, um prólogo indicando o usuário que
iniciou a transação, um número sequencial indicando a ordem da transação, a data e a hora, bem como uma
indicação de que a transação foi terminada com sucesso ou não (esta indicação é gravada ao final da transação
e mostra, se as modificações que vem a seguir podem ser usadas numa posterior e eventual recuperação dos
arquivos aos quais estas informações pertencem). Logo após, vem cada uma das páginas modificadas dos
diversos arquivos físicos envolvidos na transação, inclusive áreas de índices. Finalmente, é gravado um
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
16
epílogo fechando a transação (a ordem dos dados mencionados acima não é necessariamente a ordem física
gravada no arquivo zimtrans).
O conteúdo lógico de um arquivo zimtrans pode ser visualizado pela execução do utilitário ZIMRCVR
com a opção + q não documentada nos manuais, como mostrada no exemplo:
zimrcvr +q zimtrans.5
São mostrados todos os passos executados durante a transação no sentido da proteção e recuperação
dos dados com hora, data, número da transação (aquele contido no arquivo zimlock.zim), números dos
arquivos ZIM e das respectivas páginas alteradas durante o processo, entre outras informações indispensáveis
à recuperação.
Pelo que se viu, deduz-se que o tamanho de um arquivo zimtrans poderá variar enormemente
dependendo do tipo de transação usado e se a opção de configuração audit updates estiver ligada, já que, neste
último caso, o histórico de cada transação vai se empilhando ao longo do dia, a ponto de produzirem-se
arquivos com muitos megabytes de extensão. Comandos do tipo "CHANGE ALL ..." envolvendo entidades
muito populosas costumam produzir arquivos zimtrans muito extensos.
Embora estas considerações possam assustar um pouco, recomenda-se insistentemente que qualquer
modificação sobre os arquivos de uma base de dados ZIM seja feita no ambiente multiusuário, porque, em
caso de qualquer tipo de erro, a transação em andamento é automaticamente desfeita ou abandonada, deixando
os arquivos originais íntegros. Este não é o caso do ambiente monousuário, onde não existe o conceito de
transação e não são utilizados os arquivos zimtrans; as atualizações são feitas diretamente sobre os arquivos
originais: em caso de erro, o comando em execução é interrompido ou abandonado e as modificações ficarão
pela metade, deixando os arquivos originais inconsistentes.
Mas, o que fazer com os arquivos de auditagem de transações gravados ao longo de um determinado
período de tempo?
Supondo que todos os usuários da base de dados usem a opção de configuração audit updates ligada,
estes arquivos poderão ser usados para trazer ou recuperar a base de dados até uma situação onde existe a
confiança de que ela esteja íntegra.
A maneira de usar este recurso pode ser a seguinte: de tempos em tempos - digamos, uma vez ou duas
vezes por dia, dependendo da necessidade - é feita uma cópia de salvamento de todos os arquivos de
auditagem (atenção!!: nenhum usuário deve estar operando sobre a base!).
Após o salvamento, os arquivos de auditagem devem ser apagados, não só para diminuir o espaço
utilizado em disco, como também para evitar a duplicidade do salvamento e a reaplicação da auditagem sobre
os arquivos. Em intervalos maiores de tempo, por exemplo, semanalmente, é feita uma cópia de salvamento
completa da base de dados.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
17
Quando for detectado algum erro na base de dados que justifique o seu abandono, escolhe-se a cópia
de salvamento mais recente que contenha os arquivos corretos da base de dados e aplicam-se os arquivos de
auditagem, em cascata, sobre a base de dados, via o utilitário ZIMRCVR. Deste modo, as transações
realizadas após a cópia de salvamento são refeitas exatamente como na situação original, deixando a base de
dados atualizada e íntegra novamente.
Lembre-se!: Com Audit Update yes, arquivos de auditagem (Zimtrans) e o Zimlock.zim são interrelacionados. Deve sempre fazer backups e removê-los juntos!
•
•
O backup da BD deve estar sincronizado com o dos arquivos de audit e o do Zimlock.zim.
Todos os arquivos de audit devem estar no mesmo diretório.
Uma consideração final relativa ao tempo de processamento de transações em multiusuário:
Por força do uso dos dispositivos de segurança do ambiente multiusuário, como a auditagem, etc., a mesma
transação é executada mais rapidamente em monousuário. Por isto, os usuários são tentados a usar este
ambiente em certos momentos. Isto realmente pode ser feito, desde que se tenha plena consciência do trabalho
em andamento e que se faça uma cópia de salvamento dos arquivos envolvidos antes do início das tarefas. Ao
Administrador da Base de Dados cabe a incumbência de discernir sobre esta questão.
Recuperação Automática do BD.
–
A opção Automatic Recovery permite que transações que falharam durante o estágio de
commit (EndTransaction), sejam recuperadas em uma nova sessão Zim multiusuária.
– O arquivo ‘translog.zim’ é usado para salvar as informações necessárias.
• Depende do "maximum users" (config.db)
• Se "maximum users“ é mudado, apagar o translog.zim.
• Nunca apagar este arquivo se existir algum usuário em sessão na base de dados.
– Todas as transações terminadas são reaplicadas à BD quando uma nova sessão Zim
multiusuária inicia.
– A opção audit path de todos os usuários , se usada, deve apontar sempre para o mesmo
diretório.
• Use o config.db para a opção audit path.
Quando os usuários estiverem em uma rede, "audit path" deve apontar para um arquivo que seja
visível pela rede.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
18
2.1) Controle via configuração. Direcionar para outra pasta todos os arquivos temporários criados pela aplicação Zim.
2.2) Arquivos mais comuns criados em um aplicativo Zim
errors.trc - Durante a execução de um comando ZIM, o interpretador ou executor podem detectar erros ou
situações inconsistentes que são avisadas ao usuário, tanto no seu 1)-vídeo quanto num 2)-arquivo sequencial
especial denominado errors.trc, criado no diretório de trabalho da sessão. O primeiro pode ser desativado via
os comandos específicos “SET MESSAGES OFF”, “SET ERRORS OFF”, etc., enquanto que o segundo pode
ser ativado por estas opções (as mensagens de erro podem ser lançadas em outro meio de saída ao mesmo
tempo). Em princípio, esta opção deveria estar sempre ligada em todas as sessõers ZIM porque auxilia muito
na pesquisa e solução de erros nas diversas fases da vida de um sistema aplicativo. Resumindo este arquivo é
gravado na sessão de cada usuário e não no banco de dados. Para isto, cada usuário deve ter uma base Zim
local com seu respectivo config.zim.
Zimcomp
= Arquivo temporário, criado e usado somente durante as compilações de programas ZIM.
Zimsetd = Arquivo temporário, criado na sessão de cada usuário apontado pelo “work path” do config.zim.
Este arquivo contem informações dos diretórios ZIM para trabalho durante a sessão ZIM em andamento.
Zimsett = Arquivo temporário, criado na sessão de cada usuário apontado pelo “work path” do config.zim.
Este arquivo registra informações relativas aos conjuntos (sets) gerados durante a sessão ZIM em andamento.
zimtrans.nnn = Arquivo de auditagem, registra as alterações efetuadas numa transação qualquer sobre um
arquivo do banco de dados. O local onde o ZIM grava este arquivo é indicado pela opção: audit path, se esta
opção não for informada, os arquivos de auditagem zimtrans.nnn serão gravados no diretório da base de
dados.
A opção audit path de todos os usuários , se usada, deve apontar sempre para o mesmo diretório. Configure
esta opção no arquivo config.db.
zimlock.zim = Faz o controle da concorrência, é o arquivo onde o ZIM sabe o que as outras sessões estão
fazendo através do acesso a este arquivo. O Zimlock.zim também faz a ponte entre os dois níveis onde os
bloqueios são realizados, ou seja, bloqueios controlados pelo ZIM e pelo Sistema Operacional.
Lock path <name> O endereço do diretório onde os arquivos zimlock serão criados (opcional).
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
19
3) COMO VERIFICAR A INTEGRIDADE DE SEU BANCO DE DADOS.
Se você suspeita de corrupção de seu banco de dados, ou se você quiser verificar a integridade do banco de
dados, execute o arquivo (ZIMFIX) para todos os arquivos de dados. O ZIMFIX verifica a integridade
estrutural dos dados, procurando solucionar e reparar os danos encontrados. Em particular, ele verifica em
primeiro lugar, a integridade da estrutura do arquivo; a seguir, verifica a correspondência entre dados e
índices, consertando e reconstruindo qualquer índice inválido.
Nota: Antes de executar o ZIMFIX, execute o ZIMDD que gera arquivos estruturais da base de dados para
uso do ZIMFIX.
Por exemplo, para verificar a integridade dos arquivos de dados correspondentes as entidades com nomes:
Clientes e Produtos, execute os seguintes comandos a nível do sistema operacional:
zimdd
zimfix Clientes
zimfix Produtos
4) DETECTAR OBJETOS CORROMPIDOS VIA Error! Reference source not found.
Você também pode selecionar e corrigir os objetos considerados corruptos pelo ZOM (ou seja, out-of-date).
Um objeto é considerado corrupto se ele depende de outro objeto que tenha sido apagado ou movido para
outro diretório. No comando do exemplo, serão selecionados e listados todos os objetos corruptos:
ZOMList + p ec
5) ESTRATÉGIAS GERAIS
Garantir que o seu banco de dados permanece livre de corrupção envolve:
� manter cópias de backup de seu banco de dados
� reconhecimento das causas potenciais de corrupção de banco de dados
� determinar uma data ou período para verificar a integridade de seu banco de dados
� saber como verificar seu banco de dados para a corrupção
� saber usar suas cópias de backup para restaurar um banco de dados corrompido.
Zim 8.x – Como Recuperar Uma Base de Dados Corrompida
20
6) INTEGRIDADE E SEGURANÇA DE BANCOS DE DADOS ZIM.
O ZIM inclui um conjunto de comandos que os administradores podem usar para implementar providências de
segurança em suas aplicações. O primeiro nível de segurança é o acesso do usuário, o qual exige que o usuário
se “conecte” com uma identificação e senha. Além do simples acesso à aplicação, podemos estabelecer níveis
de permissão para objetos individuais da base de dados por tipo de operação (isto é, leitura, gravação, etc.) e
tipo de usuário da aplicação (propriétário, grupo e outros). Os níveis de permissão podem ser aplicados a
campos individuais da base de dados, se desejado. Para uma segurança adicional, pode ser especificada a
encriptação do armazenamento físico dos dados no disco.
NOTA: Recomendamos a leitura dos tutoriais : “Transações e controle de locks”
“Config.db Comentado para zim 7.11”.
“Alternativas de segurança em Zim”.
Download

2º TERMO ADITIVO AO CONTRATO DE PRESTAÇÃO DE