terça-feira, 16 de dezembro de 2008

Criando Tabela com Campo PK Auto Incremento

Este metodo de criacao de tabela existe aos montes na internet, porem este codigo SQL virou padrao para a criacao das minhas tabelas no Oracle 10g que tenham um campo chave primaria auto incrementavel.

Codigo SQL :
-- cria tabela
create table DBTABELA
(
CODCAMPOAUTO NUMBER not null,
CAMPOTEXTO VARCHAR2(9),
CAMPONUMERO NUMBER(10,2),
CONSTRAINT PKCODCAMPOAUTO PRIMARY KEY (CODCAMPOAUTO)
);
-- cria sequence
create sequence CODCAMPOAUTO_SEQ;

-- isto evita que ocorra saltos na contagem do "proximo"
-- existe este erro no Oracle 10g nao sei pq :S
alter sequence CODCAMPOAUTO_SEQ NOCACHE;

-- cria trigger que efetua a operacao de auto incremento
create OR replace trigger trg_bi_DBTABELA
before insert on DBTABELA
for each row
begin
if :new.CODCAMPOAUTO is null then
select CODCAMPOAUTO_SEQ.nextval
into :new.CODCAMPOAUTO
from dual;
end if;
end;

quarta-feira, 3 de dezembro de 2008

Startando e Parando o Banco de Dados

Bem como estou usando minha maquina pessoal (WinXp, 2G Ram) para testar o oracle percebi o consumo elevado de memoria do Oracle (~300Mb) e fora que ja tenho problemas com o Firefox 3 (~200Mb) mas isto ja eh outra historia.

Encontrei entao uma solucao, criei um arquivo .BAT para "startar" e parar o banco de dados :

oraServico.bat
rem altere BANCODADOS pelo nome do seu banco de dados
net %1 OracleServiceBANCODADOS
net %1 Oracleora10gTNSListener
net %1 OracleServiceBANCODADOS

linha de comando para inicializar o banco de dados:

oraServico start

linha de comando para finalizar o banco de dados:

oraServico stop
A ultima linha do arquivo oraServico.bat eh so para garantir que o servico foi iniciado ou finalizado. Este processo tambem evita que fiquei abrindo o Painel de Controle>Servicos.

referencia:
http://www.cs.utexas.edu/users/dsb/CS347/Course/oracle_10g_installation.htm#Starting%20and%20Stopping%20Oracle

sexta-feira, 28 de novembro de 2008

Importar Banco de Dados - parte 2

Criei o banco de dados pela primeira, fiz uma importacao para uma schema de usuario vazio. Porem, quando tentei fazer uma nova importacao neste usuario, alguns objetos do schema nao foram atualizados porque ja existiam.

O passo que encontrei para resolver isso foi deletar o usuario e sua colecao de objetos (triggers, tables, indexes, stored procedures e outros).

Codigo SQL:

drop user MACSOUSA cascade;

Ao colocar a palavra CASCADE depois do comando DROP USER MACSOUSA, estou excluido o usuario e sua respectiva colecao de objetos.

Pronto! Agora crio o novo usuario e faco minha nova importacao do banco de dados.

quinta-feira, 27 de novembro de 2008

Criar usuario com privilegios de DBA

Bem como estou trabalhando com Oracle somente em minha maquina e para efeito de testes, estou criando um usuario padrao com privilegios de DBA.

primeiro conecto no PL/SQL com o usuario SYS, um dos usuario padroes criando na criacao do banco de dados. Com este usuario posso criar usuario para usar em teste, e detalhe que preciso q tenha privilegios de DBA.

Codigo SQL usado :
-- Criar usuario com privilegios de DBA
create user MACSOUSA identified by "senha";
grant dba to MACSOUSA;

A importacao da minha base de dados de trabalho foi toda em cima deste usuario.

segunda-feira, 24 de novembro de 2008

Importar Banco de Dados

Apos instalar o Oracle em minha maquina e sonhar em finalmente trabalhar somente em casa, veio a necessidade de importar o banco de dados do trabalho para casa. Estou usando Oracle 10g no Windows Xp e criei um arquivo .BAT para fazer a importacao.

importar.bat

IMP system/senha@bancodados FROMUSER=MACSOUSA TOUSER=MACSOUSA file=%1 FULL=Y log=saida.log

linha de comando :
importar seu_arquivo_bancodado_exportado.dmp

O arquivo saida.log sera criado com todos os detalhes da importacao. Se acontecer erros estaram todos listados nele.

terça-feira, 7 de outubro de 2008

create "blog" oracle_dicas

Primeiro post, apenas para apresentar o blog.

Colocar dicas de trabalho com o oracle para ajudar minha mente que anda falhando bastante e caso eu esteje ajudando alguem por favor nao esqueca de agradecer ou deixar um comentario.

Obrigado!!!