Boa tarde a todos,

Me deparei com uma situação e gostaria de compartilha-la com vocês.

Atualmente apenas administro a base, o modelo e a aplicação são de
responsabilidade de outra empresa/fornecedor, com a qual nunca tive contato.
O cliente me pediu para estimar o tempo de criação de um index em uma
tabela do sistema, cujo script foi enviado pelo fornecedor.

Ao tentar criar na base de teste, de acordo com a v$ longops iria levar
cerca de 3 anos para terminar, me assustei e comecei a investigar o motivo
de um tempo tão elevado.
No Script é criada uma nova coluna varchar2(4) na tabela, o index e uma
constraint(FK).

Ao verificar a tabela que contem aproximadamente 2,2 milhões de linhas e
ocupa 220GB, encontrei um campo do tipo LONG RAW (nunca havia trabalhado
com tabelas com esse datatype).

Tentei criar o index com NOLOGGING, PARALLEL, tentei até um sugestão de
colocar a tabela em NOCACHE, mesmo assim o tempo continua alto.

Favor me corrijam se eu estiver errado, mas pelo o que entendi é feita a
leitura de toda a tabela .
Minha duvida, é se existe alguma maneira de ignorar o campo LONG RAW, na
criação do index e evitar a leitura de toda a tabela?

Caso alguém já tenha se deparado com uma situação parecida, tem algum "pulo
do gato"? rsrs

Obrigado.

Abaixo algumas informações do ambiente, caso seja necessário outras favor
solicitar:

*Informações:*
Red Hat Enterprise Linux Server release 5.5 (Tikanga) - 2.6.18-194.el5 #1
SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production (standard) - RAC
com dois nós
* SGA = 6GB, no RAC existem outras bases de teste, mas com baixa utilização

*Resultado dbms_space.create_index_cost:*

Used MB: 8.61
Alloc MB: 53

*Alguns dados Tabela:*

Não particionada.

desc tabela
 Name                 Null?    Type
 -------------------- -------- ------------------------------------
 COLUNA                            NOT NULL VARCHAR2(9)
 COLUNA                            NOT NULL VARCHAR2(6)
 COLUNA                            NOT NULL VARCHAR2(4)
 COLUNA                            NOT NULL DATE
 COLUNA                            VARCHAR2(1)
 COLUNA                            CHAR(1)
 COLUNA                            NUMBER(10)
 COLUNA                            VARCHAR2(7)
 COLUNA                            CHAR(1)
 COLUNA                            NUMBER(10)
 COLUNA                            NUMBER(10)
 COLUNA                            DATE
 COLUNA_NOVA_FK                    VARCHAR2(4)
 COLUNA_LONG_RAW                 LONG RAW

SIZE_MB: 228.49

Last Analyzed                          Feb 7, 2015 2:08:53 AM
Empty Blocks                           22
Average Space (Bytes)              1187
Number of Rows                        2257752
Sample Size                             5879
Average Row Length (Bytes)       44
Continued Row Count                 0
Average Space Freelist Blocks    0
Number of Freelist Blocks           0

*Testes:*
Original:
'CREATE INDEX idx_001 ON DOCUMENTO_EMITIDO ( fk_cod_abc )'

Com melhor estimativa:
'CREATE INDEX idx_001 ON DOCUMENTO_EMITIDO ( fk_cod_abc ) nologging
parallel 6'


*gv$session_longops:*

   INST_ID   SID  SERIAL# USERNAME
MODULE                                           ELAPSED    REMAINING
PROGRESS_PCT
---------- ----- -------- ------------------------------
------------------------------------------------ ---------- ----------
------------
         2  1625    31195 SYS                            sqlplus@unirjdb04
(TNS V1-V3)                    10:23      1745298:56          .00

   INST_ID   SID  SERIAL# USERNAME
MODULE                                           ELAPSED    REMAINING
PROGRESS_PCT
---------- ----- -------- ------------------------------
------------------------------------------------ ---------- ----------
------------
         2  1625    31195 SYS                            sqlplus@unirjdb04
(TNS V1-V3)                    27:24      1928905:57          .00

Responder a