[oracle_br] RE: Restore sem um datafile

2013-12-19 Por tôpico jlchiappa
  Tudo jóia ?? Então, basicamente é o que eu falei : TODA e QUALQUER linha numa 
tabela Oracle, como nós sabemos, é identificada por um ROWID, e um ROWID é 
composto pelo id do datafile + bloco +slot aonde a linha reside, sim ??? Então, 
basta vc colocar uma condição no ROWID especificando para não acessar o 
datafile e/ou os blocos corrompidos, okdoc ??? Nada muito complicado, a nota 
metalink "Extract rows from a CORRUPT table creating ROWID from DBA_EXTENTS" 
(Doc ID 422547.1) dá um scriptzinho-exemplo...
  E é Óbvio, antes de mostrar o meu exemplo, observo que :
  
  a. eu suponho aqui que o datafile ** inteiro ** foi perdido : claro que se na 
verdade foram só uns poucos blocos que corromperam, vc facilmente poderia usar 
a DBMS_REPAIR para 'marcar' no dicionário de dados os blocos corruptos , que 
serão pulados nos próximos selects, veja a nota "Extracting Data from a Corrupt 
Table using DBMS_REPAIR or Event 10231" (Doc ID 33405.1)
  
  b. ululantemente óbvio que Índices vc simplesmente reconstrói/recria, views 
materiualizadas vc faz refresh, etc
  
  c. eu estou exemplificando aqui com o caso mais simples, de uma tabela heap 
comum e normal, sem datatypes não-escalares, nem nada : claro que na vida real 
vc pode ter CLUSTER TABLEs, aonde o mesmo bloco pode conter linhas de múltiplos 
segmentos, vc pode ter LOBs (que no caso de LOBs não-inline residem em extents 
de LOB), pode ter Partições A nota "Handling Oracle Block Corruptions in 
Oracle7/8/8i/9i/10g/11g" (Doc ID 28814.1) te guiará para esses casos mais 
complexos...
  
=> Isso posto, vamos ao teste : primeiro, vamos criar uma tabela espalhada por 
múltiplos datafiles ...

SQL> create tablespace TS_TESTE_CORRUPT datafile 
'/home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt01.dbf' size 10m 
autoextend on;

Tablespace created.

SQL> create table TB_CORRUPT tablespace TS_TESTE_CORRUPT as (select * from 
dba_objects where 1=2) ;

Table created.

SQL> insert /*+ APPEND */ into TB_CORRUPT (select * from dba_objects);

74926 rows created.

SQL> commit;

Commit complete.

SQL> alter database datafile 
'/home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt01.dbf' autoextend off;

Database altered.

SQL> alter tablespace TS_TESTE_CORRUPT add datafile 
'/home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt02.dbf' size 10m 
autoextend on;

Tablespace altered.

SQL> insert /*+ APPEND */ into TB_CORRUPT (select * from dba_objects);

74926 rows created.

SQL> commit;

Commit complete.

=> maravilha, vamos acessar todos os blocos dos dois datafiles :

SQL> select count(*) from TB_CORRUPT;

  COUNT(*)
--
149852

=> espia a nossa amiga DBA_EXTENTS :

SQL> desc dba_extents
 Name   Null?   
 Type
 -- 
 
 OWNER  
 VARCHAR2(30)
 SEGMENT_NAME   
 VARCHAR2(81)
 PARTITION_NAME 
 VARCHAR2(30)
 SEGMENT_TYPE   
 VARCHAR2(18)
 TABLESPACE_NAME
 VARCHAR2(30)
 EXTENT_ID  
 NUMBER
 FILE_ID
 NUMBER
 BLOCK_ID   
 NUMBER
 BYTES  
 NUMBER
 BLOCKS 
 NUMBER
 RELATIVE_FNO   
 NUMBER

=> veja lá que tenho extents nos dois datafiles :

SQL> select file_id, RELATIVE_FNO, sum(blocks) from dba_extents where 
tablespace_name='TS_TESTE_CORRUPT' group by file_id, RELATIVE_FNO;

   FILE_ID RELATIVE_FNO SUM(BLOCKS)
--  ---
 881024
 771152

SQL> select file_id, file_name from dba_data_files where file_id in (7,8);

   FILE_ID
--
FILE_NAME
-
 7
/home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt01.dbf

 8
/home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt02.dbf


==> okdoc ?? Agora vou corromper/perder um dos datafiles :

SQL> !cp /dev/null /home/oracle/app/oracle/oradata/orcl/ts_teste_corrupt02.dbf

=> ululantemente óbviamente, AINDA tenho no dicionário extents marcados como 
pertencentes ao arquivo apagado, quando tentar acesssar a tabela inteira, o 
dicionário aponta para esses extents, na hora de os ler recebo erro : 

SQ

Re: [oracle_br] RE: Restore sem um datafile

2013-12-19 Por tôpico Fabricio Pedroso Jorge
Ve na DBA_EXTENTS pelo file_id, ou file#, não lembro agora do datafile
corrompido, ai ve todos os objetos dessa tablespace que não pertençam a
este datafile.


Em 19 de dezembro de 2013 17:29,  escreveu:

>
>
> Chiappa, como remover os "dados/segmentos/extents que estavam nesse
> arquivo perdido" ? Não entendi como faria isso.
>  
>



-- 
*Fabrício Pedroso Jorge.*

Administrador de Banco de Dados
Oracle 11g Certified SQL Expert
Oracle 11g Certified Associate
Oracle 11g Certified Professional
Linux Professional Institute Certified Level I (LPIC-I)
ITIL V3 Foudations
certificacaodb.com.br

*Resumo Profissional:*
http://br.linkedin.com/in/fabriciojorge

*Contatos:*
+ 55 91 88991116
skype: fabricio.pedroso.jorge
fpjb...@gmail.com


[oracle_br] RE: Restore sem um datafile

2013-12-19 Por tôpico neto.longhi
Chiappa, como remover os "dados/segmentos/extents que estavam nesse arquivo 
perdido" ? Não entendi como faria isso.

RES: RES: RES: RES: RES: RES: [oracle_br] Re: Duvidas Backup RMAN

2013-12-19 Por tôpico Ednilson Silva
Ederson,

Muito estranho então.



RMAN> show all;



using target database control file instead of recovery catalog

RMAN configuration parameters are:

CONFIGURE RETENTION POLICY TO REDUNDANCY 1;

CONFIGURE BACKUP OPTIMIZATION ON;

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 
'/d01/backup/prod/%F';

CONFIGURE DEVICE TYPE DISK PARALLELISM 5 BACKUP TYPE TO COMPRESSED BACKUPSET;

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   
'/d01/backup/prod/BKP_%d_%t_%s.rman' MAXPIECESIZE 10 G;

CONFIGURE MAXSETSIZE TO UNLIMITED; # default

CONFIGURE ENCRYPTION FOR DATABASE OFF; # default

CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/d01/backup/prod/snapcf_prod.f';



Estava acompanhando, e quando o primeiro arquivo *.rman atingiu 10G, ele 
simplesmente sumiu.

Acabei subescrevendo o arquivo de log, coloquei para gerar novamente o backup 
full, com essa nova alteração que voce passou levou 3 horas, fiquei 
impressionado.



Grato,

Ednilson Silva



De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome 
de ederson200...@yahoo.com.br
Enviada em: quarta-feira, 18 de dezembro de 2013 10:12
Para: oracle_br@yahoogrupos.com.br
Assunto: RE: RES: RES: RES: RES: RES: [oracle_br] Re: Duvidas Backup RMAN





Edinilson,

O destino dos backups, vc confere e configura com SHOW ALL e se não esver 
correto, basta rodar:

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 
'/d01/backup/%F';
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   '/d01/backup/%U' MAXPIECESIZE 10 G;

Neste diretório (/d01/backup), devem permanecer os arquivos ao fim do backup, 
senão eles foram removidos por outro processo.



Inclusive, vc pode monitorar os arquivos sendo "escritos" durante a execução do 
rman da outra janela, abrindo outra sessão TTY ou putty e fazendo:



$ cd /d01/backup

$ watch -d ls -lt



Verifica o conteúdo do arquivo gerado na linha (confira o nome q vc colocou):



rman target=/ log=/home/oracle/bkp03_rman.log << EOF



Qualquer coisa, coloca o conteúdo do arquivo no corpo da mensagem.



[]'s





Ederson Elias
DBA Oracle
http://br.linkedin.com/pub/ederson-elias/24/8b/8b0

Labor improbus omnia vincit







[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] RE: Restore sem um datafile

2013-12-19 Por tôpico jlchiappa
 A gente só espera que o pessoalzinho aí tenha aprendido a lição, que a perda 
dos dados que estavam no datafile corrompido/perdido sirva de lição pra turma...
  Bom, sobre o procedimento : supondo sempre que a instância em questão já 
consegue enxergar/acessar os diskgroups em questão, se os tamanhos envolvidos 
permitirem, uma outra opção seria se fazer a transferência dos datafiles (afora 
os da tablespace SYSTEM) online - simplesmente pede-se um ALTER TABLESPACE nnn 
OFFLINE, copia via RMAN o datafile para o ASM via  copy datafile 
'/pathcompleto/nomedodatafile.dbf' to '+DGEMQUESTÃO, e depois voltar a 
tablespace online e remover o datafile no filesystem - iirc o copy do RMAN já 
atualiza o dicionário e o controlfile, não é necessário se fazer manualmente um 
ALTER DATABASE RENAME DATAFILE ... Isso para cada tablespace  Depois o que 
se faria é uma SALVAGEM dos dados que estão nessa tablespace manca, criando-se 
uma nova tablespace no ASM e fazendo-se exp/imp ou INSERT /*+ APPEND */ dos 
dados para a nova tablespace mas com um WHERE que evite acesso aos dados que 
estavam no datafile perdido, e finalmente o DROP dessa tablespace corrupta. 
   O procedimento acima em tese teria a vantagem de ter menos tempo de 
indisponibilidade total (só para mover para o ASM os datafiles da tablespace 
SYSTEM é que vc vai ficar indisponível) , mas é Claro que certamente vc pode 
fazer com um backup as copy já apontando para o ASM, sim 
  Eu olhei bem por cima os comandos, rapidamente, mas a sintaxe e a ordem 
parecem estar corretas, sim 
 

  []s
  
Chiappa

 ===> OBS : Só lembro que, NECESSARIAMENTE, quando vc removeu o datafile X 
corrompido do controlfile, ele AINDA vai estar referenciado no DICIONÁRIO - 
veja que não é só no controlfile que há referências aos datafiles, lembre-se 
que na DBA_SEGMENTS certamente ainda vão haver segmentos apontando para o 
FILE_ID tal do datafile inexistente, na DBA_EXTENTS idem, ** Vão haver ROWIDs 
** que apontam para um extent e um bloco que estavam nesse datafile sumido 
OU SEJA, não basta só "remover" o datafile sumido do controlfile, vc TEM que 
remover os dados/segmentos/extents que estavam nesse arquivo perdido, yep ??


[oracle_br] Restore sem um datafile

2013-12-19 Por tôpico neto.longhi
Pessoal, tenho a seguinte situação:

Oracle 11.2.0.3 single instance + ASM (grid-infra)
RedRat 6.4

Tenho 3 bases nesse servidor, 2 estão no ASM e 1 em filesystem.

Nessa que esta em filesystem, tenho um datafile todo corrompido, o mesmo ja 
esta até em outra incarnação e claro offline. A tablespace desse datafile tem 
outros varios datafiles. Quando a usuário tenta acessar os dados que estão 
nesse datafile, explode o erro. (Show de horror, já peguei esse ambiente assim).

Minha tarefa é: migrar essa instancia para o ASM porem sem levar o datafile 
corrompido.

obs: não temos backup desse datafile, e os novos backups estão com skip offline.

Estou pensando nesses passos:

1) alter database create crontrolfile to trace;
2) apagar do controlfile o datafile.
3)baixar o banco;
4)startup nomount;
5)recriar o controlfile;
6)alter database open;


Agora migrar:
1)alter system set control_files='' scope=spfile;
2)alter system set db_create_file_dest='' scope=spfile;
3)shut immeidate
4)startup nomoun
5)rman target /
6)restore controlfile from '';
7)alter database mount;
8) backup as copy database format '';
9)switch database to copy;
10)alter database open;

Mover a TEMP e redos
1)alter tablespace temp add tempfile size 500M
2)alter database tempfile '/temp01.dbf' drop including datafiles 
Com isso ficará apenas o datafile criado no ASM para a TEMP
3)criar novos grupos de redos
alter database add logfile group 4 ('','2') size xxM;
alter database add logfile group 5 ('','2') size xxM;
alter system switch logfile;
dropar os antigos.

Pronto!!

O que vcs acham desse processo, ta certo?


Re: [oracle_br] Criação automática de índices

2013-12-19 Por tôpico Andre Santos
Roberto

Sem problema, imagina!
Só fiquei curioso caso existisse uma forma de fazer isso...

Obrigado!

[ ]

André


Em 19 de dezembro de 2013 14:35, Roberto Warstat escreveu:

>
>
> André,
>
> Me desculpe, mas cometi um erro ao responder a tua pergunta.
> Quando estava fazendo os testes dessa criação de índices, achei que havia
> criado uma FK com a claúsula USING INDEX, mas na realidade foi uma UK. Por
> isso a minha resposta errônea.
>
> Abraço,
> Roberto
>
>
> Em 19 de dezembro de 2013 09:55, Andre Santos 
> escreveu:
>
>
>>
>> Roberto
>>
>> Por favor, pode passar um exemplo de USING INDEX (...) com FK?
>>
>> [ ]
>>
>> André
>>
>>
>>
>>  Em 18 de dezembro de 2013 19:56, Roberto Warstat 
>> escreveu:
>>
>>
>>>
>>> André,
>>>
>>> A sintaxe "USING INDEX (..)" pode ser utilizada para FK também.
>>>
>>> Abraços,
>>> Roberto Warstat
>>>
>>> Em 18/12/2013 13:59, Andre Santos escreveu:
>>>
>>>
>>> Pessoal
>>>
>>>  Só um comentário... a sintaxe "USING INDEX (...)", só é válida para
>>> UNIQUE ou PRIMARY KEY, correto?
>>>  Nunca vi esse uso com FK (ou qualquer outro tipo de constraint).
>>>
>>>  Roberto, para Foreign Keys, se for desejado, o índice deve ser criado
>>> separadamente (comando CREATE INDEX).
>>>
>>> Eu geralmente crio, mas antes avalio se já existe algum índice que
>>> atenda: ou seja, cujas primeiras colunas da chave do índice coincidam com a
>>> FK.
>>>  Se já existir, não é necessário criar um outro só para a FK.
>>>
>>>  [ ]'s
>>>
>>>  André Santos
>>>
>>>
>>>
>>> Em 18 de dezembro de 2013 14:36,  escreveu:
>>>


 Bom… para não haver confusão.

  Segue um resumo.


  Roberto,

  O Oracle NÃO CRIA um índice em FK (Foreign Key) quando se cria o seu
 modelo físico no banco de dados, OK! O índice é criado AUTOMATICAMENTE
 somente quando se trata de uma PK (Primary Key) ou UK (Unique), conforme o
 Fabio Prado comentou. Esse é o padrão do Oracle 6 até 12c e ponto!

  Porém, a observação do Ederson também está 100% correta nos dois
 pontos que ele citou.

  Primeiro, geralmente se cria ÍNDICES em FK para evitar LOCKS, retirar
 CONTENÇÃO e fornecer acesso rápido aos dados quando se tem algum predicado
 na sua instrução SQL, WHERE coluna = ‘alguma coisa’;, isso é padrão SQL92,
 SQL2003, ANSI-SQL.. então.. tb disponível desde Oracle 8i… MAS, você deve
 mencionar EXPLICITAMENTE a utilização do índice em sua FK.

  Segundo, a criação desse índice é feito a parte em outras instruções
 SQL, não sendo implícita do banco de dados!

  Assim se resume melhor todas as explicações, que foram 100% corretas.

  E tente matar esse mito na sua empresa, pq quem falou isso, não sabe
 que está agilizando uma instrução SQL e praticamente matando o banco de
 dados.

  Abraços,
 Rodrigo Almeida


  Em 18/12/2013, à(s) 11:22, ederson200...@yahoo.com.br escreveu:

Correção:

 No texto onde se lê:

 --> Criar o indice em bairro.cli_cod_bairro, pode agilizar as pesquisas
 em cima de um "where cli_cod_bairro =", mas não é obrigatório.


  O correto é:

 --> Criar o indice em CLIENTE.cli_cod_bairro, pode agilizar as
 pesquisas em cima de um "where cli_cod_bairro =", mas não é
 obrigatório.

 Meu multitask está falhando hj.



>>>
>>>
>>
>  
>


Re: [oracle_br] Criação automática de índices

2013-12-19 Por tôpico Roberto Warstat
André,

Me desculpe, mas cometi um erro ao responder a tua pergunta.
Quando estava fazendo os testes dessa criação de índices, achei que havia
criado uma FK com a claúsula USING INDEX, mas na realidade foi uma UK. Por
isso a minha resposta errônea.

Abraço,
Roberto


Em 19 de dezembro de 2013 09:55, Andre Santos
escreveu:

>
>
> Roberto
>
> Por favor, pode passar um exemplo de USING INDEX (...) com FK?
>
> [ ]
>
> André
>
>
>
> Em 18 de dezembro de 2013 19:56, Roberto Warstat 
> escreveu:
>
>
>>
>> André,
>>
>> A sintaxe "USING INDEX (..)" pode ser utilizada para FK também.
>>
>> Abraços,
>> Roberto Warstat
>>
>> Em 18/12/2013 13:59, Andre Santos escreveu:
>>
>>
>> Pessoal
>>
>>  Só um comentário... a sintaxe "USING INDEX (...)", só é válida para
>> UNIQUE ou PRIMARY KEY, correto?
>>  Nunca vi esse uso com FK (ou qualquer outro tipo de constraint).
>>
>>  Roberto, para Foreign Keys, se for desejado, o índice deve ser criado
>> separadamente (comando CREATE INDEX).
>>
>> Eu geralmente crio, mas antes avalio se já existe algum índice que
>> atenda: ou seja, cujas primeiras colunas da chave do índice coincidam com a
>> FK.
>>  Se já existir, não é necessário criar um outro só para a FK.
>>
>>  [ ]'s
>>
>>  André Santos
>>
>>
>>
>> Em 18 de dezembro de 2013 14:36,  escreveu:
>>
>>>
>>>
>>> Bom… para não haver confusão.
>>>
>>>  Segue um resumo.
>>>
>>>
>>>  Roberto,
>>>
>>>  O Oracle NÃO CRIA um índice em FK (Foreign Key) quando se cria o seu
>>> modelo físico no banco de dados, OK! O índice é criado AUTOMATICAMENTE
>>> somente quando se trata de uma PK (Primary Key) ou UK (Unique), conforme o
>>> Fabio Prado comentou. Esse é o padrão do Oracle 6 até 12c e ponto!
>>>
>>>  Porém, a observação do Ederson também está 100% correta nos dois
>>> pontos que ele citou.
>>>
>>>  Primeiro, geralmente se cria ÍNDICES em FK para evitar LOCKS, retirar
>>> CONTENÇÃO e fornecer acesso rápido aos dados quando se tem algum predicado
>>> na sua instrução SQL, WHERE coluna = ‘alguma coisa’;, isso é padrão SQL92,
>>> SQL2003, ANSI-SQL.. então.. tb disponível desde Oracle 8i… MAS, você deve
>>> mencionar EXPLICITAMENTE a utilização do índice em sua FK.
>>>
>>>  Segundo, a criação desse índice é feito a parte em outras instruções
>>> SQL, não sendo implícita do banco de dados!
>>>
>>>  Assim se resume melhor todas as explicações, que foram 100% corretas.
>>>
>>>  E tente matar esse mito na sua empresa, pq quem falou isso, não sabe
>>> que está agilizando uma instrução SQL e praticamente matando o banco de
>>> dados.
>>>
>>>  Abraços,
>>> Rodrigo Almeida
>>>
>>>
>>>  Em 18/12/2013, à(s) 11:22, ederson200...@yahoo.com.br escreveu:
>>>
>>>Correção:
>>>
>>> No texto onde se lê:
>>>
>>> --> Criar o indice em bairro.cli_cod_bairro, pode agilizar as pesquisas
>>> em cima de um "where cli_cod_bairro =", mas não é obrigatório.
>>>
>>>
>>>  O correto é:
>>>
>>> --> Criar o indice em CLIENTE.cli_cod_bairro, pode agilizar as pesquisas
>>> em cima de um "where cli_cod_bairro =", mas não é obrigatório.
>>>
>>> Meu multitask está falhando hj.
>>>
>>>
>>>
>>
>>
>  
>


Re: [oracle_br] RE: Interromper o fluxo na Procedure

2013-12-19 Por tôpico Jales Jose Moraes
Obrigado...




Em Quinta-feira, 19 de Dezembro de 2013 11:58, "jlchia...@yahoo.com.br" 
 escreveu:
 
  
tente um RETURN :

BEGIN
    comandos ...
   -- vou fazer o DDL
   Begin
       execute immediate comando ddl
   Exception
      when others then 
         ... logo o erro de alguma forma 
         return;
   End;
   ...
   continua o processamento ...
   return;
END;   -- fim da rotina

 []s

  Chiappa


[oracle_br] RE: Interromper o fluxo na Procedure

2013-12-19 Por tôpico jlchiappa
tente um RETURN :
 

 BEGIN
 comandos ...
-- vou fazer o DDL
Begin
execute immediate comando ddl
Exception
   when others then 
  ... logo o erro de alguma forma 
  return;
End;
...
continua o processamento ...
return;
 END;   -- fim da rotina
 

  []s
 

   Chiappa


Re: [oracle_br] Interromper o fluxo na Procedure

2013-12-19 Por tôpico Fabricio Pedroso Jorge
Creio que você deva usar o RAISE_APPLICATION_ERROR

http://www.java2s.com/Tutorial/Oracle/0480__PL-SQL-Programming/AcompleteexampleusingRAISEAPPLICATIONERROR.htm


Em 19 de dezembro de 2013 11:53, Jales Jose Moraes
escreveu:

>
>
> Bom tarde!
>
>
> Pessoal vou incluir no meu PL um execute immediate para truncar uma tabela.
> Como faço no bloco do Exception para que caso o truncate falhar, eu possa
> interroper a PL?
>
>  
>



-- 
*Fabrício Pedroso Jorge.*

Administrador de Banco de Dados
Oracle 11g Certified SQL Expert
Oracle 11g Certified Associate
Oracle 11g Certified Professional
Linux Professional Institute Certified Level I (LPIC-I)
ITIL V3 Foudations
certificacaodb.com.br

*Resumo Profissional:*
http://br.linkedin.com/in/fabriciojorge

*Contatos:*
+ 55 91 88991116
skype: fabricio.pedroso.jorge
fpjb...@gmail.com


[oracle_br] Interromper o fluxo na Procedure

2013-12-19 Por tôpico Jales Jose Moraes
Bom tarde!


Pessoal vou incluir no meu PL um execute immediate para truncar uma tabela.
Como faço no bloco do Exception para que caso o truncate falhar, eu possa 
interroper a PL?


Re: [oracle_br] Criação automática de índices

2013-12-19 Por tôpico Andre Santos
Roberto

Por favor, pode passar um exemplo de USING INDEX (...) com FK?

[ ]

André



Em 18 de dezembro de 2013 19:56, Roberto Warstat escreveu:

>
>
> André,
>
> A sintaxe "USING INDEX (..)" pode ser utilizada para FK também.
>
> Abraços,
> Roberto Warstat
>
> Em 18/12/2013 13:59, Andre Santos escreveu:
>
>
> Pessoal
>
>  Só um comentário... a sintaxe "USING INDEX (...)", só é válida para
> UNIQUE ou PRIMARY KEY, correto?
>  Nunca vi esse uso com FK (ou qualquer outro tipo de constraint).
>
>  Roberto, para Foreign Keys, se for desejado, o índice deve ser criado
> separadamente (comando CREATE INDEX).
>
> Eu geralmente crio, mas antes avalio se já existe algum índice que atenda:
> ou seja, cujas primeiras colunas da chave do índice coincidam com a FK.
>  Se já existir, não é necessário criar um outro só para a FK.
>
>  [ ]'s
>
>  André Santos
>
>
>
> Em 18 de dezembro de 2013 14:36,  escreveu:
>
>>
>>
>> Bom… para não haver confusão.
>>
>>  Segue um resumo.
>>
>>
>>  Roberto,
>>
>>  O Oracle NÃO CRIA um índice em FK (Foreign Key) quando se cria o seu
>> modelo físico no banco de dados, OK! O índice é criado AUTOMATICAMENTE
>> somente quando se trata de uma PK (Primary Key) ou UK (Unique), conforme o
>> Fabio Prado comentou. Esse é o padrão do Oracle 6 até 12c e ponto!
>>
>>  Porém, a observação do Ederson também está 100% correta nos dois pontos
>> que ele citou.
>>
>>  Primeiro, geralmente se cria ÍNDICES em FK para evitar LOCKS, retirar
>> CONTENÇÃO e fornecer acesso rápido aos dados quando se tem algum predicado
>> na sua instrução SQL, WHERE coluna = ‘alguma coisa’;, isso é padrão SQL92,
>> SQL2003, ANSI-SQL.. então.. tb disponível desde Oracle 8i… MAS, você deve
>> mencionar EXPLICITAMENTE a utilização do índice em sua FK.
>>
>>  Segundo, a criação desse índice é feito a parte em outras instruções
>> SQL, não sendo implícita do banco de dados!
>>
>>  Assim se resume melhor todas as explicações, que foram 100% corretas.
>>
>>  E tente matar esse mito na sua empresa, pq quem falou isso, não sabe
>> que está agilizando uma instrução SQL e praticamente matando o banco de
>> dados.
>>
>>  Abraços,
>> Rodrigo Almeida
>>
>>
>>  Em 18/12/2013, à(s) 11:22, ederson200...@yahoo.com.br escreveu:
>>
>>Correção:
>>
>> No texto onde se lê:
>>
>> --> Criar o indice em bairro.cli_cod_bairro, pode agilizar as pesquisas
>> em cima de um "where cli_cod_bairro =", mas não é obrigatório.
>>
>>
>>  O correto é:
>>
>> --> Criar o indice em CLIENTE.cli_cod_bairro, pode agilizar as pesquisas
>> em cima de um "where cli_cod_bairro =", mas não é obrigatório.
>>
>> Meu multitask está falhando hj.
>>
>>
>>
>
>  
>