Está en la página 1de 21

Banco de Dados Oracle Passo A passo

Dicas Oracle 8i
Algumas dicas de como criar um Banco de Dados em Oracle.8i

Page 1 of 21

connect system/manager Drop user aluno1 cascade; create user aluno1 identified by senha; grant connect,resource to aluno1; connect aluno1/senha

Aps a coneco como criar Tabelas


CREATE TABLE REGIAO (CODIGO NUMBER(6) PRIMARY KEY, NOME VARCHAR2(25)) /

CREATE TABLE DEPARTAMENTO (CODIGO NUMBER(6) PRIMARY KEY, NOME VARCHAR2(25) NOT NULL, COD_REGIAO NUMBER(6)) / CREATE TABLE CARGO (CODIGO NUMBER(6) PRIMARY KEY, NOME VARCHAR2(25) NOT NULL) / CREATE TABLE EMPREGADO (CODIGO NUMBER(6) PRIMARY KEY, SOBRENOME VARCHAR2(25) NOT NULL, NOME VARCHAR2(25) NOT NULL, COD_DEPTO NUMBER(6), COD_CARGO NUMBER(6),

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


SALARIO NUMBER(11,2), GERENTE NUMBER(6), DATA_ADMISSAO DATE, PCT_COMISSAO NUMBER(4,2)) /

Page 2 of 21

//load data append into table nombre_tabla when (24:25)='01' -- si en esta posicin el valor es 01 carga en una tabla determinada ( Campo1 position (028:045) char, Campo2 position (012:012) char, Campo3 position (067:084) char, Campo4 position (046:057) date "rrmmddhh24miss", Campo5 position (060:066) integer external , Campo6 position (088:095) char, Campo7 position (096:103) char ) into table nombre_table when (24:25)='05' -- si en esta posicin el valor es 05 carga en otra tabla o en la misma dejando fuera cualquier valor distinto de 01 y 05 ( Campo1 position (028:045) char, Campo2 position (012:012) char, Campo3 position (067:084) char, Campo4 position (046:057) date "rrmmddhh24miss", Campo5 position (060:066) integer external , Campo6 position (088:095) char, Campo7 position (096:103) char )

Criando SEQUENCE
CREATE SEQUENCE S_REGIAO NOCACHE NOCYCLE / CREATE SEQUENCE S_DEPARTAMENTO NOCACHE NOCYCLE / CREATE SEQUENCE S_CARGO NOCACHE NOCYCLE / CREATE SEQUENCE S_EMPREGADO NOCACHE

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


NOCYCLE /

Page 3 of 21

Inserindo Dados nas Tabelas

INSERT INTO REGIAO(CODIGO, NOME) VALUES(S_REGIAO.NEXTVAL,'AMERICA DO NORTE') / INSERT INTO REGIAO(CODIGO, NOME) VALUES(S_REGIAO.NEXTVAL,'AMERICA DO SUL') / INSERT INTO REGIAO(CODIGO, NOME) VALUES(S_REGIAO.NEXTVAL,'AFRICA') / INSERT INTO REGIAO(CODIGO, NOME) VALUES(S_REGIAO.NEXTVAL,'ASIA') / INSERT INTO REGIAO(CODIGO, NOME) VALUES(S_REGIAO.NEXTVAL,'EUROPA') /

INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'FINANCEIRO',1) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'CONTABILIDADE',1) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'INFORMATICA',1) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'VENDAS',1) /

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'RECURSOS HUMANOS',1) /

Page 4 of 21

INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'FINANCEIRO',2) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'CONTABILIDADE',2) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'INFORMATICA',2) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'VENDAS',2) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'RECURSOS HUMANOS',2) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'FINANCEIRO',3) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'CONTABILIDADE',3) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'INFORMATICA',3) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'VENDAS',3) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'RECURSOS HUMANOS',3)

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


/ INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'FINANCEIRO',4) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'VENDAS',4) / INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO) VALUES(S_DEPARTAMENTO.NEXTVAL,'RECURSOS HUMANOS',4) / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'PRESIDENTE') / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'GERENTE DE VENDAS') / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'GERENTE DE INFORMATICA') / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'REPRESENTANTE DE VENDAS') / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'ANALISTA DE SISTEMAS') / INSERT INTO CARGO(CODIGO,NOME) VALUES(S_CARGO.NEXTVAL, 'ESTAGIRIO') /

Page 5 of 21

INSERT INTO EMPREGADO (CODIGO,SOBRENOME,NOME,COD_DEPTO,COD_CARGO,SALARIO,GERENTE,DATA_ADMISSAO,PCT_COMISSAO) VALUES(S_EMPREGADO.NEXTVAL,'BARBOSA','ANTONIO',1,1,1140.00,NULL, TO_DATE ('01061980','DDMMYYYY'),NULL) /

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 6 of 21

INSERT INTO EMPREGADO (CODIGO,SOBRENOME,NOME,COD_DEPTO,COD_CARGO,SALARIO,GERENTE,DATA_ADMISSAO,PCT_COMISSAO) VALUES(S_EMPREGADO.NEXTVAL,'COSTA','CARLA',1,2,254.00,1, TO_DATE('01061980','DDMMYYYY'),5) / INSERT INTO EMPREGADO (CODIGO,SOBRENOME,NOME,COD_DEPTO,COD_CARGO,SALARIO,GERENTE,DATA_ADMISSAO,PCT_COMISSAO) VALUES(S_EMPREGADO.NEXTVAL,'COSTA','PEDRO',1,3,123.00,1, TO_DATE('01071980','DDMMYYYY'),NULL) / INSERT INTO EMPREGADO (CODIGO,SOBRENOME,NOME,COD_DEPTO,COD_CARGO,SALARIO,GERENTE,DATA_ADMISSAO,PCT_COMISSAO) VALUES(S_EMPREGADO.NEXTVAL,'GARCIA','ALEXANDRE',1,4,40.00,2, TO_DATE('01071980','DDMMYYYY'),7) / INSERT INTO EMPREGADO (CODIGO,SOBRENOME,NOME,COD_DEPTO,COD_CARGO,SALARIO,GERENTE,DATA_ADMISSAO,PCT_COMISSAO) VALUES(S_EMPREGADO.NEXTVAL,'GOMES','RICARDO',1,4,100.23,2, TO_DATE('01071980','DDMMYYYY'),NULL) /

Exemplos de Select e Insert com PL/SQL

ACCEPT p_coddigo PROMPT 'Entre com o codigo do Departamento:'; ACCEPT p_nome PROMPT 'Entre com o nome do Departamento:'; ACCEPT p_cod_regiao PROMPT 'Entre com o codigo da Regiao:'; DECLARE v_codigo departamento.codigo%type:=&p_codigo; v_nome departamento.nome%type:=&'p_nome'; v_cod_regiao departamento.cod_regiao%type:=&pcod_regiao; BEGIN --Estou consultando de acordo com p_cad_emp INSERT INTO DEPARTAMENTO(codigo,nome,cod_regiao) values(v_codigo,v_nome,v_cod_regiao); end; edit /

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 7 of 21

set verify off;

var v_sal number; var v_nom varchar2(25);

ACCEPT p_coddigo PROMPT 'entre com o codigo do Departamento:'; ACCEPT p_nome PROMPT 'entre como nome do Departamento:'; ACCEPT p_cod_regiao PROMPT 'entre com o codigo da Regiao:';

DECLARE v_codigo departamento.codigo%type:=&p_codigo; v_nome departamento.nome%type:=&'p_nome'; v_cod_regiao departamento.cod_regiao%type:=&pcod_regiao;

BEGIN --Estou consultando de acordo com p_cad_emp

INSERT INTO DEPARTAMENTO(codigo,nome,cod_regiao) values(v_codigo,v_nome,v_cod_regiao); end; /

set verify off;

var p_qtd number;

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 8 of 21

ACCEPT p_qtde PROMPT 'Informe a quantidade de Pedidos :';

DECLARE v_quantidade NUMBER(2):=&p_qtde; v_contador NUMBER(2):=1

BEGIN

LOOP ISERT INTO PEDIDO(codigo) values(v_contador); v_CONTADOR:=VCONTADOR+1; EXIT WHEN v_quantidade<v_contador; ENDLOOP; END;

/ set verify off;

var p_qtd number;

ACCEPT p_qtde PROMPT 'Informe a quantidade de Pedidos :';

DECLARE v_quantidade NUMBER(2):=&p_qtde;

BEGIN

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


For v_contador IN 1..v_quantidade LOOP INSERT INTO PEDIDO(codigo) VALUES(v_contador); ENDLOOP; END; / Administrao de Banco de Dados Oracle

Page 9 of 21

Processo trace de um determinado Usurio


EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE);

Arquivo contendo create controlfile no trace file


ALTER DATABASE BACKUP CONTROLFILE TO TRACE;

Atualizar estatsticas do schema


Para atualizar as estatsticas de todo um schema (tables, indexes e clusters) podemos executar o pacote abaixo. EXECUTE DBMS_UTILITY.ANALYZE_SCHEMA(' ','COMPUTE');

Combinar espaos de Tabelas (coalesce)


Para que o processo SMON periodicamente desperte e efetue o coalesce nas tablespaces do Oracle, as mesmas devem possuir PCTINCREASE igual a 1. Caso contrrio podemos efetuar a combinao manualmente com o comando: ALTER TABLESPACE COALESCE;

Compilar objetos invlidos do schema


Para compilar os objetos de todo um schema (procedures, functions e packages) podemos executar o pacote abaixo. EXECUTE DBMS_UTILITY.COMPILE_SCHEMA(' ');

Conteno de Latch (Lock de Memria)


COL C1 COL C2 COL C3 SELECT FORMAT a25 HEADING 'Tipo de Latch' FORMAT 999.99999 HEADING 'Misses/Gets (%)' FORMAT 999.99999 HEADING 'Immediate Misses/Immediate Gets (%)' N.NAME C1, MISSES*100/(gets+1) pct_miss C2, IMMEDIATE_MISSES*100/(immediate_gets+1) C3 FROM V$LATCHNAME N, V$LATCH L WHERE N.LATCH# = L.LATCH# AND N.NAME IN ('redo allocation','redo copy');

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


Conteno do Redo Log Buffer
SELECT VALUE FROM V$SYSSTAT WHERE NAME = 'redo log space waittime';

Page 10 of 21

DML's sendo executadas no momento


COL C1 FORMAT A10 HEADING 'Usuario' COL C2 HEADING 'Texto SQL' SELECT S.USERNAME C1, T.SQL_TEXT FROM V$SESSION S, V$SQLTEXT T WHERE S.SQL_ADDRESS = T.ADDRESS AND S.SQL_HASH_VALUE = T.HASH_VALUE AND S.USERNAME IS NOT NULL ORDER BY S.USERNAME, S.PREV_SQL_ADDR, S.PREV_HASH_VALUE, T.PIECE;

Efetuar "TRUNCATE TABLE" via procedure


CREATE OR REPLACE PROCEDURE TRUNCTAB (N_TAB IN VARCHAR2) IS V_CURSOR INTEGER; IGNORE INTEGER; BEGIN V_CURSOR := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(V_CURSOR, 'TRUNCATE TABLE '||N_TAB||' REUSE STORAGE',DBMS_SQL.V7); IGNORE := DBMS_SQL.EXECUTE(V_CURSOR); DBMS_SQL.CLOSE_CURSOR(V_CURSOR); END; / CREATE PUBLIC SYNONYM TRUNCTAB FOR TRUNCTAB; GRANT EXECUTE ON TRUNCTAB TO PUBLIC;

Eficincia da Library Cache


SELECT ROUND(SUM(PINHITS)/SUM(PINS) * 100,2) FROM V$LIBRARYCACHE;

Eficincia da Sort Area


SELECT ROUND((SUM(DECODE(NAME, 'sorts (memory)', VALUE, 0))/ (SUM(DECODE(NAME, 'sorts (memory)', VALUE, 0))+ SUM(DECODE(NAME, 'sorts (disk)', VALUE, 0))))* 100,2) SORT FROM V$SYSSTAT;

Eficincia do database buffer


SELECT ROUND((1-(PR.VALUE/ (BG.VALUE+CG.VALUE)))*100,2) DB_BUFFER FROM V$SYSSTAT PR, V$SYSSTAT BG, V$SYSSTAT CG WHERE PR.NAME = 'physical reads' AND BG.NAME = 'db block gets' AND CG.NAME = 'consistent gets';

Eficincia do Dictionary Cache


SELECT ROUND(SUM(GETS)/(SUM(GETS)+SUM(GETMISSES)) * 100,2) DICT FROM V$ROWCACHE;

Encolher o rollback segment


ALTER ROLLBACK SEGMENT RBS_05 SHRINK; Encolher para 512 Kbytes ALTER ROLLBACK SEGMENT RBS_05 SHRINK TO 512K;

Fixar Packages na Shared Pool (SQL Area)


Devido ao seu uso constante eu recomendo que os packages abaixo estejam fixados na Shared Pool. Exemplo de roteiro para ser disparado no Startup: EXECUTE EXECUTE EXECUTE EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_SHARED_POOL'); DBMS_SHARED_POOL.KEEP('DBMS_ALERT'); DBMS_SHARED_POOL.KEEP('DBMS_DDL'); DBMS_SHARED_POOL.KEEP('DBMS_DESCRIBE');

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_LOCK'); DBMS_SHARED_POOL.KEEP('DBMS_OUTPUT'); DBMS_SHARED_POOL.KEEP('DBMS_PIPE'); DBMS_SHARED_POOL.KEEP('DBMS_SESSION'); DBMS_SHARED_POOL.KEEP('DBMS_STANDARD'); DBMS_SHARED_POOL.KEEP('DBMS_UTILITY'); DBMS_SHARED_POOL.KEEP('STANDARD')

Page 11 of 21

Fragmentao nos datafiles


SELECT FILE_ID, SEGMENT_NAME, BLOCK_ID, BLOCK_ID+BLOCKS NEXT, BLOCKS, BYTES FROM DBA_EXTENTS UNION SELECT FILE_ID, 'FREE SPACE', BLOCK_ID, BLOCK_ID+BLOCKS NEXT, BLOCKS, BYTES FROM DBA_FREE_SPACE ORDER BY 1, 3;

Hora em que a instncia do Oracle foi ativada


SELECT TO_CHAR(TO_DATE(D.VALUE,'J'),'MM/DD/YYYY.html')||' '|| TO_CHAR(TO_DATE(S.VALUE,'SSSSS'),'HH24:MI:SS') STARTUP_TIME FROM V$INSTANCE D, V$INSTANCE S WHERE D.KEY = 'STARTUP TIME - JULIAN' AND S.KEY = 'STARTUP TIME - SECONDS';

Job's que esto em Execuo


COL C1 COL C2 COL C3 COL C4 COL C5 COL C6 COL C7 COL C8 COL C9 COL C10 SELECT FORMAT 99 HEADING 'Ses' FORMAT 999 HEADING 'Id' FORMAT A10 HEADING 'Submitter' TRUNC FORMAT A10 HEADING 'Security' TRUNC FORMAT A20 HEADING 'Job' WORD_WRAPPED FORMAT A5 HEADING 'Last|Ok|Date' FORMAT A5 HEADING 'Last|Ok|Time' FORMAT A5 HEADING 'This|Run|Date' FORMAT A5 HEADING 'This|Run|Time' FORMAT 99 HEADING 'Err' A.SID C1, A.JOB C2, B.LOG_USER C3, B.PRIV_USER C4, B.WHAT C5, to_char(A.LAST_DATE,'MM/DD.html') C6, substr(A.LAST_SEC,1,5) C7, to_char(A.THIS_DATE,'MM/DD.html') C8, substr(A.THIS_SEC,1,5) C9, A.FAILURES C10 FROM DBA_JOBS B, DBA_JOBS_RUNNING A WHERE A.JOB = B.JOB;

Listagem de todas as Tabelas "V$"


SELECT KQFVINAM FROM X$KQFVI;

Objetos fragmentados canditatos a reconstrucao


COL C1 COL C2 BREACK SELECT FORMAT A14 FORMAT 999,999,999 ON OWNER ON TABLESPACE_NAME OWNER, TABLESPACE_NAME, SEGMENT_NAME|| decode(SEGMENT_TYPE,'TABLE','[T]', 'INDEX', '[I]', 'ROLLBACK','[R]', '[O]') segment_name , sum(BYTES) C2, decode(count(*),1,to_char(count(*)), 2,to_char(count(*)), 3,to_char(count(*)), 4,to_char(count(*)), 5,to_char(count(*)), to_char(count(*))||' < Re-Construir') C1 FROM DBA_EXTENTS WHERE OWNER NOT IN ('SYS','SYSTEM','OWNER1') GROUP BY OWNER, TABLESPACE_NAME, SEGMENT_NAME|| decode(SEGMENT_TYPE,'TABLE','[T]', 'INDEX', '[I]',

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


'ROLLBACK','[R]', '[O]') HAVING count(*) > 5;

Page 12 of 21

Opes instaladas do banco


Para verificar as opes instaladas no banco, digite: SELECT * FROM V$OPTION;

Opes que o Banco de Dados contempla


COL C1 FORMAT A35 COL C2 FORMAT A35 SELECT PARAMETER C1, VALUE C2 FROM X$OPTION;

Pacotes que esto fixos em Memria


--- **NOTA: execute dbms_shared_pool.keep('nome'); COL C1 HEADING 'Owner' COL C2 HEADING 'Tipo' COL C3 HEADING 'Nome' COL C4 HEADING 'Execucoes' FORMAT 999,999,999 COL C5 HEADING 'Memoria_Usada' FORMAT 999,999,999 SELECT substr(OWNER,1,10) C1, substr(TYPE,1,12) C2, substr(NAME,1,20) C3, EXECUTIONS C4, SHARABLE_MEM C5, substr(KEPT||' ',1,4) 'Fixo?' FROM V$DB_OBJECT_CACHE WHERE TYPE IN ('TRIGGER','PROCEDURE','PACKAGE BODY','PACKAGE') ORDER BY C4 DESC;

Parmetros de inicializao do Oracle


SELECT NAME, VALUE FROM V$PARAMETER ORDER BY NAME;

Parmetros no documentados no INIT.ORA


SELECT KSPPINM FROM X$KSPPI WHERE SUBSTR(KSPPINM, 1, 1) = '_' ORDER BY 1;

Porcentagem de Memria Livre na Shared Pool


SELECT ROUND((SUM(DECODE(NAME, 'free memory', BYTES, 0)) / SUM(BYTES)) * 100,2) FREE_MEM FROM V$SGASTAT;

Processo trace no SQL*Plus


Executar antes os arquivos UTLXPLAN.SQL e PLUSTRCE.SQL SQL> SET AUTOTRACE ON

Processos do Oracle e Processos do SO


SELECT A.USERNAME, A.STATUS, B.USERNAME OS_USER, B.SPID, A.SID, A.SERIAL#, A.MACHINE FROM V$SESSION A, V$PROCESS B WHERE A.PADDR = B.ADDR;

Quantidade de objetos nas tablespaces


Para verificar a quantidade de objetos dos usurios nas tablespaces, podemos efetuar a DML abaixo: BREAK ON TABLESPACE ON OWNER COL C1 FORMAT A25 HEADING OBJETOS DADOS/INDICES SELECT TABLESPACE_NAME, OWNER

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


COUNT(*) ||' TABELAS' C1 FROM DBA_TABLES GROUP BY TABLESPACE_NAME, OWNER UNION SELECT TABLESPACE_NAME, OWNER COUNT(*) ||' INDICES' C1 FROM DBA_INDEXES GROUP BY TABLESPACE_NAME, OWNER;

Page 13 of 21

Reexecues solicitadas no Pool compartilhado


COL C1 HEADING 'Objeto(pseudo-codigo)' COL C2 FORMAT 999.999 HEADING 'Reloads' COL C3 FORMAT 999.999 HEADING 'Invalidacoes' SELECT NAMESPACE C1, RELOADS C2, INVALIDATIONS C3 FROM V$LIBRARYCACHE;

Renovar as tabelas de Snapshot


Para renovar todas as tabelas de snapshot o pacote abaixo pode ser executado a qualquer momento no siatema de destino. EXECUTE DBMS_SNAPSHOT.REFRESH_ALL;

Para forcar a renovao de apenas uma tabela: EXECUTE DBMS_SNAPSHOT.REFRESH('tabela','F'); /*forced refresh*/

Tornar um arquivo autoextend


ALTER DATABASE DATAFILE '/u03/oradata/dsv01/tbs_dsv01_usr_dados_01.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE 500M; ALTER DATABASE DATAFILE '/u03/oradata/dsv01/tbs_dsv01_usr_dados_01.dbf' AUTOEXTEND MAXSIZE UNLIMITED; SELECT FILE#, MAXEXTEND* , INC* FROM SYS.FILEXT$;

Utilizao do Database Buffer Cache


SELECT DECODE (STATE, 0, 'FREE', 1, 'READ AND MODIFIED', 2, 'READ AND NOT MODIFIED', 3, 'CURRENTLY BEING READ','OTHER') BUFFER, COUNT(*) FROM X$BH GROUP BY DECODE (STATE, 0, 'FREE', 1, 'READ AND MODIFIED', 2, 'READ AND NOT MODIFIED', 3, 'CURRENTLY BEING READ','OTHER');

Verso do Banco
Para verificar a verso de seu banco de dados, digite: SELECT * FROM V$VERSION;

ORA-00001 - Dup val on index


O erro ORA-00001 um erro relacionado duplicao de registros do ndice. Provavelmente o que est ocorrendo uma violao de unicidade de uma chave primria ou nica, geralmente comum em operaes de INSERT ou UPDATE.

ORA-01403 - No data found

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


O erro ORA-01403 um erro relacionado ao SELECT dentro de uma rotina PL/SQL. Esse erro ocorre quando um SELECT no retorna nenhuma linha. Por exemplo: ... SELECT nome into v_nome FROM empregados WHERE num = -1; ... esse comando no retornou nada, pois no existe empregado -1,logo ocorreu o erro.

Page 14 of 21

Built-in set_lov_property
Se um determinado campo dependendo de uma determinada situao, necessitar apresentar ora uma lista de valores ora outra, pode ser utilizada a buit-in set_lov_property.

Exemplo: Trata-se de um cardpio eletrnico.

List_values: lv_produtos Record_group: rg_frutas Select subcodigo, nome From produtos Where codigo = 1 Order by nome Record_group: rg_bebidas Select subcodigo, nome From produtos Where codigo = 2 Order by nome

Se a condio for apresentar apenas a lista de frutas ento: set_lov_property('lv_produtos', group_name, 'rg_frutas'); Se a condio for apresentar apenas a lista de bebidas ento: set_lov_property('lv_produtos', group_name, 'rg_bebidas');

Chamada de um form dentro de outro form


A chamada de um Form dentro de outro Form pode ser feita de trs maneiras: CALL_FORM - Chama um form, mantendo o form chamador aberto. Quando o form chamado finalizado, o comando voltar para a linha abaixo do comando call_form. OPEN_FORM - Chama um form, abrindo uma outra seo ou mantendo a mesma seo. utilizado em aplicaes onde podem ser abertos vrios forms, sem ter que fech-los. Obs.: Este tipo de chamada, se no for muito bem controlada, pode ocasionar perda de foco entre as janelas dos forms. NEW_FORM - Chama um form fechando o form chamador.

Condies de query
A pesquisa realizada em um bloco base table pode ter filtros. As condies para se realizar a pesquisa podem ser programadas de duas formas: na trigger pre-query - Ser necessrio definir a default_where. Constri-se a clusula condicional que ser atribuda ao default_where atravs da built-in set_block_property. Exemplo: Bloco: pedido Colunas: codigo_pedido data_pedido valor_pedido declare def_where varchar2(500) := null;

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


begin def_where := 'valor_pedido > 500'; set_block_property(pedido, default_where, def_where); end;

Page 15 of 21

na property where clause do bloco basta digitar a condio: valor_pedido > 500

Erros de windows e canvas durante converso 4.5->5

Ao converter um form 4.5 para 5.0, todos os canvas e windows perdem suas referncias. Em forms pequenos (com poucas windows), basta referenci-los novamente. Em forms maiores (com muitas windows, 5 ou mais) podem ocorrer os erros FRM-30161: Inconsistent relationship between window and its primary canvas e FRM-30162 Inconsistent relationship between window and its vertical/horizontal toolbar. Quando este erro ocorre, a nica forma de corrigi-lo : excluir a window e a recriar, associando o canvas respectivo.

Forms 5.0 funcionando como Forms 4.5


Para fazer com que um forms 5.0 se comporte como um forms 4.5, basta alterar a propriedade (nvel de form) chamada Runtime Compatibility Mode.

Mensagens de erro
As mensagens exibidas pelo form, podem ser tratadas atravs das triggers on-error e on-message. Podem ser utilizadas libraries com a traduo das mensagens, tratando cada cdigo de erro apresentado pelo form.

Propriedade highlight no Forms 5


No Forms 5.0 para que um campo apresente um comentrio quando o mouse passado sobre ele, basta definir o comentrio na property tooltip do item.

system.message_level
Quando a varivel de sistema :system.message_level alterada pelo programador, podem ser inibidas algumas mensagens apresentadas pelo form. Deve ser verificado o nvel da mensagem apresentada. Os nveis so 0, 5, 10, 15, 20 e 25, sendo que o nvel 0 (zero) default, fazendo com que o form apresente todas as mensagens.

Utilizao do Post
Cuidado ao utilizar o post, porque no um commit efetivo. Essa built-in funciona como se fosse um commit, porm s faz efeito para a sesso que est realizando o post; as outras sees no "enxergam" as possveis alteraes, incluses ou excluses realizadas pelo post. O post pode alterar o status do form para query e realiza todas as checagens em triggers disparadas pelo commit (por ex.: pre-insert, pre-update).

Variveis de data corrente no Forms, cuidado!


Para quem gosta de utilizar variveis de sistema na programao, CUIDADO!

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 16 of 21

No forms 4.5, a varivel :system.current_datetime representa a data/hora do servidor. No forms 5.0, a varivel mudou de nome. a :system.effective_date. E a :system.current_datetime representa a data/hora do sistema operacional do client (micro). Sugesto: servidor, funo ao alter-la Criar uma funo "fdata" no banco para retornar a data do que seja executada junto com o startup do banco. Utilizar esta invs da varivel de sistema para no correr o risco de ter que em todos os programas, caso hajam mudanas como essa.

Como logar-se como SYS no 9i ?


Para logar-se como SYS no 9i: connect sys/senha_do_sys as sysdba Para acessar normalmente como no Oracle 7/8/8i : altere o seguinte parmetro no init: O7_DICTIONARY_ACCESSIBILITY=TRUE restarte o banco e tente se logar: connect sys/senha_do_sys

Como procurar tratamento para mensagem de erro?


UNIX: Existe um aplicativo chamado oerr que mostra a mensagem de erro e o que fazer para solucion-la. Simplesmente digite: oerr tipo_do_erro nmero_do_erro Por exemplo: oerr ora 600 vai te orientar o que fazer se der ocorrer o erroORA-0600. Windows: No SQL*Plus: set serverout on exec dbms_output.put_line(sqlerrm(nmero_do_erro ) Porm esse mtodo s mostra a mensagem do erro, e no o que fazer como solucion-lo

Definindo um banco de dados padro no login


Nas estaes Windows para definir um banco de dados padro basta adicionar uma varivel de ambiente ao sistema operacional chamada LOCAL. Para isso, clique em iniciar->executar e digite REGEDIT. Depois procure dentro das pastas: Meu Computador->HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE Dentro da pasta Oracle crie uma varavel: clicando com o boto direito do mouse: Novo->Valor da Sequncia->LOCAL Agora d um duplo clique em local e entre com o valor do banco de dados que desejar. Se por acaso no trabalho todo dia vc se loga como: portal/minhasenha@oracle8i coloque na LOCAL o valor "oracle8i". Assim basta voc se logar como portal/minhasenha que ser feita a conexo em oracle8i sem problemas.

Diretorios padro no Windows


Esses so alguns diretrios que o Oracle usa como padro na instalao:

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 17 of 21

ORACLE_HOME ficava no C:\ORAWIN95 nas verses 7 at 8.0; agora na 8i o ORACLE_HOME fica no C:\ORACLE\OraHome1

Como configurar vrias mquinas clientes


Para clientes com Windows 95 basta voc configurar uma nica mquina e copiar os seguintes arquivos:TNSNAMES.ORA e SQLNET.ORA, que se localizam nos diretrios: C:\ORAWIN95\NETWORK\ADMIN ou C:\ORAWIN95\NET80\ADMIN para os mesmos diretrios nas outras mquinas, alm do arquivo HOSTS, que se localiza no diretrio C:\WINDOWS. Para clientes com Windows NT o procedimento o mesmo, mas os diretrios dos seguintes arquivos: TNSNAMES.ORA e SQLNET.ORA, que se localizam em: C:\ORANT\NETWORK\ADMIN ou C:\ORANT\NET80\ADMIN , alm do arquivo HOSTS, que se localiza no diretrio C:\WINNT\SYSTEM32\DRIVERS\ETC.

Finalizando listener
em Windows ou UNIX: lsnrctl stop se for Oracle 8.0: lsnrctl80 stop

iniciando listener
em Windows ou UNIX: lsnrctl start se for Oracle 8.0: lsnrctl80 start

status do listener
em Windows ou UNIX: lsnrctl status se for Oracle 8.0: lsnrctl80 status

APW - Agenda Pessoal via Web


-- URL -- Criado -- Aplicativo : http://www.oracle.trix.net : 14 e 15/8/2000 : Agenda PL/SQL

/* Esta aplicacao foi criada com o proposito totalmente DIDATICO, ou seja, para o aprendizado de aplicacoes web em PL/SQL. Trata-se de um sistema de consulta/cadastro e alteracao bem simples, envolvendo 3 tabelas: CIDADES, PFISICAS (das pessoas fisicas) e PJURIDICAS (das pessoas juridicas). Para o desenvolvimento de algo mais complexo basta adaptar a aplicacao

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo

Page 18 of 21

e adicionar rotinas na medida do possivel. Numa futura implementacao poderia existir a mesma aplicacao, porem com suporte a varios usuarios, ou seja, varias agendas de varios usuarios, cada um com sua area publica e privada e cada um com a sua senha.

Coloque o seu servidor web no ar (WebDB ou OAS) e chame o endereco: http://seu-site/sua-aplicacao/apw.inicio =========================================

Executar comandos DML (create, alter,etc) no 8i


Em uma rotina PL/SQL , para executar um comando DML, como por exemplo um CREATE TABLE, utilize o comando EXECUTE IMMEDIATE da seguinte maneira: procedure teste_cria_tabela(nome varchar2) as begin execute immediate ' create table '||nome||' ( teste char)' ; end; Essa procedure criar tabelas dinamicamente, basta passar o parmetro correto, por exemplo: teste_cria_tabela('tabela1); teste_cria_tabela('tabela2); ...

Tratando qualquer tipo de erro na rotina


Numa rotina desse tipo: begin ... ... end; para tratar qualquer tipo de erro adicione as linhas: begin .. .. EXCEPTION when others then ..... end; Exemplo: declare v_nome varchar2(30); begin select nome into v_nome from funcionarios where ID=100; EXCEPTION when OTHERS then raise_application_error(-20000,' Erro no cadastro!'); end;

Utilizao das variveis compostas do PL/SQL


-------------------------------------------------------------------

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


Exemplo de utilizacao das variaveis compostas do PL/SQL para a leitura de uma tabela e passa-la como parametro. ------------------------------------------------------------------O exemplo utiliza a tabela EMP do usuario SCOTT. ------------------------------------------------------------------Existem no exemplo 4 rotinas: a procedure le_Tabela faz exatamente o que as 3 rotinas restantes fazem: le os dados da tabela EMP e os exibe na tela do SQL*Plus. -le_tabela - procedure que le os dados da EMP e os exibe na tela -pac_tabela - package que possui o tipo emp_tabela_type publico -le_tabela2 - le a tabela EMP e joga pra variavel TABELA -le_tabela3 - recebe uma variavel do tipo emp_tabela_type e exibe o seu conteudo na tela. ------------------------------------------------------------------Analize o codigo fonte para melhor compreensao. ------------------------------------------------------------------Obs: poderia ter juntado as rotinas le_tabela2 e le_tabela3 dentro da package pac_tabela ------------------------------------------------------------------Rode esses comandos no SQL*Plus para criacao dos 4 objetos ------------------------------------------------------------------create or replace package pac_tabela is -- criando um vetor de linhas da tabela emp type emp_tabela_type is table of scott.emp%rowtype index by binary_integer; end pac_tabela; / ------------------------------------------------------------------create or replace procedure le_tabela as -- criando um vetor de linhas da tabela emp type emp_tabela_type is table of scott.emp%rowtype index by binary_integer; tabela emp_tabela_type ; -- para referenciar linha: tabela(numero) -- para referenciar campo: tabela.campo -- Exemplo: linha 5 , coluna sal: tabela(5).sal cursor c_emp is select * from scott.emp; contador number :=1; begin dbms_output.put_line('Executando a rotina le_tabela...'); -- le dados da tabela for rec_emp in c_emp loop tabela(contador):=rec_emp; contador:=contador+1; end loop; -- le dados da variavel para a tela do SQL*Plus -- nao esqueca de digitar "set serverout on" -- para conseguir ver o resultado

Page 19 of 21

for n in reverse 1..contador-1 loop dbms_output.put_line(initcap(tabela(n).ename)||' tem o cargo de '||lower(tabela(n).job)||'.'); end loop; end le_tabela; / ------------------------------------------------------------------create or replace procedure le_tabela2 as tabela pac_tabela.emp_tabela_type ; -- para referenciar linha: tabela(numero)

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


-- para referenciar campo: tabela.campo -- Exemplo: linha 5 , coluna ename: tabela(5).ename cursor c_emp is select * from scott.emp; contador number :=1; begin dbms_output.put_line('Executando a rotina le_tabela2...'); -- le dados da tabela for rec_emp in c_emp loop tabela(contador):=rec_emp; contador:=contador+1; end loop; -- chama a rotina le_tabela3 passando parametros le_tabela3(tabela); end le_tabela2; / ------------------------------------------------------------------create or replace procedure le_tabela3 (tabela in pac_tabela.emp_tabela_type) as begin dbms_output.put_line('Executando a rotina le_tabela3...'); -- le dados da variavel para a tela do SQL*Plus -- nao esqueca de digitar "set serverout on" -- para conseguir ver o resultado

Page 20 of 21

for n in reverse 1..tabela.count loop dbms_output.put_line(initcap(tabela(n).ename)||' tem o cargo de '||lower(tabela(n).job)||'.'); end loop; end le_tabela3; / ------------------------------------------------------------------Esse foi o resultado no sqlplus: ------------------------------------------------------------------SQL> set serverout on SQL> exec le_tabela Executando a rotina le_tabela... Miller tem o cargo de clerk. Ford tem o cargo de analyst. James tem o cargo de clerk. Adams tem o cargo de clerk. Turner tem o cargo de salesman. King tem o cargo de president. Scott tem o cargo de analyst. Clark tem o cargo de manager. Blake tem o cargo de manager. Martin tem o cargo de salesman. Jones tem o cargo de manager. Ward tem o cargo de salesman. Allen tem o cargo de salesman. Smith tem o cargo de clerk. PL/SQL procedure successfully completed SQL> exec le_tabela2 Executando a rotina le_tabela2... Executando a rotina le_tabela3... Miller tem o cargo de clerk. Ford tem o cargo de analyst. James tem o cargo de clerk. Adams tem o cargo de clerk. Turner tem o cargo de salesman. King tem o cargo de president. Scott tem o cargo de analyst. Clark tem o cargo de manager.

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011

Banco de Dados Oracle Passo A passo


Blake tem o cargo de manager. Martin tem o cargo de salesman. Jones tem o cargo de manager. Ward tem o cargo de salesman. Allen tem o cargo de salesman. Smith tem o cargo de clerk. PL/SQL procedure successfully completed -------------------------------------------------------------------

Page 21 of 21

Colocar o IAS no ar
No NT: inicialize o servico iAS (Apache) No unix: logue-se com o usurio que instalou o produto e digite: inicialize o script: startJserv.sh

Colocar um site no ar (OAS verso 3)


owsctl start wrb owsctl start www

Colocar um site no ar (OAS verso 4)


owsctl start ou: owsctl start -orb owsctl start -wrb all owsctl start -l www A porta de administrao: owsctl start -nodemgr

Tirar um site do ar (OAS verso 3)


owsctl stop admin owsctl stop www owsctl stop owsctl stop wrb

Tirar um site do ar (OAS verso 4)


owsctl stop A porta de administrao: owsctl stop -nodemgr

HOME

FSOFTWARES Todos os direitos reservados.

Redirecinar: http://www.fontesbrasil.com

Melhor visualizao 800 x 600

http://www.fontesbrasil.com/dicas_oracle.htm

26/8/2011