Restaurar backup de apenas uma tabela com ARCHECKER

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

Backups gerados através de ontape possuem certas desvantagens sobre o onbar, uma delas era impossibilidade de restaurar apenas uma tabela.
A partir da versão 10 do Informix este recurso foi adicionado no comando archecker (originalmente utilizado para validar um arquivo de backup), onde ficou muito fácil restaurar uma ou mais tabelas individualmente, tanto para backups feitos com ontape ou onbar, além de permitir trabalhar alguns recursos como logical log, filtros, paralelismo, exclusão de dbspace e geração direta para arquivo texto.

Na realidade este tipo de recurso já existia nas versões anteriores, digo recurso porque não funcionava exatamente igual. Mas se você pesquisar no site da IBM irá encontrar um artigo explicando como utiliza-lo na versão 7 e 9.

  1. Características
    1. Limitações e outras características
    2. Alguns cuidados
  2. Arquivo AC_CONFIG
  3. Comando ARCHECKER
  4. Comandos SQL
  5. Exemplos
    1. Ambiente de teste
    2. Exemplos



Características


  • Funciona com backups feitos pelo ontape e onbar
  • Restaura uma ou mais tabelas em uma única execução.
  • Pode restaurar os dados diretamente para arquivo texto em formato delimitado ou binário.
  • Pode restaurar os dados para a tabela original ou para uma nova tabela.
  • Permite restaurar dados para uma tabela com estrutura diferente.
  • Permite realizar restaurações apenas do backup físico (WITH NO LOG)
  • Permite realizar restaurações aplicando todas as alterações do LOGICAL LOG
  • Permite realizar restaurações POINT-IN-TIME , onde é especificado a data/hora.
  • Permite filtrar dados a serem restaurados facilmente, com uma clausula WHERE de um SELECT.
  • Quando realizado a restauração com LOGICAL LOG é possível realizar a restauração em etapas (phys, stage, apply)
  • Permite realizar a restauração física em paralelo de uma tabela.
    Onde é executado o comando archecker mais de uma vez, cada execução com uma configuração para um dbspace da tabela.


Limitações e outras características


  • É necessário que a instancia esteja online, devido a necessidade de trabalhar com o banco de dados sysutils
  • Não é permitido ter duas tabelas destinos para uma única tabela na mesma execução.
  • Em restauração para arquivo texto, não é feito a restauração lógica.
  • Se abortado uma restauração no meio (staging/apply), em testes, não foi possível reinicia-lo. Foi necessário refazer do zero.
  • O parâmetro -l tem preferencia sobre o parâmetro RESTORE.
  • Utiliza o arquivo de configuração ac_config definido na variável de ambiente $AC_CONFIG
    Se não houver variável definida o arquivo $INFORMIXDIR/etc/ac_config.std é utilizado.
  • Para especificar qual tabela e como será restaurado é necessário criar um schema file
    Neste arquivo irá conter alguns comandos SQLs e outros específicos do archecker.
    Deverá ser informado: banco de dados, tabela origem, tabela destino, filtros, data para restauração e outros parâmetros.
  • Utiliza o banco de dados sysutils para armazenar informações sobre o processo (tabelas acu_*).
  • Quando feita a geração do staging ele analisa os logical logs e salva as informações na tabela sysutils:acu_log_stage onde o volume gerado pode ser muito alto, necessitando assim de áreas em disco para este banco de dados.
    Em um dos testes, a geração do staging para uma analise dos logical logs onde foram incluídos 270mil registros em uma tabela, foi necessário 100 MB para a tabela sysutils:acu_log_stage.


Alguns cuidados


  • Se utilizado LOCALE, deve-se definir o DB_LOCALE e CLIENT_LOCALE.
  • Ao restaurar os dados em uma tabela já existente, automaticamente é desabilito as triggers, indices, constraints e etc, reabilitando ao final do processo, onde automaticamente indices e constraints serão recriados.
    Recomenda-se excluir estes objetos antes de iniciar a restauração.
  • Se houver um ALTER, DROP ou TRUNCATE durante o logical restore, ele irá abortar o processo ao atingir um destes comandos.
  • Quando utilizado logical restore é adicionado duas colunas na tabela restaurada com as informações de partnum/rowid do registro original, também é criado um indice para a coluna de rowid no mesmo dbspace (ou no dbspace especificado pelo comando SET WORKSPACE)
    Portanto deve-se tomar cuidado com o volume de dados a serem restaurado já que novos campos e indices serão criados.
  • Antes de executar uma nova restauração, recomenda-se limpar os dados da ultima restauração com o comando archecker -DX.
    Este comando irá limpar o diretório AC_STORAGE e tabelas sysutils:acu_*
  • A estrutura das tabelas a serem restauradas não são validadas durante a restauração, se não possuir a estrutura exatamente igual, poderá gerar resultados imprevisíveis.


Arquivo AC_CONFIG


Este arquivo é especificado através da variáve de ambiente $AC_CONFIG, nele é definido algumas configurações:
    AC_DEBUG      : Informações para debug serão impressas no log
    AC_LTAPEBLOCK : Tamanho de bloco dos logical logs. Se não informado 
                    é utilizado o tamanho salvo no ONCONFIG
    AC_LTAPEDEV   : Device, arquivo ou diretório onde se encontra os arquivos
                    de logical log
    AC_TAPEBLOCK  : Tamanho de bloco dos backup físico. Se não informado 
                    é utilizado o tamanho salvo no ONCONFIG
    AC_TAPEDEV    : Device, arquivo ou diretório onde se encontra os arquivos
                    de backup físico, nível 0,1 e 2
    AC_MSGPATH    : Local onde será salvo arquivo de log
    AC_SCHEMA     : Arquivo "schema file" que irá conter os comandos SQLs para 
                    restauração. Pode ser informado via linha de comando.
    AC_STORAGE    : Diretório para salvar informações durante o processo
    AC_VERBOSE    : Nível de detalhe dos logs gerados.
    
DICA: Se estiver utilizando a versão 11 utilize o esquema de diretórios para organizar os logical logs, assim não é necessário intervenção durante o processo para ficar "montando" ou reapontando os arquivos de logs, o archecker consegue identificar e ler automaticamente cada um deles.

Comando ARCHECKER


Sintaxe básica
    archecker [-t|-b] [-s][-v][-X][-d][-D] [-f [arquivo]] [-l phys,stage,apply]
      -t  Restaurar backup realizado com o ontape
      -b  Restaurar backup realizado com o onbar
      -s  Imprime status da execução
      -v  Imprime status em modo mais detalhado
      -X  Define que a execução é uma restauração de tabela e deverá ler o schema file
          definido no parâmetro AC_SCHEMA (se o parâmetro -f não for especificado)
      -d  Antes da execução remove os dados já existentes (AC_STORAGE)
      -D  Idem ao -d porém também limpa as tabelas no banco sysutil quando especificado
          com o parâmetro -X
      -f  Especifica o schema file, sobreponto o parâmetro AC_SCHEMA
      -l  Define qual nível de restauração será feita, onde pode ser especificado
          uma ou mais opções separados por virgula, se não informado este parâmetro
          é considerado as três fases:
          * phys : restauração física
          * stage: Passo intermediário onde identifica as transações do logical log 
                   e salva as informações no banco sysutils
          * apply: Aplica as alterações do Logical Log.
          Este parâmetro sobrepões o comando RESTORE no schema file
    


Comandos SQL


Estes comandos são válidos apenas no arquivo schema utilizado pelo archecker.
  • DATABASE
    Seleciona o nome do banco de dados
    Se o banco de dados for padrão ANSI é necessário declarar a opção.
  • CREATE TABLE
    Declara a estrutura da tabela que será restaurada, precisa ser exatamente igual de quando o backup foi criado.
    Também é utilizado para *opcionalmente* declarar a tabela destino. Se a tabela destino não for declarada, é utilizado a mesma estrutura da tabela origem, se esta já existir a estrutura precisa ser idêntica e então os dados restaurados serão adicionados a ela.
    A sintaxe utilizada é idêntica ao padrão do Informix, utilizado normalmente.
    Apesar de poder declarar configurações como tamanho de extents, locks, checks, constraints e etc, apenas as colunas e configurações de armazenamento (fragmentos/dbspaces) são considerados.
    Para tabelas fragmentadas, apenas os dbspaces listados são restaurados.
  • CREATE EXTERNAL TABLE
    Utilizado para identificar apenas tabelas destinos que serão geradas para arquivo texto ou binário.
    A sintaxe já não segue o padrão Informix e sim uma sintaxe especifica do archecker. Quando utilizado a geração para arquivo texto não é possível restaurar os Logical Logs.
    O arquivo gerado no formato binário pode ser carregado no banco de dados através do utilitário HPL utilizando a opção "no conversion".
  • INSERT INTO ... SELECT ... FROM
    Comando utilizado para identificar quais dados serão recuperados através de filtros.
    Existe alguma limitações na utilização dos filtros, onde apenas os operadores básicos podem ser utilizados, nenhuma função, procedure, sub-queries, views e joins podem ser utilizados.
  • RESTORE
    Define a data na restauração POINT-IN-TIME.
    Se informado o parâmetro -l na linha de comando, está terá preferência.
    Se informado uma data, sua formatação deverá seguir o padrão de conversão do LOCALE definido para DATETIME.
  • SET WORKSPACE
    Define dbspace para criação do indice criado automaticamente em uma recuperação com logical log.
  • SET COMMIT
    Na restauração *física*, define a quantidade de registros a serem incluídos antes dos dados serem confirmados.
    Na restauração *lógica* este parâmetro não tem efeito, uma vez que é seguido as transações no logical log.


Exemplos


Ambiente de teste


Para os exemplos abaixo foi utilizado uma única tabela com aproximadamente 70 mil registro e criado um backup Nivel 0 no dia 26/Nov/2009 as 17:41 (quinta-feira).
Foi criado um script para incluir 100 registro a cada 10 segundos. Este script foi executado até atingir aproximadamente 270 mil registros, gerando logical logs suficiente para o teste.
Não foi realizado backup nível 1 e 2.
A configuração do local dos Logical logs foi apontada para diretório.


Exemplos


    # Restauração de uma tabela para um arquivo texto
    # - Restauração sem especificar o parâmetro -l , sem comando RESTORE
    # - sem especificar dbspaces
    # RESULTADO: 
    #   Mesmo sem especificar o dbspace, ele achou e restaurou a tabela.
    #   Finalizou sem realizar a restauração lógica porque esta não é suportada
    #   quando gerado para arquivo texto.
    $ grep -v ^# $AC_CONFIG
    AC_MSGPATH      /tmp/ac_msg.log         # archecker message log
    AC_STORAGE      /tmp/archecker                    # Directory used for temp storage
    AC_VERBOSE      1                       # 1 verbose messages 0 terse messages
    AC_TAPEDEV    /ifmxdados/physbkp/codsrv222_10_20091126_174150_L0
    
    $ cat restore1.sql
      DATABASE teste1 ;
      CREATE TABLE tab1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null) ;
      CREATE EXTERNAL TABLE res_tab1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null
        ) using ('/tmp/tab1.a.unl',delimited);
      INSERT INTO res_tab1 SELECT * FROM tab1;
    $ archecker  -tvdsX -f restore1.sql
    $ cat /tmp/ac_msg.log
      2009-12-01 13:15:35                                            
      -----------------------------------------                      
      STATUS: IBM Informix Dynamic Server Version 11.50.UC5DE        
      Program Name:   archecker                                      
      Version:        8.0                                            
      Released:       2009-07-14 19:19:21                            
      CSDK:           IBM Informix CSDK Version 3.50                 
      ESQL:           IBM Informix-ESQL Version 3.50.UC4             
      Compiled:       07/14/09 19:19  on Linux 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 
    
    > STATUS: Arguments [-tvdsX -f restore1.sql]
      STATUS: AC_STORAGE               /tmp/archecker
      STATUS: AC_MSGPATH               /tmp/ac_msg.log
      STATUS: AC_VERBOSE               on             
      STATUS: AC_TAPEDEV               /ifmxdados/physbkp/codsrv222_10_20091126_174150_L0
      STATUS: AC_TAPEBLOCK             32 KB                                             
      STATUS: AC_LTAPEDEV              /ifmxdados/llogbkp/                               
      STATUS: AC_LTAPEBLOCK            32 KB                                             
      STATUS: AC_SCHEMA                restore1.sql                                      
      TIME: [2009-12-01 13:15:35] All old validation files removed.                      
      STATUS: Dropping old log control tables                                            
      STATUS: Extracting table teste1:tab1 into teste1:res_tab1                          
    > WARNING: Source table [tab1] has no storage option                                 
    > WARNING: No storage space to scan                                                  
      STATUS: Tape type:      Archive Backup Tape                                        
      STATUS: OnLine version: IBM Informix Dynamic Server Version 11.50.UC5DE            
      STATUS: Archive date:   Thu Nov 26 17:41:50 2009                                   
      STATUS: Archive level:  0                                                          
      STATUS: Tape blocksize:  32768                                                     
      STATUS: Tape size:  2147483647                                                     
      STATUS: Tape number in series:  1                                                  
      TIME: [2009-12-01 13:15:37] Phys Tape 1 started                                    
      STATUS: starting to scan dbspace 1 created on 2009-11-26 17:41:50.                 
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 6 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 2 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 3 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 11 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 12 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 13 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
    > TIME: [2009-12-01 13:15:38] Found Partition tab1 in space dados2 (0x00D0003E).
      STATUS: starting to scan dbspace 14 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      STATUS: starting to scan dbspace 7 created on 2009-11-26 17:41:50.
      STATUS: Archive timestamp 0X04C5CC9D.
      TIME: [2009-12-01 13:15:39] Tape 1 completed
      STATUS: Scan PASSED
      STATUS: Control page checks PASSED
      STATUS: Table checks PASSED
      STATUS: Table extraction commands 1
    > STATUS: Tables found on archive 1
    > STATUS: LOADED: teste1:res_tab1 produced 72018 rows.
      TIME: [2009-12-01 13:15:39] Physical Extraction Completed
    > STATUS: No logical recovery required.
      TIME: [2009-12-01 13:15:39] Unload Completed
      STATUS: archecker completed Physical Restore pid = 17076 exit code: 2
    
    # Restauração de uma tabela para outra tabela
    # - Restauração especificando os parâmetro -l phys, -l stage e -l apply 
    #   em comandos separados, 
    # - sem comando RESTORE
    # - sem especificar dbspaces
    # RESULTADO: 
    #   Criou a tabela res_tab1 no mesmo dbspace que a tabela original e carregou   
    #   ela com os dados do backup físico + lógico.
    $ cat restore2.sql
      DATABASE teste1 ;
      CREATE TABLE tab1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null);
      CREATE TABLE res_tab1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null) ;
      INSERT INTO res_tab1 SELECT * FROM tab1;
    # Comando para limpar o diretório AC_STORAGE e apagar as 
    # tabelas sysutils:acu_*
    $ archecker  -DX
    $ archecker  -tvX  -l phys -f restore2.sql
    $ cat /tmp/ac_msg.log
      ...
      Table extraction commands 1
      Tables found on archive 1
      LOADED: teste1:res_tab1 produced 72018 rows.
      Oldest logid needed for logical restore: 409
    $ archecker  -tvX  -l stage -f restore2.sql
    $ cat /tmp/ac_msg.log
      ...
      Switching to log 430
      Log file /ifmxdados/llogbkp/codsrv222_10_Log0000000431
      Log tape backup date:   Tue Dec  1 13:49:00 2009
      Tape blocksize: 32768
      Tape size: 2147483647
      Tape number in series: 1
      Switching to log 431
    $ archecker  -tvsX  -l apply -f restore2.sql
      ...
      Logically recovered teste1:res_tab1 Inserted 279300 Deleted 0 Updated 0
    
    # Restauração de uma tabela para outra tabela com POINT-IN-TIME
    # - Restauração sem especificar o parâmetro -l. (phys,stage,apply)
    # - Especificado o comando RESTORE com data/hora (point-in-time)
    # - sem especificar dbspaces
    # RESULTADO: 
    #   Criou a tabela res_tab1 no mesmo dbspace que a tabela original e carregou   
    #   ela com os dados do backup físico + lógico (parcial).
    
    # No arquivo abaixo, repare a data utilizada no comando RESTORE
    # foi preciso informa-la neste padrão devido o CLIENT_LOCALE estar definido 
    # para pt_BR.8859-1. Observação: o acento agudo no "Sáb" é obrigatório.
    # Se não informado corretamente a data, o processo não irá executar e irá retornar
    # erro de conversão da data.
    $ cat restore3.sql
      DATABASE teste1 ;
      CREATE TABLE TAB1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null);
      CREATE TABLE RES_TAB1
        ( cod integer, desc lvarchar(500), desc2 nvarchar(255), seq serial not null) ;
      INSERT INTO res_tab1 SELECT * FROM tab1;
      RESTORE TO "Sáb 28 nov 2009, 11:15:00";
    
    $ archecker  -tvX  -f restore3.sql
    $ cat /tmp/ac_msg.log
      ...
      STATUS: Log tape log block header logid=420
      TIME: [2009-12-01 16:31:55] Log Tape 420_1 started
      TIME: [2009-12-01 16:31:55] Switching to log 420
    > STATUS: Recovery PIT(Sat Nov 28 11:15:00 2009) reached logid:420 page:0x0038A offset:0x0018
      TIME: [2009-12-01 16:31:55] Tape 1 completed
    > STATUS: Recovery PIT reached.
      TIME: [2009-12-01 16:31:55] Scanner (20533) is done scanning logs
      STATUS: Log stager elapsed processing time action.  If this is the only error then the table/data has been correctly restored.  Add more log space and re-run the alter command.
      ERROR: Failed to remove columns(ifx_tlr_partnum,ifx_tlr_rowid) from table teste1.res_tab1
    > STATUS: Logically recovered teste1:res_tab1 Inserted 279300 Deleted 0 Updated 0
      STATUS: Log applier processing time
      TIME: [2009-12-01 16:35:13] Unload Completed
      STATUS: archecker completed applying pid = 20474 exit code: 3
    
    # Repare que foi adicionado as duas colunas ifx_* e criado um indice
    # devido o restore ter sido com LOGICAL LOG.
    $ dbschema -d teste1 -t res_tab1
    DBSCHEMA Schema Utility       INFORMIX-SQL Version 11.50.UC5DE
    { TABLE "informix".res_tab1 row size = 775 number of columns = 6 index size = 9 }
    create table "informix".res_tab1
      (
        cod integer,
        desc lvarchar(500),
        desc2 nvarchar(255),
        seq serial not null  disabled ,
        ifx_tlr_rowid integer,
        ifx_tlr_partnum integer
      );
    revoke all on "informix".res_tab1 from "public" as "informix";
    create index "informix".tlrres_tab1727 on "informix".res_tab1
        (ifx_tlr_rowid) using btree ;
    
    

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

Restore de tabela (TLR)

Olá. Há um ótimo tutorial online, publicado no DeveloperWorks, sobre a dúvida da Claudete. O link é este: http://www.ibm.com/developerworks/db2/library/techarticle/dm-0608kim/ Abç

Restore de tabela através do archecker - onbar

Gostaria de ver também exemplos de restauração de uma tabela do backup do onbar com a configuração do ixbar até um determinado log ou um momento (data e hora). Obrigada.

RE: Restore de tabela...

Ola Claudete,
Desculpe, mas não pretendo escrever nada sobre o onbar até o lançamento da próxima versão do Informix (v12 Panther). Apenas para explicar a razão para isso é que se for escrever algo sobre o onbar aqui, serei obrigado a demonstrar com o ISM , que está com os dias contatos (finalmente!). Então vou aguardar o próximo gerenciador de backup para escrever algo, ok.

Abraço
César

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.