Original Utilitário Exp/Imp - Exportando e Importando Dados por Tabelas

maio 15th, 2009 por Bruno Murassaki

Olá Pessoal

Hoje estarei postando um artigo de Export e Import por Tabelas, esse utilitário é o nosso velho amigo Exp/Imp convencional utilizando client/side.

É muito usado para exportar apenas algumas tabelas do Schema do Banco de Dados.

Segue abaixo exemplos de como utilizar Exp e Imp por Tabelas:

Comando Export por Tabelas: - Com esse comando filtraremos as tabelas, escolhendo apenas duas tabelas. Exemplo: NOTAFISCAL e CONTARECEBER

————————————————————————————————————–

Comando Export por Tabelas:

Exp usuario/senha@stringdeconexao file=teste.dmp log=teste.log feedback=2000 statistics=none buffer=64000 Tables=(NOTAFISCAL, CONTARECEBER)

————————————————————————————————————–

Como já escolhemos as tabelas exportadas e incluimos no nosso dump, basta apenas importar normalmente.

Com esse comando abaixo importaremos apenas as tabelas que exportamos no dump.

————————————————————————————————————–

Comando Import por Tabelas(Considerando que o dump ja contém apenas as tabelas que deseja importar):

Imp system/senha@stringdeconexao file=teste.dmp log=teste.log FROMUSER=usuario_origem TOUSER=usuario_destino feedback=2000 statistics=none buffer=64000

————————————————————————————————————–

(Obs: Muita atenção se caso utilizar o usuario system para importação, pois se caso esquecer dos parâmetros FROMUSER e TOUSER, os objetos serão importados no Schema System. Recomendo criar um usuario com privilégio para importação.)

Abraço

Bruno Murassaki

Original Utilitário Exp/Imp - Exportando e Importando Dados por Schema(Usuário)

maio 14th, 2009 por Bruno Murassaki

Olá Pessoal

Hoje estarei postando um artigo de Export e Import por Schema, esse utilitário é o nosso velho amigo Exp/Imp convencional utilizando client/side.

É muito útil para migração dos dados de um schema de um Banco de Dados para outro.

Este tipo de procedimento Export e Import é rotineiro na vida de um DBA, pois na maioria das vezes é necessário atualizar um Schema do Banco de Dados de Produção para o Banco de Dados de Teste. Para que a equipe de desenvolvimento desenvolva em uma base real, próxima da Base de Produção.

Pode ser também utilizado como rotina de Backup Lógico(Export)

Segue abaixo exemplos de como utilizar Exp e Imp por Schema:

———————————————————————————————————-

Comando Export por Schema(Usuario):

Exp usuario/senha@stringdeconexao file=teste.dmp log=teste.log feedback=2000 statistics=none buffer=64000

———————————————————————————————————-

Comando Import por Schema(Usuario):

Imp system/senha@stringdeconexao file=teste.dmp log=teste.log FROMUSER=user_origem TOUSER=user_destino feedback=2000 statistics=none buffer=64000

———————————————————————————————————-

(Obs: Muita atenção se caso utilizar o usuario system para importação, pois se caso esquecer dos parâmetros FROMUSER e TOUSER, os objetos serão importados no Schema System.Recomendo criar um usuario com privilégio para importação.)

Abraço

Bruno Murassaki

Erro OC4J Configuration issue, ao Iniciar Oracle Enterprise Manager

maio 6th, 2009 por Bruno Murassaki

Olá Pessoal,

O assunto que iremos abordar hoje é muito encontrado em Fóruns por causa da dificuldade de encontrar informação para resolver o problema específico. Pois sabemos que o Oracle Enterprise Manager existem diversos tipos de erros que são resolvidos de diferentes formas.
Hoje um cliente me reportou um Problema com o Oracle Enterprise Manager. Então vou contar a história como foi….
Um certo dia um Funcionário de TI resolveu instalar Banco de Dados Oracle 10g no Sistema Operacional Windows no qual foi instalado uma instalação Default do Oracle10g N,N,F (NEXT,NEXT,FINISH).
Com isso o funcionário de TI não se preocupou em setar IP fixo no Servidor, deixando DHCP. Aparentemente a instalação ficou perfeita tudo funcionando sem nenhum problema.
Um certo dia o Servidor foi ligado novamente e ocorreu Problema com Oracle Enterprise Manager. Detalhe que Listener e Banco de Dados funcionava normal, apenas o Oracle Enterprise Manager que não funcionava.

Com isso ao tentar iniciar o Oracle Enterprise Manager apresentava o seguinte problema:

———————————————————————————————————————————–

Problema Reportado:

- OC4J Configuration issue. C:\oracle\product\10.2.0\db_1/oc4j/j2ee/OC4J_DBConsole_X.X.X.X_orcl not found.

———————————————————————————————————————————–

Possíveis Causas:

- Determinar Ip Dinâmico(DHCP) para Servidor de Banco de Dados ao invés de Ip fixo.

- Determinar EndereçoIp/Hostname dinâmico.

———————————————————————————————————————————–

Solução:

- Setar Endereço Ip Fixo / Hostname

- Reconstruir o Repositório do Oracle Enterprise Manager.

Antes de reconstruir o repositório é necessário obter as seguintes informações:
- Database SID:
- Listener port number:
- Password for SYS user:
- Password for DBSNMP user:
- Password for SYSMAN user:

———————————————————————————————————————————-

1- Dropando o Repositório Enterprise Manager

[oracle@oracle10]$emca -deconfig dbcontrol db -repos drop

STARTED EMCA at Nov 8, 2008 10:57:16 AM
EM Configuration Assistant, Version 10.2.0.1.0 Production
Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Enter the following information:
Database SID: orcl
Listener port number: 1521
Password for SYS user:  xxx
Password for SYSMAN user: xxx
Password for SYSMAN user: xxx
Do you wish to continue? [yes(Y)/no(N)]: Y
Nov 8, 2008 10:57:32 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oracle/app/product/10.2.0/orcl/cfgtoollogs/emca/orcl/emca_2008-11-08_10-57-16-AM.log.
Nov 8, 2008 10:57:34 AM oracle.sysman.emcp.EMDBPreConfig performDeconfiguration
WARNING: EM is not configured for this database. No EM-specific actions can be performed.
Nov 8, 2008 10:57:34 AM oracle.sysman.emcp.EMReposConfig dropRepository
INFO: Dropping the EM repository (this may take a while) …
Nov 8, 2008 10:59:51 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully dropped
Enterprise Manager configuration completed successfully
FINISHED EMCA at Nov 8, 2008 10:59:51 AM

———————————————————————————————————————————–
2- Criando o Repositório Enterprise Manager

[oracle@oracle10]$emca -config dbcontrol db -repos create

STARTED EMCA at Nov 8, 2008 11:01:04 AM
EM Configuration Assistant, Version 10.2.0.1.0 Production
Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Enter the following information:
Database SID: orcl
Listener port number: 1521
Password for SYS user:  xxx
Password for DBSNMP user: “dbsnmp”
Password for SYSMAN user:  xxx
Password for SYSMAN user: Email address for notifications (optional):
Outgoing Mail (SMTP) server for notifications (optional):

You have specified the following settings

Database ORACLE_HOME ……………. /oracle/app/product/10.2.0/orcl

Database hostname ……………. brunomurassaki.com.br
Listener port number ……………. 1521
Database SID ……………. orcl
Email address for notifications ……………

Outgoing Mail (SMTP) server for notifications ……………
Do you wish to continue? [yes(Y)/no(N)]: Y
Nov 8, 2008 11:01:31 AM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /oracle/app/product/10.2.0/orcl/cfgtoollogs/emca/orcl/emca_2008-11-08_11-01-04-AM.log.
Nov 8, 2008 11:01:36 AM oracle.sysman.emcp.EMReposConfig createRepository
INFO: Creating the EM repository (this may take a while) …
Nov 8, 2008 11:04:23 AM oracle.sysman.emcp.EMReposConfig invoke
INFO: Repository successfully created
Nov 8, 2008 11:04:32 AM oracle.sysman.emcp.util.DBControlUtil startOMS
INFO: Starting Database Control (this may take a while) …
Nov 8, 2008 11:06:09 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: Database Control started successfully
Nov 8, 2008 11:06:09 AM oracle.sysman.emcp.EMDBPostConfig performConfiguration
INFO: >>>>>>>>>>> The Database Control URL is http://X.X.X.X:5500/em <<<<<<<<<<<
Enterprise Manager configuration completed successfully
FINISHED EMCA at Nov 8, 2008 11:06:09 AM
———————————————————————————————————————————–
Pronto, Repositório Criado com Suscesso.

3- Iremos verificar se o Oracle Enterprise Manager está rodando:

[oracle@oracle10 emd]$ emctl status dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0
Copyright (c) 1996, 2005 Oracle Corporation.  All rights reserved.
http://brunomurassaki.com.br:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.

———————————————————————————————————————————–

4- Após reconstruir o repositório e necessitar verificar qual porta o OEM está utilizando, entre no diretório abaixo:

ORACLE_HOME/install/portlist.ini
————————————————————————————————————————————

Pronto, agora basta entrar em qualquer navegador e com endereço correto utilizar Oracle Enterprise Manager.

Abraço,

Bruno Murassaki

ORACLE DATAPUMP : Remapeando de Tablespaces e Schemas

abril 6th, 2009 por Bruno Murassaki

Olá Pessoal,

O assunto que iremos abordar hoje é uma tecnologia muito interessante que a Oracle disponibilizou a partir do Oracle 10g, chamado Oracle Data Pump.
Oracle DataPump é uma tecnologia avançada do utilitário tradicional EXP e IMP o qual conhecemos de releases anteriores. Vejamos algumas diferenças entre DataPump e Utilitário Exp/Imp:

DATA PUMP: Utiliza Server-Side

Utilitário EXP/IMP: Utiliza Client-Side.

————————————————————————————-

Vantagens do Oracle DATAPUMP:

• Seleção de Dados e Objetos de granulidades Fina.

• Especificação Explicita da Versão do Banco de Dados.

• Execução em Paralelo.

• Avaliação do espaço de consumo do export Job.

• Modo de Rede em um Ambiente Distribuído.

• Capacidade de Remapeamento durante importação(import).

• Amostra de Dados e Compressão de Metadados.

—————————————————————————————

Sabe quando necessitamos migrar um schema que está na Tablespace teste0 e gostaria que este schema fosse migrado para um outro Banco de Dados na Tablespace teste2. Pois é, ai que tá, como podemos fazer isso?

Uma das Soluções seria a utilização do Oracle Datapump Utilizando Remapeamento de Tablespaces e Schemas.

Faremos um exemplo simples utilizando Oracle Datapump Remapeamento Tablespaces e Schemas, migrando Dados de um Schema para outro com DATAPUMP.

Deve se conectar com usuário ORACLE ou usuario que Instalou o Oracle10g caso seja Windows.

1- Primeiro passo precisamos definir o diretório onde iremos utilizar o Oracle Data Pump. No nosso caso definimos o Diretório (/oracle/dump) o qual o aliás será dump.

Com isso iremos criar o Diretório logicamente no qual irá se chamar ‘dump’.

Conectar com usuário ORACLE no SQLPLUS com Usuário SYS.

- CREATE DIRECTORY dump AS ‘/oracle/dump/’;

2- Após criar o Diretório precisamos conceder os privilégios de leitura e gravação. Em nosso exemplo iremos disponibilizar este diretório para todos os usuários do Banco de Dados concedendo o privilégio para o schema Public;

- GRANT read, write ON DIRECTORY dump TO PUBLIC;

3- Iremos conceder o Privilégio IMP_FULL_DATABASE para o usuário teste que irá Importar:

- GRANT IMP_FULL_DATABASE to teste;

4- Após isso basta exportar e depois importar

5- Exportando com usuario teste com Oracle Data Pump:
- Expdp teste/teste directory=dump dumpfile=teste.dmp logfile=teste.log

6- Importando com usuario TESTE no Oracle Data Pump, remapeando por schemas(schema TESTE para o TESTE2) e remapeando por Tablespaces(Tablespace TESTE para o TESTE2):
- Impdp teste/teste directory=dump dumpfile=teste.dmp logfile=testeimp.log remap_schema=teste:teste2 remap_tablespace=teste:teste2

( Obs: Caso queira remapear mais de uma tablespace, utilizem o seguinte parâmetro setado abaixo:

- REMAP_TABLESPACE = teste0:teste2, teste1:teste2

Abraço

Bruno Murassaki

Problema ao Recompilar Package após atualizar Banco de Dados

março 23rd, 2009 por Bruno Murassaki

Olá Pessoal

Hoje estarei compartilhando um Problema (Erro) que me fez perder um bom tempo para resolver.

Tudo isso devido o Programa PL/SQL Developer não conseguir recompilar todas as Packages com sucesso.

Recompilei Package por Package e Trigger por Trigger e nada com PL/SQL Developer.

Com isso resolvi mudar a forma de recompilar utilizando a Procedure compile_schema da Package DBMS_UTILITY com SQLPLUS.

Segue abaixo a situação do ambiente e como resolvi.

————————————————————————————-

ERRO SOLICITADO:
Erro após atualizar um Package ou Trigger no Banco de Dados.

ORA-04061: Existing state of string has been invalidated.

ORA-04061: Estado existente de package (USER.REPLIC) foi invalidado.

ORA-06508: PL/SQL: não foi localizada a unidade de programa que está sendo chamada: (USER.REPLIC).

ORA-04088: Erro durante a execução do gatilho (USER.T_COM_FECHAMENTO_IMPORTACAO).

————————————————————————————

CAUSA:
Tentativa de reiniciar a execução de um Package usando existente estado que tem tornado inválido ou inconsistente com o Package, porque o Package tem sido alterado ou dropado.

Programa PL/SQL Developer recompila todos os objetos, consta a Package como compilada com sucesso, mas quando roda a aplicação da Erro na Package.

————————————————————————————

SOLUÇÃO:
Tentar novamente recompilar todos os Pacotes; este erro deveria ser causado a situação atual de todos os pacotes para ser re-inicializado. Executar DBMS_UTILITY.compile_schema.

A Procedure COMPILE_SCHEMA na Package DBMS_UTILITY compila todas as Procedures, Functions, Packages, e Triggers em um Schema específico.

Conectar como SYS ou SYSTEM no SQLPLUS e executar o seguinte comando setando o Schema:

SQL>exec dbms_utility.compile_schema(schema=>’nomeschema’);

Procedimento PL/SQL concluído com sucesso.

Pronto, objetos recompilados com sucesso.

Abraço,

Bruno Murassaki

Comandos Básicos Administração Banco de Dados Oracle

março 5th, 2009 por Bruno Murassaki

Olá Pessoal,

Sabe quando um cliente liga deseperado para poder desligar o Servidor de Banco de Dados pois a energia acabou e a bateria do Nobreak está acabando?  Sim, são nesses casos que o Suporte aciona o DBA, mas por algum motivo maior não conseguiram entrar em contato com DBA.

Então o Suporte mesmo pode parar o Banco de Dados corretamente, pois quando voltar o Banco de Dados o Processo de Background SMON não precisrá executar a recuperação da Instância. Evitando assim um crash do Banco de Dados.

Sei que para muitos DBAs esses comandos básicos ja estão mais que decorados, mas estou postando este material para iniciantes ou pessoas que sejam suporte e não conseguiram contactar o DBA. Com isso ele prescisa desligar o Banco de Dados corretamente com esses comandos.

Esse post é dedicado ao meu amigo Jasper que me solicitou esse artigo.

———————————————————————————

1- Iniciar e Parar o Listener

Inicar: lsnrctl start

Parar: lsnrctl stop

Status: lsnrctl status

———————————————————————————

2- Iniciar e Parar o Banco de Dados Oracle Linux

2.1- Iniciar o Banco de Dados:

Conectado como usuario oracle no Linux digite:

sqlplus /nolog

SQL> conn / as sysdba

SQL> startup
ORACLE instance started.
Total System Global Area  184549376 bytes
Fixed Size                             2019448 bytes
Variable Size                     109055880 bytes
Database Buffers                 71303168 bytes
Redo Buffers                          2170880 bytes
Database mounted.
Database opened.

———————————————————————————

2.2 - Declaração SQL para Verificar o Status do BAnco de Dados

SQL> SELECT status FROM V$INSTANCE;

———————————————————————————

2.3- Parar o Banco de Dados:

Conectado como usuario oracle no Linux digite:

sqlplus /nolog

SQL> conn / as sysdba

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
———————————————————————————

3- Iniciar e Parar o Enterprise Manager

Inicar: emctl start dbconsole

Parar: emctl stop dbconsole

Status: emctl status dbconsole

———————————————————————————

4- Desligar o Linux Red Hat

Pronto, após o Banco de Dados estar parado e todos

os seus serviços, agora iremos desligar o Linux:

Não tenho certeza se todos as distribuições

funcionam dessa forma, mas no Red Hat é asssim:

halt -p

———————————————————————————

Abraço

Bruno Murassaki

Problema OEM: Pagina Home do OEM(DB console): java.lang.Exception: IOException in sending Request

março 3rd, 2009 por Bruno Murassaki

Olá Pessoal,

Hoje irei comentar sobre um problema com Enterprise Manager após a troca do horário de Verão. Esse erro acontecia após logado como SYS ou SYSTEM navegando na aba Home.

SITUACAO DO AMBIENTE (Red Hat Enterprise Linux 5):
Verificar Timezone do Linux:
Descobrir TIme Zone do Linux /etc/sysconfig/clock
America/Sao_Paulo
—————————————————
Banco de Dados Oracle 10g 10.2.0.4
Brazil/East

ERRO SOLICITADO PELO CLIENTE:
Erro na Pagina Home do Enterprise Manager(DB console): java.lang.Exception: IOException in sending Request

CAUSA: TIMEZONE desconfigurado no Agent do Enterprise Manager devido a troca de Horário de Verão.

SOLUCAO:
1-Criar Variavel de Ambiente no Bash_profile
TZ=Etc/GMT+3
export TZ

Para Horário de Verão utilize:
TZ=Etc/GMT+2

Para Horário de Inverno utilize:
TZ=Etc/GMT+3

2-Rodar o Seguinte comando:
emctl resetTZ agent

3- conectar com o usuario SYSMAN e executar os seguinte comandos:
sqlplus /nolog
SQL>conn sysman/senha
SQL>exec mgmt_target.set_agent_tzrgn( ‘nome_servidor:3938′ , ‘Etc/GMT+3′);
SQL>commit;

4-Iniciar o Enterprise Manager:
emctl stop dbconsole
emctl start dbconsole

Abraço

Bruno Murassaki

Utilizando Resumable Space

fevereiro 10th, 2009 por Bruno Murassaki

Olá, hoje iremos falar um pouco sobre um recurso do Oracle muito interessante para rotina de inserção dos dados. Resumable Space. O que fazer quando você tem que rodar uma grande carga DML e não correr o risco de perder tudo com o estouro de Tablespace?
Uma solução seria utilizar Resumable Space, que ao rodar um DML (Insert) com inserção de milhões de registros caso venha estourar a Tablespace, não ocorrerá problema de alocação de espaço(Tablespace). Com isso não finalizará sua sessão ocorrendo rollback, apenas irá travar em segundos esperando uma  ação do DBA.

Podemos ativar Resumable Space de duas formas:

1-Por Parametro do Banco resumable_timeout:
SQL> Alter system set resumable_timeout=900 scope=both;

2- Por Sessão inserindo o seguinte commando:

Para utilizar o commando abaixo é necessário privilégio RESUMABLE:

SQL> GRANT RESUMABLE TO NOME_DO_USUARIO;

SQL> Alter session enable resumable timeout 900;

Quando o usuario inserir o commando o DBA deve ficar atento monitorando com SQL e Enterprise Manager pois caso trave a rotina por estouro de Tablespace será necessário extender um datafile.Para monitoramento via SQL temos a seguinte view:
SQL> SELECT name, SQL_TEXT, STATUS, TIMEOUT FROM dba_resumable;

Poderá visualizar o problema de Alocação de Espaço em Tablespace utilizando RESUMABLE SPACE no arquivo ALERTLOG.
Exemplo:
statement in resumable session User HR(62), Session 131, Instance 1 was suspended due to
ORA-01653: não é possível estender a tabela HR.T_TESTE em 1024 no tablespace USERS.

Abraço

Bruno Murassaki

Alterando uma Tabela em um Banco de Dados Oracle

fevereiro 10th, 2009 por Bruno Murassaki

Sei que para muitos pode ser básico este conceito, mas já vi muitos programadores com dúvidas. Por isso estarei postando sobre como alterar uma tabela em um Banco de Dados Oracle.

Em um Banco de Dados Oracle existem 2 caminhos para adicionar um Valor Default para uma coluna.

ALTER TABLE … ADD   E   ALTER TABLE … MODIFY

1)Declaração ALTER TABLE … ADD:
EXEMPLO:
SQL> ALTER TABLE table_name ADD column_name data_type DEFAULT default_value

Com essa declaração você pode adcionar uma coluna fornecendo um valor padrão para coluna.
Se você adicionar um valor default com este caminho(ALTER TABLE …ADD) o Banco de Dados Oracle
atualizará para cada linha na nova coluna o valor DEAFULT que você especificou.
E irá disparar triggers AFTER UPDATE definido na Tabela.

————————————————————————————————————

2)Declaração ALTER TABLE … MODIFY:
EXEMPLO:
SQL> ALTER TABLE table_name MODIFY column_name DEFAULT default_value

Com essa declaração você pode modificar um valor da coluna para um valor Default.
Mas semelhante ao ALTER TABLE…ADD, o MODIFY não atualizará todos os valores das colunas na tabela.
Subsequentemente irá inserir determinado valor default se nenhum valor é fornecido.

Abraço,

Bruno Murassaki