Responder a este comentário
Como exportar / importar dados com dbexport / dbimport
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.
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
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.
- Renomear ou remover o banco de dados já existente.
- Renomear o banco de dados que será importado, antes da 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.
- 1540 leituras




