Forum Pplware
Migrações de Bases de Dados. - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Migrações de Bases de Dados. (/showthread.php?tid=8155)

Páginas: 1 2


RE: Migrações de Bases de Dados. - aucrun - 30-01-2011 00:03

JPedrosa,

Quanto aos CTL files, gostaria que me desses então uma ajuda, por favor.
Abaixo segue um exemplo dos ficheiros de Informix que tenho de importar:

---- EXEMPLO---------------------------------------
1|2009-05-22 17:54:09.000|paulo|lisboa|36|vendedor|
2|2009-05-25 11:13:50.000|pedro|porto|25|professor|
3|2009-05-25 11:24:11.000|ana|faro|33|tenista|
4|2009-05-25 11:26:14.000|rute|evora|29|auxiliar|
5|2009-05-25 11:28:18.000|ines|lisboa|35|enfermeira|
------------------------------------------------------

Obrigado!


RE: Migrações de Bases de Dados. - JPedrosa - 30-01-2011 22:34

Porra,
esqueci-me de ti rapaz.

Um CTL para ti.
não mexo em datas com os últimos dígitos, nem aqui pude testar, mas diria que o FF3, é o que precisas.
Mandei o exemplo em modo "append", se quiseres em modo replace ... é só apagar o APPEND.

Código:
load data
CHARACTERSET UTF8
infile 'EXEMPLO.idl'
append into table EXEMPLO
fields terminated by "|" optionally enclosed by '"'
TRAILING NULLCOLS(
    ID         
    ,DATA_REGISTO                "TO_DATE(:DATA_REGISTO, 'YYYY-MM-DD HH24:MI:SS.FF3')"
    ,NOME                
    ,CIDADE                
    ,IDADE
    ,PROFISSAO
)

Olha, segue aqui um ficheiro exemplo, que te dá para veres algumas funções possíveis.
É um ctl feito por um colega que eu martelei para reduzir mtos campos e alterar algumas labels.

Os selects funcionam como lookups e são muito úteis para carregar tabelas "filhas", ou para carregar códigos em vez de descrições ou o inverso.

Por exemplo, no que tu forneceste, imagina que tinhas uma tabela àparte que tinha registos tipo TABELA.CODIGO = VEND, TABELA.DESCRICAO = Vendedor
E o teu ficheiro tem a descrição, mas tu queres gravar na tabela o código.
Usas um lookup para isto. espero ter ajudado.

Código:
load data
CHARACTERSET UTF8
infile 'TABELA_EXEMPLO.idl'
append into table TABELA_EXEMPLO
fields terminated by "|" optionally enclosed by '"'
TRAILING NULLCOLS(
    TABELA_EXEMPLO_ID         "MEETING_ATTENDEE_SEQ.NEXTVAL"
    ,CAMPO_TEXTO_1
    ,CAMPO_CODIGO_ID                "PT_FIND_CODIGO_ID(:CAMPO_CODIGO_ID)"
    ,STATUS_CHANGE_DATE         "TO_DATE(:STATUS_CHANGE_DATE, 'YYYY-MM-DD')"
    ,LOCAL_ID
    ,MORADA_TEXTO                "(SELECT line_1_address FROM address WHERE address_id = (SELECT address_id FROM affiliation WHERE affiliation_id = PT_FIND_AFFILIATION_ID(:LOCAL_ID)))"
    ,CITY                        "(SELECT city FROM address WHERE address_id = (SELECT address_id FROM affiliation WHERE affiliation_id = PT_FIND_AFFILIATION_ID(:LOCAL_ID)))"
)

Embora não recomende, isto suporta até carregar para várias tabelas, mas vais-te meter em confusão desnecessária.

Algo que te vai ajudar

Peço imensa desculpa por me ter esquecido, mas ando sempre a mil.

EDIT: Estive a ver aqui exemplos, e o ideal era conseguires tirar do informix sem as fracções de segundo, particularmente se vêm sempre a zero. Vai dar chatisse para importar. É que o Oracle pelo que vi, as fracções de segundos é apenas para a variavel do tipo TimeStamp e não para o Date.

Cumps,
JP


RE: Migrações de Bases de Dados. - aucrun - 31-01-2011 23:43

Obrigado JPedrosa,

Era precisamente isto que precisava. Ou pelo menos é um BOM ponto de partida.

Quanto às datas, realmente vou precisar de usar o datatype TIMESTAMP do Oracle.
Achas que vou ter problemas, estando elas no Informix já com esse formato?

Já agora uma outra questão, um pouco off-topic mas que acaba por estar relacionada. Numta tabela nova (vazia) particionada em Oracle, eu consigo usar o SQL Loader para carregar dados, certo?
Penso que sim, e ainda não o testei, mas penso que é como se se tratasse duma tabela normal, certo?

Obrigado!

Abraço,
Aucrun


RE: Migrações de Bases de Dados. - JPedrosa - 01-02-2011 00:02

Oi, a gestão das partições é feita pelo motor Oracle, aquando do insert a DB sabe que o destino é uma tabela particionada e invoca as regras de particionamento para colocar no respectivo local.

Podes, no entanto apontar para uma partition, apenas é útil em situações especificas e penso que não seja o teu caso. O bom do Oracle é que podes sempre especificar tu, se não quiseres deixar as coisas "sub-entendidas" Wink

Se fores por aí, toma alguma coisa para te ajudar:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_control_file.htm#sthref798
http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_modes.htm

Cumps
JP


RE: Migrações de Bases de Dados. - aucrun - 01-02-2011 00:09

Obrigado, mais uma vez.

Sim, em relação às tabelas particionadas, penso mesmo que o que melhor se encaixa no que preciso é mesmo uma partição simples BY RANGE.
No entanto, gostei bastante do que li nas COMPOSITES PARTITIONS. A ideia de fazer uma partição, na qual a mesma se encontra espalhada por diversos Tablespaces pode ser bastante interessante.

Quanto ao SQL Loader, penso que o que me mostraste atrás é mais do que o suficiente para começar a criar os meus CTLs para as mais de 100 importações que tenho de fazer.

Mais uma vez obrigado!

Vou dando feedback.

Aucrun


RE: Migrações de Bases de Dados. - JPedrosa - 01-02-2011 00:21

De nada.

Amanhã se conseguir insiro o teu txt exemplo numa tabela para um campo do tipo timestamp e digo qualquer coisa.

Uma coisa que não mencionei para trás, mas convém ter atenção:
Os lookups são muito bons para garantir a integridade da DB, eu pessoalmente acho que em tabelas "filhas" devias carregar as FK com lookup à tabela de referência.