Dicas Oracle 8i

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

 

connect system/manager

Drop user aluno1 cascade;

create user aluno1 identified by senha;

grant connect,resource to aluno1;

connect aluno1/senha

 

   Após a conecção 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),

 SALARIO NUMBER(11,2),

 GERENTE NUMBER(6),

 DATA_ADMISSAO DATE,

 PCT_COMISSAO NUMBER(4,2))

/

//load data
append
into table nombre_tabla
when
(24:25)='01' -- si en esta posición 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 posición 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

NOCYCLE

/

 

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)

/

INSERT INTO DEPARTAMENTO(CODIGO, NOME, COD_REGIAO)

VALUES(S_DEPARTAMENTO.NEXTVAL,'RECURSOS HUMANOS',1)

/

 

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)

/

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, 'ESTAGIÁRIO')

/

 

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)

/

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

/

 

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;

     

 

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

            For v_contador IN 1..v_quantidade LOOP

            INSERT INTO PEDIDO(codigo)

            VALUES(v_contador);

      ENDLOOP;

 END;

     /

Administração de Banco de Dados Oracle 

 

 

   Processo trace de um determinado Usuário

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 estatísticas do schema

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

   Combinar espaços 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 contrário
 podemos efetuar a combinação manualmente com o comando:
  
 ALTER TABLESPACE 
 COALESCE;
 

   Compilar objetos inválidos do schema

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

   Contenção de Latch (Lock de Memória)

 COL C1 FORMAT a25       HEADING 'Tipo de Latch'
 COL C2 FORMAT 999.99999 HEADING 'Misses/Gets (%)'
 COL C3 FORMAT 999.99999 HEADING 'Immediate Misses/Immediate Gets (%)'
 SELECT 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');

   Contenção do Redo Log Buffer

 SELECT VALUE
 FROM V$SYSSTAT
 WHERE NAME = 'redo log space waittime';

   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; 

   Eficiência da Library Cache

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

   Eficiência 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;

   Eficiência 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';

   Eficiência 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 DBMS_SHARED_POOL.KEEP('DBMS_SHARED_POOL');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_ALERT');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_DDL');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_DESCRIBE');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_LOCK');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_OUTPUT');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_PIPE');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_SESSION');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_STANDARD');
 EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_UTILITY');
 EXECUTE DBMS_SHARED_POOL.KEEP('STANDARD')

   Fragmentação 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 instância 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 estão em Execução

 COL C1  FORMAT 99   HEADING 'Ses'
 COL C2  FORMAT 999  HEADING 'Id'
 COL C3  FORMAT A10  HEADING 'Submitter'     TRUNC
 COL C4  FORMAT A10  HEADING 'Security'      TRUNC
 COL C5  FORMAT A20  HEADING 'Job'           WORD_WRAPPED
 COL C6  FORMAT A5   HEADING 'Last|Ok|Date'
 COL C7  FORMAT A5   HEADING 'Last|Ok|Time'
 COL C8  FORMAT A5   HEADING 'This|Run|Date'
 COL C9  FORMAT A5   HEADING 'This|Run|Time'
 COL C10 FORMAT 99   HEADING 'Err'
 SELECT  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 FORMAT A14
 COL C2 FORMAT 999,999,999
 BREACK ON OWNER ON TABLESPACE_NAME
 SELECT 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]',
             'ROLLBACK','[R]', '[O]')
  HAVING count(*) > 5;

   Opções instaladas do banco

Para verificar as opções instaladas
no banco, digite:

SELECT * FROM V$OPTION;

   Opções que o Banco de Dados contempla

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

   Pacotes que estão fixos em Memória

 --- **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;

   Parâmetros de inicialização do Oracle

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

   Parâmetros não documentados no INIT.ORA

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

   Porcentagem de Memória 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 usuários
 nas tablespaces, podemos efetuar a DML abaixo:
  
 BREAK ON TABLESPACE ON OWNER
 COL C1 FORMAT A25 HEADING OBJETOS DADOS/INDICES
 SELECT TABLESPACE_NAME, OWNER
 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;

   Reexecuções 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 renovação 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$;

   Utilização 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');

   Versão do Banco

Para verificar a versão de seu banco
de dados, digite:

SELECT * FROM V$VERSION;

   ORA-00001 - Dup val on index

O erro ORA-00001 é um erro relacionado à duplicação de registros do
índice.
Provavelmente o que está ocorrendo é uma violação de unicidade de uma
chave primária ou única, geralmente comum em operações de INSERT ou
UPDATE. 

   ORA-01403 - No data found

O erro ORA-01403 é um erro relacionado ao SELECT dentro de uma
rotina PL/SQL.
Esse erro ocorre quando um SELECT não retorna nenhuma linha.
Por exemplo: 
...
SELECT nome
into v_nome
FROM empregados
WHERE num = -1;
...

esse comando não retornou nada, pois não existe empregado -1,logo
ocorreu o erro. 

   Built-in set_lov_property

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


                 Exemplo: Trata-se de um cardápio eletrônico.


                                    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 condição for apresentar apenas a lista de frutas então: 

                      set_lov_property('lv_produtos', group_name, 'rg_frutas'); 

                 Se a condição for apresentar apenas a lista de bebidas então: 

                      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 três
                 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 seção ou
                      mantendo a mesma seção. É utilizado em aplicações onde podem
                      ser abertos vários forms, sem ter que fechá-los. Obs.: Este tipo de
                      chamada, se não for muito bem controlada, pode ocasionar perda
                      de foco entre as janelas dos forms. 

                      NEW_FORM - Chama um form fechando o form chamador. 

   Condições de query

A pesquisa realizada em um bloco base table pode ter filtros. As
                 condições para se realizar a pesquisa podem ser programadas de duas
                 formas:

                      na trigger pre-query - Será necessário definir a default_where. 
                      Constrói-se a cláusula condicional que será atribuída ao
                      default_where através da built-in set_block_property. 
                                         Exemplo:
                       Bloco: pedido
                       Colunas: codigo_pedido data_pedido valor_pedido
                       declare
                       def_where varchar2(500) := null;
                       begin
                       def_where := 'valor_pedido > 500';
                       set_block_property(pedido, default_where, def_where);
                       end;




                      na property where clause do bloco basta digitar a condição:
                      valor_pedido > 500 

   Erros de windows e canvas durante conversão 4.5->5






                 Ao converter um form 4.5 para 5.0, todos os canvas e windows perdem
                 suas referências. 

                 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 (nível de form) chamada Runtime Compatibility
                 Mode. 

   Mensagens de erro

As mensagens exibidas pelo form, podem ser tratadas através das triggers
                 on-error e on-message. 
                 Podem ser utilizadas libraries com a tradução das mensagens, tratando
                 cada código de erro apresentado pelo form. 

  Propriedade highlight no Forms 5


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

  system.message_level



                 Quando a variável de sistema :system.message_level é alterada pelo
                 programador, podem ser inibidas algumas mensagens apresentadas pelo
                 form. 

                 Deve ser verificado o nível da mensagem apresentada. 

                 Os níveis são 0, 5, 10, 15, 20 e 25, sendo que o nível 0 (zero) é default,
                 fazendo com que o form apresente todas as mensagens.

   Utilização do Post

Cuidado ao utilizar o post, porque não é um commit efetivo.
                 Essa built-in funciona como se fosse um commit, porém só faz efeito para a
                 sessão que está realizando o post; as outras seções não "enxergam" as
                 possíveis alterações, inclusões ou exclusões 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).

   Variáveis de data corrente no Forms, cuidado!

Para quem gosta de utilizar variáveis de sistema na programação,
                 CUIDADO! 


                 No forms 4.5, a variável :system.current_datetime representa a data/hora
                 do servidor.

                 No forms 5.0, a variável mudou de nome. É a :system.effective_date. E a
                 :system.current_datetime representa a data/hora do sistema operacional do
                 client (micro). 

                 Sugestão: Criar uma função "fdata" no banco para retornar a data do
                 servidor, que seja executada junto com o startup do banco. Utilizar esta
                 função ao invés da variável de sistema para não correr o risco de ter que
                 alterá-la em todos os programas, caso hajam mudanças 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 parâmetro 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 número_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(número_do_erro )

Porém esse método só mostra a mensagem do erro, e não o que fazer como solucioná-lo

  Definindo um banco de dados padrão no login

Nas estações Windows para definir um banco de dados
padrão basta adicionar uma variável 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 varíavel: clicando com o botão
direito do mouse:
Novo->Valor da Sequência->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 conexão em oracle8i sem problemas.

   Diretorios padrão no Windows

Esses são alguns diretórios que o Oracle
usa como padrão na instalação:

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

   Como configurar várias máquinas clientes



                 Para clientes com Windows 95 basta você configurar uma única máquina e
                 copiar os seguintes arquivos:TNSNAMES.ORA e SQLNET.ORA, que
                 se localizam nos diretórios: C:\ORAWIN95\NETWORK\ADMIN ou
                 C:\ORAWIN95\NET80\ADMIN para os mesmos diretórios nas outras
                 máquinas, além do arquivo HOSTS, que se localiza no diretório
                 C:\WINDOWS. 

                 Para clientes com Windows NT o procedimento é o mesmo, mas os
                 diretórios dos seguintes arquivos: TNSNAMES.ORA e SQLNET.ORA,
                 que se localizam em: C:\ORANT\NETWORK\ADMIN ou
                 C:\ORANT\NET80\ADMIN , além do arquivo HOSTS, que se localiza
                 no diretório 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         : http://www.oracle.trix.net

  -- Criado      : 14 e 15/8/2000 

  -- Aplicativo  : 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

  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 parâmetro 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;
 

   Utilização das variáveis compostas do PL/SQL

-------------------------------------------------------------------
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

 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)
-- 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
 
 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.
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
-------------------------------------------------------------------

Colocar o IAS no ar

No NT:
inicialize o servico iAS (Apache)

No unix:
logue-se com o usuário que instalou o produto e digite:

inicialize o script:
startJserv.sh

  Colocar um site no ar (OAS versão 3)

owsctl start wrb
owsctl start www

   Colocar um site no ar (OAS versão 4)

owsctl start

ou:
owsctl start -orb
owsctl start -wrb all
owsctl start -l www

A porta de administração:
owsctl start -nodemgr

   Tirar um site do ar (OAS versão 3)

owsctl stop admin
owsctl stop www
owsctl stop 

owsctl stop wrb

   Tirar um site do ar (OAS versão 4)

owsctl stop

A porta de administração:
owsctl stop -nodemgr

HOME


FSOFTWARES ® Todos os direitos reservados.


Redirecinar:  http://www.fontesbrasil.com      Melhor visualização 800 x 600