AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 30084
Accepted
Kent Pawar
Kent Pawar
Asked: 2012-12-10 23:03:18 +0800 CST2012-12-10 23:03:18 +0800 CST 2012-12-10 23:03:18 +0800 CST

Depois de truncar uma única partição, o índice de sua chave primária torna-se inutilizável e todas as inserções/atualizações nessa partição falham

  • 772

Eu tenho uma tabela particionada: SAMPLE_PARTITIONED_TBLcom 60 partições (sem subparições) com base no PERIOD_IDcampo numérico (Conjunto de dados: 201001...201212.. e assim por diante). Esta tabela tem vários índices locais, mas o problema está no índice PK por algum motivo. Eu tenho o mesmo DDL em outro esquema e funciona bem lá. Não tenho certeza do que o tio procura para resolver isso.

Estou usando a Informatica (ferramenta ETL) para carregar dados nesta tabela. Antes de carregar, truncamos a tabela de partições:

SQL> ALTER TABLE owner_name.SAMPLE_PARTITIONED_TBL 
   2 TRUNCATE PARTITION SMPL_201001 DROP STORAGE;

Quando o carregamento começa, recebo o seguinte erro:

Message: Database errors occurred: 
ORA-01502: index 'owner_name.SAMPLE_PARTITIONED_TBL_PK' or 
partition of such index is in unusable state

Olhando para o status dos índices...

SQL> select STATUS from all_indexes
  2  where INDEX_NAME like 'SAMPLE_PARTITIONED_TBL_PK';

STATUS
--------
UNUSABLE

Agora, depois de executar SQL> ALTER INDEX owner_name.SAMPLE_PARTITIONED_TBL_PK REBUILD;o índice particionado local, retorna ao STATUS=VALIDestado que o carregamento pode continuar sem problemas.


ATUALIZAR:

De acordo com a observação de @Mat abaixo, estou verificando se o índice PK é particionado localmente:

SQL> select * from all_indexes where table_name = 'SAMPLE_PARTITIONED_TBL';

Eu vejo SAMPLE_PARTITIONED_TBL_PKe os outros índices na lista.

SQL> select * from  all_part_indexes where table_name = 'SAMPLE_PARTITIONED_TBL';

Aqui vejo todos os índices com LOCALITY='LOCAL'; except SAMPLE_PARTITIONED_TBL_PKestá faltando no conjunto de resultados, confirmando assim a observação de Mat. :)

Obrigado.

index partitioning
  • 1 1 respostas
  • 18228 Views

1 respostas

  • Voted
  1. Best Answer
    Mat
    2012-12-10T23:27:45+08:002012-12-10T23:27:45+08:00

    Isso é esperado, a maioria das operações DDL em partições invalidará os índices afetados pelo DDL. Os documentos ALTER TABLE afirmam isso em todas as operações relevantes.

    Especificamente para truncate partition:

    Para cada partição ou subpartição truncada, o Oracle Database também trunca as partições e subpartições de índice local correspondentes. Se essas partições ou subpartições de índice estiverem marcadas como UNUSABLE, o banco de dados as truncará e redefinirá o marcador UNUSABLE para VALID.

    Portanto, os índices locais são truncados e marcados valid. Os índices globais são invalidados, a menos que você solicite especificamente que sejam mantidos. (Veja mais abaixo.)
    No seu caso, parece que sua chave primária não é baseada em um índice local - parece de fato não ser particionada, já que você não pode fazer um alter index ... rebuildem um índice particionado, você precisa reconstruir cada partição. Portanto, a invalidação é esperada.

    Para fazer isso, você pode adicionar uma cláusula UPDATE INDEXES/ à sua instrução para que o Oracle mantenha automaticamente os índices para você durante o - Consulte Atualizando Índices Automaticamente . Porém, existem algumas limitações, leia a seção Considerações ao atualizar índices automaticamente com atenção.UPDATE GLOBAL INDEXESALTER TABLEALTER

    Mas isso nem sempre é desejável. Às vezes é mais eficiente reconstruir os índices após o carregamento. Nesse caso, seu processo de carregamento geralmente pode usar o SKIP_UNUSABLE_INDEXESparâmetro (pode ser definido no nível da sessão). (Este parâmetro é padronizado TRUEem 11gR2.)

    • 6

relate perguntas

  • Como criar várias entradas no índice com base nos campos de uma linha?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quanto "Padding" coloco em meus índices?

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve