sexta-feira, 27 de junho de 2014

ORA-02304: invalid object identifier literal - IMPDP [Oracle];

Pessoal, Bom dia!

Ontem estava fazendo uma importação data pump (IMPDP) quando me deparei com os erros ORA-39083 e ORA-02304.

ORA-39083: Object type TYPE failed to create with error:
ORA-02304: invalid object identifier literal
Failing sql is:







A Causa do problema é quando estamos tentando importar com Objeto com OID que já existe no Banco de Dados - Deve ser único, ou seja, não podem conter 2 Objetos com o mesmo OID.

Para contornar esse problema:
Nos parâmetros do IMPDP  inclua o parâmetro TRANSFORM=oid:n.

Exemplo:
IMPDP system/senha@instancia directory=data_pump_dir schemas=HR dumpfile=HR_DUMP.dmp logfile=HR_DUMP_LOG.log TRANSFORM=oid:n

Abraços,
Bruno Duarte.

quinta-feira, 26 de junho de 2014

Treinamento PL/SQL | Download Apostila [Oracle];

Senhores,

Encontrei uma apostila PL/SQL muito interessante, e para facilitar ainda mais, esta totalmente em português.

Diferente de algumas que já li, o conteúdo desta é bem objetivo (sem enrolação).

Para você que esta começando a programar ou até para quem já é mais avançado, é bem legal dar uma conferida. 

Link para Download: Aqui



Abraços,
Bruno Duarte.

sexta-feira, 20 de junho de 2014

Engenharia Reversa - Package DBMS_METADATA [Oracle];

Pessoal, Bom dia!

Outro dia estava precisando recriar alguns objetos no meu Banco de Dados, quando conheci esta incrível Package chamada  DBMS_METADATA.

Com ela, é possível obtermos a Engenharia Reversa de praticamente qualquer criação (DDL).
As opções são muitas, por isso vou demonstrar algumas:

Como foi criada uma Tabela:

SELECT dbms_metadata.get_ddl ('TABLE', 'EMPLOYEES') FROM dual;









Como foi criada uma Procedure:

SELECT dbms_metadata.get_ddl('PROCEDURE', 'SECURE_DML') FROM dual;









Como falei, são muitas opções, sendo possível obter também a engenharia reversa de TRIGGER, PACKAGE, VIEW, FUNCTION, INDEX e etc.

Para mais informações, Link do documento da Própria Oracle:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_metada.htm

Valeu,
Bruno Duarte.

quarta-feira, 11 de junho de 2014

ORA-01917: user or role 'X' does not exist - IMPDP [Oracle];

Galera, Boa tarde!

Hoje passei o dia em chamados de Data Pump (EXPDP e IMPDP), até que em uma importação (IMPDP) me deparo com o  erro ORA-01917. 

GRANT EXECUTE ON "X" TO "X"
IMP-39083: Object type OBJECT_GRANT failed to create with error:
ORA-01917: user or role 'X' does not exist






A Solução é simples!
Nos parâmetros do IMPDP  inclua o parâmetro GRANTS=NO.

Exemplo:
IMPDP system/senha@instancia directory=data_pump_dir schemas=HR dumpfile=HR_DUMP.dmp logfile=HR_DUMP_LOG.log GRANTS=NO

Valeu,
Bruno Duarte.

terça-feira, 10 de junho de 2014

Como retirar acentos de uma coluna - Função Translate [Oracle];

Bom dia a todos!

Ontem estava desenvolvendo uma Função para retirar os acentos de uma determinada Coluna, quando após algumas pesquisas descobri uma função super simples do próprio Oracle.

> Função Translate

Select TRANSLATE ('Testando a Função Translate - Retira Acentuação',
                  'ŠŽšžŸÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜÏÖÑÝåáçéíóúàèìòùâêîôûãõëüïöñýÿ',
                  'SZszYACEIOUAEIOUAEIOUAOEUIONYaaceiouaeiouaeiouaoeuionyy') 
                  As TRANSLATE FROM DUAL; 








Analisando a Função, de certa forma ela é parecida com o Replace, porém a diferença é que no Replace não seria possível fazer a substituição da letra acentuada por a letra sem acento em um único argumento.

Foi aí que utilizei a função no meu UPDATE !
Bom... Primeiro vamos visualizar a Tabela - A coluna Descrição com palavras acentuadas.















UPDATE  TB_PALAVRAS_ACENTUADAS
SET DESCRICAO = TRANSLATE (''||DESCRICAO||'',
                    'ŠŽšžŸÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜÏÖÑÝåáçéíóúàèìòùâêîôûãõëüïöñýÿ',
                    'SZszYACEIOUAEIOUAEIOUAOEUIONYaaceiouaeiouaeiouaoeuionyy');









Após o UPDATE, todas as palavras acentuadas tiveram o seu acento removido/substituído.


Abraços,
Bruno Duarte.

quarta-feira, 4 de junho de 2014

Como alterar o idioma do Oracle SQL Developer para Inglês [Oracle];

Aqui vai uma dica para quem instalou o SQL Developer em Português.

Eu particularmente prefiro trabalhar com a ferramenta em inglês, pelo motivo de já ter acostumado com alguns termos.
Sempre quando leio Stored Procedure como Procedimento Armazenado é meio estranho! rs

Bom vamos ao que interessa!

Será necessário abrir o arquivo ide.conf localizado no diretório:
 C:\sqldeveloper\ide\bin    --No meu caso se localizava no C:\ (raiz).

Acrescentar esta linha no final do código e salvar.
AddVMOption -Duser.language=en













Agora será necessário reiniciar o SQL Developer e Pronto!
Estará em Inglês!

Abraços,
Bruno Duarte.

terça-feira, 3 de junho de 2014

Migração de Dados do SQL Server para Oracle - Via SQL LOADER [Exportação e Importação em massa];

Pessoal, Boa tarde!

Em um outro Post demonstrei a vocês o processo para migrar os dados do SQL Server para o Oracle.
Leia: http://dbaduarte.blogspot.com.br/2014/05/migracao-de-dados-do-sql-server-para.html

Hoje irei apenas mostrar um passo para otimizar o procedimento com exportação e importação em massa.
Após efetuado todos os passos do Post anterior, agora vamos no desenvolvimento da melhoria!

Com todos os comandos BCPs e arquivos CTLs desenvolvidos, será necessário salvá-los em uma pasta do Servidor SQL Server.
















Exemplo *.BCP:







Exemplo *.CTL:


















Ok ! Agora vamos desenvolver uma BAT para exportar todos os dados das tabelas de uma só vez.
Usei o utilitário osql pelo motivo do SQL Server estar na versão 2000, caso fosse uma superior usaria o sqlcmd.

-U: Usuário
-P: Senha
-S: Nome do Servidor (SQL Server)
-d: Nome da Base de dados
%1, %2, %3, %4: Parâmetros que iremos passar - Para não ser chumbado na BAT.
-i: Entrada (Arquivo)
-o: Saída (Arquivo)

osql -U%1 -P%2 -S%3 -d%4  -iTABLESQLSERVER.bcp  -oTABLESQLSERVER.log











Salvar a BAT na mesma pasta dos outros arquivos.


Iremos executar a BAT pelo cmd do Servidor SQL Server:
>cd C:\Migracao
>bcp.bat usuario senha nomedoservidor nomebasededados
OBS: Passando os parâmetros dos %1, %2, %3, %4










Os arquivos foram exportados em .TXT no C:\ do Servidor SQL Server - Conforme definimos nos arquivos .BCP. 
Salvá-los na mesma pasta dos outros arquivos.



















Feito ! Vamos a criação da BAT para a importação dos dados em massa no Servidor Oracle.

sqlldr userid=%1/%2@%3  control=TABLESQLSERVER.ctl   log=TABLESQLSERVER.log  
Salvar a BAT na mesma pasta dos outros arquivos.



















Para a importação, será necessário copiar a pasta com todos os arquivos para o Servidor Oracle, ou em algum outro local que tenha o Client do Oracle instalado e o TNSNAMES configurado com os dados do Servidor - No meu caso copiei para a minha máquina local.

Iremos executar a BAT pelo cmd (No meu caso da minha máquina local).
>cd C:\Migracao
>loader.bat usuario senha instanciaoracle









Pronto! Todas as suas tabelas foram migradas em massa de uma só vez!

Valeu,
Bruno Duarte.