Responder a este comentário

Como exportar / importar dados com dbexport / dbimport

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

Os comandos dbexport e dbimport são utilitários para exportação/importação completa de um banco de dados e são extremamente facil de trabalhar.
Eles possuem caracteristicas muito similares ao LOAD / UNLOAD / dbload , porém é praticamente um processo automatizado para todo o banco de dados.

  1. Quando utilizar?
  2. Exportando
    1. Utilizando o Server-Specifed
  3. Importando
  4. Recomendações



Quando utilizar?


Existem muitos meios de exportar/importar dados no Informix, mas o dbexport/dbimport são especialmente uteis para ocasiões em que:
  • O administrador não tem muito conhecimento do Informix.
  • A base de dados não é grande.
  • A base de dados não é utilizada 24x7.
  • É de interesse ter o backup em formato "texto puro" .
  • Migração entre versões de Informix de diferente arquiteturas (RISC-x86, HP-Linux, etc)
  • Migração de bases pequenas entre servidores.
  • Facilidade de manipular os dados e a estrutura (DDL) após exportado.

Exportando


Para exportar um banco é simples, porém é preciso ter conhecimento de algumas informações:
  • É obrigatório acesso unico e exclusivo ao banco de dados para o usuário que irá exportar o banco.
    Se houver algum usuário conectado no banco a exportação não irá ocorrer.
  • Para exportação dos formatos de data é utilizado as variáveis de ambiente DBDATE, GL_DATETIME e USE_DTENV.
  • A performance irá depender principalmente do I/O de disco onde os dados estão alocados e onde serão gerados.
  • Para melhorar performance pode-se utilizar recurso de paralelismo se definido a variável PDQPRIORITY entre outras configurações de conectividade.
  • Não é salvo: ultimo valor de campo SERIAL e modo de log do banco de dados
  • São exportados todas as informações, como: tabelas, indices, sequences, roles, grants, estatisticas, triggers, stored procedures e etc.
  • Configurações da Instancia (ONCONFIG) e dbspaces não são exportados pois não fazem parte do banco de dados, eles estão "acima" do banco.

Ao exportar uma base de dados o dbexport irá salvar todos os dados em um diretório, o nome deste diretório é o nome da base mais a extenção ".exp", durante a execução ele irá exibir o script dos objetos que estão sendo exportados.

A sintaxe básica do dbexport é:

    dbexport -d [banco_de_dados] [-ss] [-si]
    # -d [banco_de_dados] Nome da base de dados que será exportado
    # -ss   Exporta no modo "Server-Specifc" onde inclui informações
    #       como extents, locks, dbspaces, fragmentos, etc.
    # -si   Utilizado apenas com o -ss, evita que seja incluido 
    #       informações de dbspaces para indices não fragmentados
    
Exemplo de uma exportação:
    # Esta exportação é de um banco de dados de teste que contém tabelas com 
    # vários tipos de dados (TEXT, BYTE, CLOB, BLOB, etc).
    # Removi a parte do script exibida para encurtar o exemplo.
    # No final é gerado os comandos de update statistics
    $ dbexport -d dbcim
    { DATABASE dbcim  delimiter | }                                                   
    { Encoded Optical BLOB descriptor }
    grant dba to "ix_dbsa";
    grant connect to "cmartins";
    ...
    ..
    update statistics high for table t_tags (
         cod_tag, nome)
         resolution   0.50000 ;
    
    dbexport completed
    
    # Aqui está o diretório criado
    $ ls -ld *exp
    drwxr-x--- 2 informix informix 752 2009-07-16 15:36 dbcim.exp
    
    # Veja os arquivos gerados. 
    # dbcim.sql - Script DDL da base de dados
    # *.unl     - Dados exportados
    # blob* / clob* - Dados BLOBs e CLOBs.
    $ cd dbcim.exp
    $ ls
    blob9368.73b    dbcim.sql       sysbl00103.unl  t_per00118.unl  t_res00126.unl  t_tag00117.unl
    blob9368.767    sysbl00100.unl  sysbl00104.unl  t_res00121.unl  t_res00127.unl  t_tag00120.unl
    btsfs00115.unl  sysbl00101.unl  sysbl00106.unl  t_res00122.unl  t_res00129.unl
    clob9368.7bc    sysbl00102.unl  sysbl00112.unl  t_res00123.unl  t_res00130.unl
    

Ao visualizar o conteúdo do arquivo .sql você irá encontrar muitos comentários entre chaves "{}".
Não altere estes comentários a não ser que saiba o que está fazendo, pois eles são utilizados no momento da importação com o dbimport. Nestes comentários você irá encontrar várias informações, veja um exemplo abaixo.

    { TABLE "ix_dbsa".t_pergunta row size = 2018 number of columns = 7 index size = 14
                  }
    { unload file name = t_per00118.unl number of rows = 140 }
    
Se você quiser alterar o conteúdo de um arquivo de dados (*.unl) ou do arquivo de estrutura (*.sql) você pode, porém tem que saber o que está fazendo para manter a integridade de checagem que irá ocorrer durante o dbimport



Utilizando o Server-Specifed


No exemplo acima a geração foi a mais simples e padrão, onde o parâmetro -ss não foi utilizado. Quando este parâmetro é especificado muitas informações adicionais são incluidas, como:
  • Tipo de locks de cada tabela (linha ou pagina)
  • Tamanho de alocação dos extents
  • Local de armazenamento (dbspaces) de tabelas e indices
  • Local de armazenamento dos campos TEXT, BLOB
Grande parte destes parâmetros estão relacionados a configuração da Instancia, principalmente aos dbspaces existentes.
Observação: Nos scripts de tabelas que possuem campos do tipo CLOB e BLOB, sempre é gerado com o nome do dbspace onde foi alocado. Mesmo se não for especificado a opção -ss. Pessoalmente considero isto um BUG pois deveria ser exibido apenas se especificado a opção -ss.



Importando


O utilitário dbimport importa apenas dados gerados pelo dbexport e sua utlização é muito fácil.
Para utiliza-lo você precisará ter conhecimento do seguinte:
  • Onde o diretório com os dados está salvo (diretório .exp)
  • Qual será o tipo de log que será utilizado no banco de dados
  • Qual dbspace será criado o banco de dados
  • Se a geração dos dados foi utilizado o parâmetro -ss, se sim, garantir que os dbspaces necessários existem

A sintaxe básica do dbimport:

    dbimport [banco_de_dados] [-d [dbspace]] [-l [buffered] | -ansi] [-i [diretorio]]
    # [banco_de_dados] Nome do banco que será importado.
    # -d [dbspace]     Nome do dbspace onde o banco será alocado, se não informado o padrão
    #                  é o rootdbs.
    # -l               Cria banco como unbuffered
    # -l buffered      Cria banco como buffered
    # -ansi            Cria banco como padrão ANSI
    # -i [diretorio]   Caminho de onde se encontra o diretório com os dados, se não 
    #                  informado é utilizado o diretório atual.
    

Caso o banco de dados que você irá importar já exista, você tem duas soluções.

  1. Renomear ou remover o banco de dados já existente.
  2. Renomear o banco de dados que será importado, antes da importação.
Não irei falar sobre a solução 1 pois ela trata-se de outros recursos que nada tem haver com exportação/importação.
Sobre a solução 2, é bem facil aplica-la, abaixo fiz um exemplo onde renomeio o banco de dados antes de importa-lo e executo a importação.
    # Para renomear um banco exportado pelo dbexport , deve-se primeiro
    # renomear o diretório criado por ele.
    $ mv dbcim.exp teste.exp
    `dbcim.exp' -> `teste.exp'
    $ cd teste.exp/
    # Deve-se renomear o arquivo .sql que tem o nome do banco
    $ mv dbcim.sql teste.sql
    `dbcim.sql' -> `teste.sql'
    # Para finalizar, editar este arquivo e renomar a primeira linha 
    # que é um comentário e possui o nome do banco de dados.
    $ vi teste.sql
    $ head -n2 teste.sql
    { DATABASE teste  delimiter | }
    
    $ cd ..
    # Após isso, basta iniciar a execução.
    # Neste exemplo carrego o banco chamado "teste", no dbspace "dados1"
    # com o log como Buffered e informo que o local onde se encontra o 
    # diretório teste.exp é no /tmp
    $ dbimport teste -d dados1 -l buffered -i /tmp
    { DATABASE teste  delimiter | }
    
    grant dba to "ix_dbsa";
    grant connect to "cmartins";
    ...
    ...
    ...
    dbimport completed
    


Recomendações


Entenda como o LOAD/UNLOAD e dbschema funcionam, pois assim você irá entender 90% do dbexport/dbimport
Leia este artigo com recomendações para carga de dados.

0
Ainda não votado
Sua avaliação: Nenhum

Responder

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.