Tutorial Parte 5 - Restaurando um backup (ontape)

Versão para impressãoEnviar para amigoVersão PDF

No tutorial anterior demonstrei vários meios de gerar o backup do Informix utilizando a ferramenta ontape. Agora vou demonstrar a parte mais importante, restaurar estes backups!

  1. Visão geral do ambiente que será restaurado
  2. Simulando uma parada não programada
  3. Restaurando o Banco de Dados

Visão geral do ambiente que será restaurado


Já foi demonstrado como gerar o backup para: Fita, STDIO, Diretório e Arquivo

Aqui irei trabalhar apenas com a configuração de diretório. Mas não se preocupe porque a restauração a partir de outra configuração é praticamente igual.

O ambiente que utilizei para gerar o backup é o mesmo descrito no Tutorial Parte 3 - Montando uma base de teste onde as características da instancia e do ambiente são:

  • Uma única tabela, com 260.474 registros e ocupando um espaço de 340 MBytes em disco.
  • Somando os demais dados (sysmaster, sysadmin, etc) a massa de dados da Instancia totaliza 350 MBytes.
  • O backup é gerado para diretório
  • O backup é gerado com utilização de filtro : compactação com gzip
  • Foi gerado o backup fisico nos Niveis 0, 1 e 2
  • Foi gerado o backup lógico dos logical logs.
  • Entre os backups fisicos e lógicos foram alterados vários dados.

Abaixo está alguns outputs de comandos que lista a situação do ambiente após os backups fisico e lógico.

# O comando abaixo foi a geração do backup fisico Nivel 2, nele é informado
# o numero do logical log utilizado no momento do backup e que será necessário na 
# restauração
$ ontape -s -L 2
Using the backup and restore filter /usr/bin/gzip -c.
100 percent done.
File created: /ifmxdados/physbkp/note-cim_1_L2
Please label this tape as number 1 in the arc tape sequence.
This tape contains the following logical logs:
 76
Program over.

# Neste comando é exibido os Niveis de backup realizados, data e
# logical log no momento do backup.
$ onstat -g arc
IBM Informix Dynamic Server Version 11.50.UC4DE -- On-Line -- Up 00:00:14 -- 984904 Kbytes
num   DBSpace            Q Size Q Len  Buffer partnum    size     scanner
Dbspaces - Archive Status
name               number level date             log        log-position
rootdbs            1      0     07/29/2009.15:49 74         0x4c7018
                          1     07/29/2009.16:41 76         0x3a1124
                          2     07/29/2009.16:48 76         0x86709c
llog               2      0     07/29/2009.15:49 74         0x4c7018
                          1     07/29/2009.16:41 76         0x3a1124
                          2     07/29/2009.16:48 76         0x86709c
plog               3      0     07/29/2009.15:49 74         0x4c7018
                          1     07/29/2009.16:41 76         0x3a1124
                          2     07/29/2009.16:48 76         0x86709c
dados1             5      0     07/29/2009.15:49 74         0x4c7018
                          1     07/29/2009.16:41 76         0x3a1124
                          2     07/29/2009.16:48 76         0x86709c
dados2             6      0     07/29/2009.15:49 74         0x4c7018
                          1     07/29/2009.16:41 76         0x3a1124
                          2     07/29/2009.16:48 76         0x86709c


# Na geração do ultimo backup fisico (Nivel 2) o logical log estava
# posicionado no número 76. Após isso executei mais alguns updates
# que fizeram avançar o logical log para a posiçào 78. 

# Arquivos de backup fisicos , Nivel 0, 1 e 2.
/ifmxdados/physbkp$ ls -oh
total 22M
-rw-rw---- 1 informix  13M 2009-07-29 15:49 note-cim_1_L0
-rw-rw---- 1 informix 7.0M 2009-07-29 16:42 note-cim_1_L1
-rw-rw---- 1 informix 1.5M 2009-07-29 16:48 note-cim_1_L2

# Arquivos de backup lógicos, até o log 77 (ultimo log backupeado).
/ifmxdados/llogbkp$ ls -oh
total 6.2M
-rw-r----- 1 informix 1.4M 2009-07-29 17:29 note-cim_1_Log0000000073
-rw-r----- 1 informix 1.2M 2009-07-29 17:29 note-cim_1_Log0000000074
-rw-r----- 1 informix 1.3M 2009-07-29 17:29 note-cim_1_Log0000000075
-rw-r----- 1 informix 1.2M 2009-07-29 17:29 note-cim_1_Log0000000076
-rw-r----- 1 informix 1.1M 2009-07-29 17:29 note-cim_1_Log0000000077

# Estes são os chunks utilizados
$ onstat -d 
Chunks
address  chunk/dbs     offset     size       free       bpages     flags pathname
70a86968 1      1      0          100000     83035                 PO-B- /ifmxdados/rootdbs.ch1
70b89910 2      2      0          40000      4947                  PO-B- /ifmxdados/llog.ch1
70b89ae8 3      3      0          75000      4947                  PO-B- /ifmxdados/plog.ch1
70b89cc0 4      4      0          35000      34947                 PO-B- /ifmxdados/temp1.ch1
713f0018 5      5      0          75000      73335                 PO-B- /ifmxdados/dados1.ch1
713f01f0 6      6      0          100000     13099                 PO-B- /ifmxdados/dados2.ch1

# Estes são os arquivos dos chunks
/ifmxdados$ ls -oh *ch*
-rw-rw---- 1 informix 147M 2009-06-18 16:23 dados1.ch1
-rw-rw---- 1 informix 391M 2009-07-29 17:26 dados2.ch1
-rw-rw---- 1 informix  79M 2009-07-29 22:34 llog.ch1
-rw-rw---- 1 informix 147M 2009-07-29 22:34 plog.ch1
-rw-rw---- 1 informix 196M 2009-07-29 22:34 rootdbs.ch1
-rw-rw---- 1 informix  69M 2009-07-29 22:19 temp1.ch1

# Estes arquivos são os arquivos e diretórios que copiei para uma
# maquina remota. São os dados necessários para restaurar o meu ambiente.
# Os diretórios physbkp e llogbkp contém os arquivos de backup fisico e lógico.
# Observação: Se for perdido todos os arquivos de configuração, ainda há como
# restaurar o banco de dados, porém você terá um certo trabalho para recuperar
# o ONCONFIG a partir do backup fisico e reescrever manualmente todas as configurações. 

$ cd /maquina.remota
$ ls -oh
total 564K
-rwxr-x--- 1 informix  20K 2009-07-29 22:38 alarmprogram.sh
-rwxr-x--- 1 informix 4.6K 2009-07-31 11:17 env.idstitan
drwxrwx--- 2 informix 4.0K 2009-07-29 17:29 llogbkp
-rw-r----- 1 informix  52K 2009-07-29 22:38 onconfig.idstitan
-rw-r----- 1 informix 461K 2009-07-29 22:39 online.log
drwxrwx--- 2 informix 4.0K 2009-07-29 23:07 physbkp
-rw-r----- 1 informix  648 2009-07-29 22:38 sqlhosts.idstitan

Simulando uma parada não programada


Agora vou *simular* uma parada não programada onde a maquina seria totalmente perdida.
Para esta simulação irei realizar os seguintes passos:
  1. Matar os processos do banco (kill)
  2. Desalocar a memória - shared memory) - (ipcrm)
  3. Remover todos os arquivos de chunks (rm)
  4. Remover toda a instalação do informix (rm)
  5. Remover todos demais arquivos relacionados ao Informix (rm)

# Com o usuário root , executo os comandos abaixo
# ps -fC oninit
UID        PID  PPID  C STIME TTY          TIME CMD
informix  5251     1  0 22:19 ?        00:00:01 oninit
root      5252  5251  0 22:19 ?        00:00:00 oninit
root      5287  5252  0 22:19 ?        00:00:00 oninit
root      5289  5252  0 22:19 ?        00:00:00 oninit
root      5290  5252  0 22:19 ?        00:00:00 oninit
root      5291  5252  0 22:19 ?        00:00:00 oninit
root      5292  5252  0 22:19 ?        00:00:00 oninit
root      5309  5252  0 22:19 ?        00:00:00 oninit
root      5329  5252  0 22:19 ?        00:00:00 oninit
root      5330  5252  0 22:19 ?        00:00:00 oninit
root      5331  5252  0 22:19 ?        00:00:00 oninit
root      5332  5252  0 22:19 ?        00:00:00 oninit
# pkill -9 oninit
# ps --no-headers -fC oninit | wc  -l
0
# ipcs  -p
------ Shared Memory Creator/Last-op --------
shmid      owner      cpid       lpid
327680     cmartins   4735       4735
425985     root       5251       5251
458754     root       5251       5251
------ Message Queues PIDs --------
msqid      owner      lspid      lrpid

# Utilizando o PID do processo que matei, identifico a memória
# que era alocada para ele.
# ipcrm -m 425985 -m 458754

# ipcs  -p
------ Shared Memory Creator/Last-op --------
shmid      owner      cpid       lpid
327680     cmartins   4735       4735
------ Message Queues PIDs --------
msqid      owner      lspid      lrpid

# Apago todos os chunks
# cd /ifmxdados
# rm -v *ch*
removed `dados1.ch1'
removed `dados2.ch1'
removed `llog.ch1'
removed `plog.ch1'
removed `rootdbs.ch1'
removed `temp1.ch1'

# Apago o diretório de instalação do Informix
# ls -ld /dados/IBM/ids1150uc4de
drwxr-xr-x 26 informix informix 4096 2009-06-10 14:10 /dados/IBM/ids1150uc4de
# rm -rf /dados/IBM/ids1150uc4de

# Apago o diretório de parametros de segurança 
# ls -ld /etc/informix
dr-xr-xr-x 2 root root 4096 2009-06-11 16:03 /etc/informix
# rm -rf /etc/informix

# Pronto, removemos todo os arquivos do Informix e arquivos relacioados aos dados.

Restaurando o Banco de Dados

Para realizar a restauração em um ambiente que foi todo perdido você terá que se preocupar com os seguintes itens:

  • A arquitetura (RISC, CISC, x86, etc) da maquina onde a instancia será restaurada precisa ser mantida
  • A versão do sistema operacional precisa ser a mesma utilizada anteriormente
  • A versão da instalação do Informix precisa ser a mesma.
  • Possuir cópia dos arquivos de configurações, scripts (update statistics, etc) e logs
  • Ter identificação de quais logs possui salvo e quais logs irá precisar restaurar.
  • Criação de grupo/usuários
  • Reconfigurações de sistema operacional: Parâmetros de kernel.

Itens que não serão um problema, desde que você saiba como administra-los

  • Local de armazenamento do dados (chunks) não precisa ser no mesmo tipo de dispositivo
    Por exemplo: se você utilizava RAW devices, pode restaurar em file system sem problemas.
  • Configuração na quantidade de CPUs e memória não precisa ser a mesma.
  • A configuração de conectividade (IPs,SOCTCP,IPCSHM,IPCSTR) não precisa ser a mesma
  • A instalação do produto não precisa ser no mesmo diretório
    Mas se trocado o diretório é preciso rever todas as referências feitas a ele
  • Os IDs internos do usuário e grupo informix não precisam ser os mesmos de antes.
  • Se antes era utilizado Role Separation, não é necessário configurar na restauração
  • O path dos arquivos de backup não precisam ser o mesmo, Pode alterar os parametros TAPEDEV e LTAPEDEV no ONCONFIG.

Para realizar a restauração de um backup em um ambiente novo, você deverá:

  • Criar o grupo e usuário informix.
  • Instalar o produto Informix
  • Copiar de volta os arquivos de configuração do ambiente
    ONCONFIG, SQLHOSTS, alarmprogram, etc.
  • Recuperar ou recriar as shells que definem as variáveis de ambiente
  • Recriar , reconfigurar arquivos/paths dos chunks
  • Verificar se tudo que é necessário está ok.
  • Iniciar restauração com o comando ontape
Não irei demonstrar todos os passos descrito acima pois boa parte deles já foram demonstrado nos primeiros tutoriais
# Neste ponto já realizei a instalação do produto

# Copio de volta os arquivos de configurações e shell de variáveis
$ cp /maquina.remota/{onconfig.idstitan,sqlhosts.idstitan,alarmprogram.sh} /dados/IBM/ids1150uc4de/etc
$ cp /maquina.remota/env.idstitan /usr/local/bin

# Abaixo estou recriando os arquivos arquivos de chunks
# Executando com root recrio o diretório onde os chunks estavam alocados.
# mkdir /ifmxdados
# chown informix:informix /ifmxdados
# exit
$ cd /ifmxdados
$ > dados1.ch1
$ > dados2.ch1
$ > llog.ch1
$ > plog.ch1
$ > rootdbs.ch1
$ > temp1.ch1
$ chmod 660 *ch*
$ ls -oh *ch*
-rw-rw---- 1 informix 0 2009-07-30 22:54 dados1.ch1
-rw-rw---- 1 informix 0 2009-07-30 22:54 dados2.ch1
-rw-rw---- 1 informix 0 2009-07-30 22:54 llog.ch1
-rw-rw---- 1 informix 0 2009-07-30 22:54 plog.ch1
-rw-rw---- 1 informix 0 2009-07-30 22:54 rootdbs.ch1
-rw-rw---- 1 informix 0 2009-07-30 22:55 temp1.ch1

# Recrio a estrutura de diretório onde os backups eram gerados
# e copio eles de volta.
# Observação: Verificar o owner e permissões, os arquivos
# precisam pertencer ao usuário/grupo informix e ter permissão de
# leitura apenas para o owner e grupo
$ mkdir /ifmxdados/physbkp
$ mkdir /ifmxdados/llogbkp
$ chmod 770 /ifmxdados/{physbkp,llogbkp}
$ cp /maquina.remota/physbkp/* /ifmxdados/physbkp
$ cp /maquina.remota/llogbkp/* /ifmxdados/llogbkp
$ chmod 440 /ifmxdados/{physbkp,llogbkp}/*
$ cd /ifmxdados/physbkp
$ ls -oh 
total 22M
-r--r----- 1 informix  13M 2009-08-01 10:10 note-cim_1_L0
-r--r----- 1 informix 7.0M 2009-08-01 10:10 note-cim_1_L1
-r--r----- 1 informix 1.5M 2009-08-01 10:10 note-cim_1_L2
$ cd /ifmxdados/llogbkp
$ ls -oh 
total 6.2M
-r--r----- 1 informix 1.4M 2009-08-01 10:11 note-cim_1_Log0000000073
-r--r----- 1 informix 1.2M 2009-08-01 10:11 note-cim_1_Log0000000074
-r--r----- 1 informix 1.3M 2009-08-01 10:11 note-cim_1_Log0000000075
-r--r----- 1 informix 1.2M 2009-08-01 10:11 note-cim_1_Log0000000076
-r--r----- 1 informix 1.1M 2009-08-01 10:11 note-cim_1_Log0000000077


# Defino as váriaveis de ambiente
$ . env.idstitan

# Verifico se as configurações básicas para a restauração estão ok.
# Aqui verifico as variaveis de ambiente
$ env |grep INFORMIX
INFORMIXDIR=/dados/IBM/ids1150uc4de
INFORMIXTERM=terminfo
INFORMIXCONTIME=10
INFORMIXSERVER=idstitan
INFORMIXSQLHOSTS=/dados/IBM/ids1150uc4de/etc/sqlhosts.idstitan
INFORMIXCONRETRY=3

# Observação: Mesmo com a instancia off-line, os comandos "onstat -c" e "onstat -m"
# funcionam .
$ onstat -c |egrep "^Configuration|^L?TAPE|^DBSERVER"
Configuration File: /dados/IBM/ids1150uc4de/etc/onconfig.idstitan
DBSERVERNAME idstitan
DBSERVERALIASES
TAPEDEV /ifmxdados/physbkp
TAPEBLK 32
TAPESIZE 10000
LTAPEDEV /ifmxdados/llogbkp
LTAPEBLK 32
LTAPESIZE 100000

# Verifico se a parte de conectividade está ok
$ grep $INFORMIXSERVER $INFORMIXSQLHOSTS
idstitan   onsoctcp   note-cim  9088
$ grep note-cim /etc/hosts
172.30.252.207  note-cim note-cim
$ /sbin/ifconfig |grep 172.30.252.207
          inet addr:172.30.252.207  Bcast:172.30.255.255  Mask:255.255.0.0

Após toda "infra" do banco ter sido restaurada, iniciamos a restauração efetiva dos dados.

# Para iniciar a restauração , utilize o comando ontape:
# Sintaxe: ontape [-r] [-p|-l]
# -r : Realiza restauração FULL, fisica + logica em um único processos.
# -p : Realiza restauração fisica. Ao final do procesos o banco irá ficar 
#             em "Fast Recovery" onde você poderá dar continuidade com a restauração
#             lógica ou colocar o banco online com o comando "onmode -m"
# -l : Realiza restauração lógica. 

# No nosso caso não há motivos para realizar a restauração fisica e lógica separadamente, 
# portanto irei executar o comando com o parametro -r.

$ ontape -r
Restore will use level 0 archive file /ifmxdados/physbkp/note-cim_1_L0. Press Return to continue ...
Using the backup and restore filter /usr/bin/gzip -cd.

Archive Tape Information
Tape type:      Archive Backup Tape
Online version: IBM Informix Dynamic Server Version 11.50.UC4DE
Archive date:   Wed Jul 29 15:49:01 2009
User id:        informix
Terminal id:    /dev/pts/4
Archive level:  0
Tape device:    /ifmxdados/physbkp/
Tape blocksize (in k): 32
Tape size (in k): system defined for directory
Tape number in series: 1
Backup filter:  /usr/bin/gzip -c

Spaces to restore:1 [rootdbs       ]
2 [llog            ]
3 [plog            ]
4 [dados1          ]
5 [dados2          ]

Archive Information
IBM Informix Dynamic Server Copyright 2001, 2009  IBM Corporation.
Initialization Time       06/12/2009 09:52:45
System Page Size          2048
Version                   16
Index Page Logging        OFF
Archive CheckPoint Time   07/29/2009 15:49:01

Dbspaces
number   flags    fchunk   nchunks  flags    owner                            name
1        40001    1        1        N  B     informix                         rootdbs
2        40001    2        1        N  B     informix                         llog
3        40001    3        1        N  B     informix                         plog
4        42001    4        1        N TB     informix                         temp1
5        40001    5        1        N  B     informix                         dados1
6        40001    6        1        N  B     informix                         dados2
Chunks
chk/dbs offset   size     free     bpages   flags pathname
1   1   0        100000   83063             PO-B  /ifmxdados/rootdbs.ch1
2   2   0        40000    4947              PO-B  /ifmxdados/llog.ch1
3   3   0        75000    4947              PO-B  /ifmxdados/plog.ch1
4   4   0        35000    34947             PO-B  /ifmxdados/temp1.ch1
5   5   0        75000    73335             PO-B  /ifmxdados/dados1.ch1
6   6   0        200000   26198             PO-B  /ifmxdados/dados2.ch1

# Verifique os dados dos chunks e confirme 
Continue restore? (y/n)y
# Não é necessário realizar o backup dos logical logs, Isso só deve ser 
# feito em situações de recuperar backup com a instancia on-line (warm restore).
# ou em que todo o ambiente não foi perdido e os logical logs não foram 
# préviamente backupeados.
Do you want to back up the logs? (y/n)n
Using the backup and restore filter /usr/bin/gzip -cd.

# Ao finalizar a restauração do nivel 0, será questionado se deseja 
# restaurar o Nivel 1
Restore a level 1 archive (y/n) y                     
Ready for level 1 tape                                
Restore will use level 1 archive file /ifmxdados/physbkp/note-cim_1_L1. Press Return to continue ...

Using the backup and restore filter /usr/bin/gzip -cd.

Archive Tape Information

Tape type:      Archive Backup Tape 
Online version: IBM Informix Dynamic Server Version 11.50.UC4DE 
Archive date:   Wed Jul 29 16:41:42 2009                        
User id:        informix                                        
Terminal id:    /dev/pts/6                                      
Archive level:  1                                               
Tape device:    /ifmxdados/physbkp/                             
Tape blocksize (in k): 32                                       
Tape size (in k): system defined for directory
Tape number in series: 1
Backup filter:  /usr/bin/gzip -c

# Ao finalizar a restauração do nivel 1, será questionado se deseja 
# restaurar o Nivel 2
Restore a level 2 archive (y/n) y
Ready for level 2 tape
Restore will use level 2 archive file /ifmxdados/physbkp/note-cim_1_L2. Press Return to continue ...

Using the backup and restore filter /usr/bin/gzip -cd.

Archive Tape Information
Tape type:      Archive Backup Tape
Online version: IBM Informix Dynamic Server Version 11.50.UC4DE
Archive date:   Wed Jul 29 16:48:22 2009
User id:        informix
Terminal id:    /dev/pts/6
Archive level:  2
Tape device:    /ifmxdados/physbkp/
Tape blocksize (in k): 32
Tape size (in k): system defined for directory
Tape number in series: 1
Backup filter:  /usr/bin/gzip -c

# Ao finalizar a restauração do nivel 2, será questionado se deseja 
# restaurar os Logical Logs. 
Do you want to restore log tapes? (y/n)y

Roll forward should start with log number 76
Restore will use log backup file /ifmxdados/llogbkp/note-cim_1_Log0000000076. Press Return to continue ...

Using the backup and restore filter /usr/bin/gzip -cd.
Rollforward log file /ifmxdados/llogbkp/note-cim_1_Log0000000076 ...
Using the backup and restore filter /usr/bin/gzip -cd.
Rollforward log file /ifmxdados/llogbkp/note-cim_1_Log0000000077 ...

Program over.

# Pronto, o backup está restaurado
# Analise o log do banco e verifique se tudo está ok. Ao final da 
# restauração lógica, você irá encontrar no log as informações das
# ultimas transações restauradas.
$ onstat -m 
....
11:12:34  Logical Recovery Complete.
          247 Committed, 1 Rolled Back, 0 Open, 0 Bad Locks

11:12:34  Logical Recovery Complete.

# O banco de dados estará em modo de manutenção (Quiscent).
# Para torna-lo imediamente disponível aos usuários basta coloca-lo
# em on-line:
$ onstat -
IBM Informix Dynamic Server Version 11.50.UC4DE -- Quiescent -- Up 00:20:20 -- 984904 Kbytes
$ onmode -m
$ onstat -
IBM Informix Dynamic Server Version 11.50.UC4DE -- On-Line -- Up 00:22:38 -- 984904 Kbytes

Pronto! Backup restaurado!
Mas sempre tome muito cuidado com seu ambiente, há muitas outras situações onde muitos outros arquivos de configuraçòes precisam ser salvos para que no caso de uma restauração você não tenha que perder tempo reescrevendo tudo.

3
Média: 3 (2 votos)
Sua avaliação: Nenhum

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.