Migrar dados do Microsoft Access 2003 para Oracle 10gR2

Neste artigo irei demonstrar como pode ser feito uma migração de dados de um ACCESS para o Oracle.
Primeiramente vou mostrar como está o meu ambiente para demonstrar, no meu Windows XP 5.1 com o Client Oracle 10.2.0.1 32b e baixado o Oracle SQL Developer 3.0 (3.0.04.34) for 32-bit Windows (This zip file includes the JDK1.6.0_11)
Instalado o Microsoft Word 2003 (11.5604.5606), é recomendado você instalar o componente do Microsoft Office para o drive o Access que irá aparecer no SQL Developer.
Feito a instalação do office vou baixar uma Base Access para esta demonstração: Northwind.rar
Continue lendo em oraclehome.com.br …


Alteração DDL em objetos relacionados

Bom hoje vou abordar uma situação que ocorre muito e claro não se tem muito impacto pois o que vou mostrar é como a Oracle nos ajuda em muitas situações.
Vou criar uma tabela de exemplo e criar uma procedure que chama essa tabela, até ai tudo bem, mas se eu fizer alguma alteracao na estrutura desta o que vai acontecer. É os objeto que estão relacionados a esta tabela ficarão INVALIDOS, mas não há necessidade de ficar preocupado que sua aplicação irá parar de funcionar.
Pois ao ser executado o objeto, este é tentado ser rencopilado e dps executado.
Para ser mais facil de entender irei fazer um exemplo na pratica para ver como funciona, e claro usando algumas coisas como sequence e um pequeno cursor para facilitar todo o contexto, passo a passo:

Primeiramente vamos criar um tabela para o nosso exemplo funcionar legal:

  1. CREATE TABLE tab01 (<br />
  2. campo01 number(11) PRIMARY KEY,<br />
  3. campo02 varchar2(100)<br />
  4. );

Vamos criar um sequence para facilitar um pouco mais a nossa vida:

  1. CREATE sequence ctab01;

Ok, aqui vamos comecar popular a nossa tabelinha soh para ter alguma informacao e ficar mais legal a brincadeira:

  1. INSERT INTO tab01 VALUES (ctab01.NEXTVAL,'AAAAAA');

DECLARE
NUMERO NUMBER(11);
BEGIN
FOR NUMERO IN 1..5
LOOP
insert into tab01 select ctab01.nextval,'BBBBBB' from tab01;
COMMIT;
END LOOP;
END;

Bom nesse passo com a tabela ja criada e populada vamos criar uma procedure onde vai utilizar um campo por exemplo da tabela, só usar dando um select simples:

  1. CREATE OR REPLACE procedure proc_01<br />
  2. is<br />
  3. begin<br />
  4. declare<br />
  5. v_aux varchar2(100);<br />
  6. begin<br />
  7. SELECT campo02 INTO v_aux FROM tab01 WHERE ROWNUM = 1;<br />
  8. end;<br />
  9. end;<br />
  10.  

Agora vamos prestar a atenção no status desse objetos(a procedure PROC_01), ela está VALID:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 VALID
Nessa etapa vamos criar um campo novo na estrutura da tabela:

  1. ALTER TABLE TAB01 ADD CAMPO03 NUMBER(3);

Então observando novamente o status do objeto PROC_01, nota-se que agora o status está INVALID:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 INVALID

Mas o que não contavamos é q se precisarmos de usar a proc_01 ela vai funcionar mesmo assim com o status INVALID, pois o Oracle compila o objeto antes de executar, claro se por algum motivo nao interfiriu diretamente no objeto inicial, como trocando o tipo da coluna entre outros.

  1. SQL> EXEC PROC_01;

Assim podes olhar em seguida o status do objeto:
  1. SQL> SELECT object_name,STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME ='PROC_01';

OBJECT_NAME STATUS
------------------------------ -------
PROC_01 VALID

Desta forma podemos notar que se fizeres alguma alteração de estrutura do tipo inclusao ou sem alterar o que está dentro destes objetos do tipo proc, view, func, ou outros o Oracle vai garantir que sua aplicação nao vai parar.
Mas recomenda-se que no momento q fores fazer alguma alteração de estrutura, recompile seus objetos relacionados, para também nao ter dor de cabeça mais tarde.