{"id":69,"date":"2015-05-10T08:03:00","date_gmt":"2015-05-10T11:03:00","guid":{"rendered":"http:\/\/maxoracle.com\/2015\/05\/10\/69\/"},"modified":"2015-05-10T08:03:00","modified_gmt":"2015-05-10T11:03:00","slug":"69","status":"publish","type":"post","link":"https:\/\/www.soudba.com.br\/?p=69","title":{"rendered":""},"content":{"rendered":"<p><\/p>\n<h2><span>Particionamento de tabelas Oracle<\/span><\/h2>\n<div><span><br \/><\/span><\/div>\n<div><span>       <\/span><\/p>\n<div><span><span>O particionamento de tabelas e de indices auxilia no tratamento e na sele\u00e7\u00e3o destes dados. Os dados s\u00e3o armazenados em segmentos, e estes segmentos que est\u00e3o armazenados nessas particoes podem sofrer manuten\u00e7oes diretamente.<\/span><\/span><\/div>\n<p><span><\/span><\/p>\n<div><span><span><\/span><br \/><\/span><\/div>\n<p><span><\/span><\/p>\n<div><span><span>Para isso temos as seguintes tipos de parti\u00e7\u00f5es:<\/span><\/span><\/div>\n<p><span><\/span><\/p>\n<div><span><span><\/span><br \/><\/span><\/div>\n<p><span><\/p>\n<div><span>Range &#8211; E a mais comum e pelo nome ja diz baseada em cima de um range da chave.<\/span><\/div>\n<div><span>Hash &#8211; A partir de um algoritmo os dados s\u00e3o armazenados nas parti\u00e7\u00f5es a partir de uma chave de particionamento.<\/span><\/div>\n<div><span>List &#8211; Os dados sao mapeados as particoes a partir de listas.<\/span><\/div>\n<div><span>Interval &#8211; Os dados sao mapeados as particoes a partir de intervalos que s\u00e3o automaticamente criados de acordo com o intervalo.<\/span><\/div>\n<div><span>System &#8211; Os dados sao mapeados as particoes de forma arbitraria &#8211; via o programa que os esta tratando.<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Podemos ainda ter uma subparticao, para que possamos ter uma op\u00e7\u00e3o de aproveitar ainda mais aquela parti\u00e7\u00e3o<\/span><\/div>\n<div><span>&nbsp;ja existente.<\/span><\/div>\n<div><span><\/span><\/div>\n<ul>\n<li><span>Range top level: \u2013 Range-Range <br \/>\u2013 Range-Hash <br \/>\u2013 Range-List&nbsp;<\/span><\/li>\n<li><span>List top level: <br \/>\u2013 List-Range \u2013 List-Hash \u2013 List-List&nbsp;<\/span><\/li>\n<li><span>Interval top level: \u2013 Interval-Range <br \/>\u2013 Interval-Hash \u2013 Interval-List<\/span><\/li>\n<\/ul>\n<div><span>&nbsp;A chave do particionamento e que comanda, como os dados v\u00e3o ser inseridos, e cada parti\u00e7\u00e3o pode ter no m\u00e1ximo 16 colunas como chave. Podemos tamb\u00e9m fazer os comandos DML e select diretamente a essas chaves. Nenhum dos comandos existentes seja DML ou SELECT precisa ser alterado para que se utilize particionamento.<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Existe um tipo de particionamento que esta baseado no relacionamento das tabelas. Ou seja, pela constraint de chave estrangeira. Ainda, temos tamb\u00e9m o particionamento que pode ser baseado em uma coluna virtual ou seja calculada.<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Quais sao os beneficios de se utilizar o particionamento ?<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>O particionamento automaticamente faz com que o otimizador do oracle exclua as parti\u00e7\u00f5es que n\u00e3o s\u00e3o interessantes para resolver os comandos.&nbsp;<\/span><\/div>\n<div><span>As particoes podem sofrer manuten\u00e7\u00e3o diretamente sem ter outras parti\u00e7\u00f5es comprometidas para os comandos de DML e SELECT.<\/span><\/div>\n<div><span>As parti\u00e7\u00f5es v\u00e3o contribuir diretamente com os recursos de gerenciamento de ciclo de vida da sua informa\u00e7\u00e3o.<\/span><\/div>\n<div><span>Voce pode atribuir uma particao a uma tablespace, dai podendo armazenar seus datafiles em locais distintos.<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Varios comandos poderemos executar para realizar a manuten\u00e7\u00e3o nas parti\u00e7\u00f5es:<\/span><\/div>\n<div><span><\/span><\/div>\n<ul>\n<li><span>ALTER TABLE ADD PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE DROP PARTITION (RANGE)&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE TRUNCATE PARTITION (RANGE)&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE MOVE PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE SPLIT PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE EXCHANGE PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE RENAME PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE MODIFY PARTITION&nbsp;<\/span><\/li>\n<li><span>ALTER TABLE COALESCE PARTITION<\/span><\/li>\n<\/ul>\n<div><span>A cria\u00e7\u00e3o de uma tabela particionada pode ser feita usando o comando abaixo:<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>create table exemplo<\/span><\/div>\n<div><span>(idx number, descricao varchar2(2))<\/span><\/div>\n<div><span>partition by range (idx)<\/span><\/div>\n<div><span>(partition values less than (0) &nbsp;tablespace users,<\/span><\/div>\n<div><span>partition values less than (maxvalue) tablespace users1);<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Opera\u00e7\u00f5es diretamente nas parti\u00e7\u00f5es:<\/span><\/div>\n<div><span>select idx from complex PARTITION (particao1);<\/span><\/div>\n<div><span>insert into complex PARTITION (particao2) values (4,5);<\/span><\/div>\n<div><span>delete from complex PARTITION (particao3);<\/span><\/div>\n<div><span>create table teste as select * from tabela partition(particao1);<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>expdp sh\/sh tables(SALES:SALES_Q1_20001)<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Dicionario de dados para consultar as parti\u00e7\u00f5es<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>DBA_TAB_PARTITIONS<\/span><\/div>\n<div><span>DBA_SUBPATITION_TEMPLATES<\/span><\/div>\n<div><span>DBA_SEGMENTS<\/span><\/p>\n<p><\/p>\n<div title=\"Page 98\">\n<table style=\"background-color:rgb(100.000000%,100.000000%,100.000000%);border-collapse:collapse;\">\n<colgroup>\n<col style=\"width:43.164091%;\"><\/col>\n<col style=\"width:47.373068%;\"><\/col>\n<col style=\"width:9.46284%;\"><\/col>\n<\/colgroup>\n<tbody>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 3.24pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Name <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 3.24pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Purpose <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 3.24pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">N <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td colspan=\"1\" rowspan=\"2\" style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:3.24pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Courier';font-size:11pt;\">DBA_TABLES <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-left-color:rgb(0.000000%,0.000000%,0.000000%);border-right-color:rgb(0.000000%,0.000000%,0.000000%);border-style:solid;border-top-color:rgb(0.000000%,0.000000%,0.000000%);border-width:3.24pt 1.62pt 0;\"><\/td>\n<td style=\"border-left-color:rgb(0.000000%,0.000000%,0.000000%);border-right-color:rgb(0.000000%,0.000000%,0.000000%);border-style:solid;border-top-color:rgb(0.000000%,0.000000%,0.000000%);border-width:3.24pt 1.62pt 0;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">T <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-bottom-color:rgb(0.000000%,0.000000%,0.000000%);border-left-color:rgb(0.000000%,0.000000%,0.000000%);border-right-color:rgb(0.000000%,0.000000%,0.000000%);border-style:solid;border-width:0 1.62pt 1.62pt;\"><\/td>\n<td style=\"border-bottom-color:rgb(0.000000%,0.000000%,0.000000%);border-left-color:rgb(0.000000%,0.000000%,0.000000%);border-right-color:rgb(0.000000%,0.000000%,0.000000%);border-style:solid;border-width:0 1.62pt 1.62pt;\"><\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.56pt;\">\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:11pt;\">DBA_PART_TABLES<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Partition type: default values <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">T <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.56pt 1.62pt 1.62pt;\">\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:11pt;\">DBA_TAB_*PARTIT\nIONS<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Partitions detail <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">P <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:11pt;\">DBA_*PART_KEY_COLUMNS<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.510204%,0.510204%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Partition keys <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">P <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/div>\n<div title=\"Page 98\">T = Tabela<\/div>\n<div title=\"Page 98\">P = Particao<\/div>\n<div title=\"Page 98\"><\/div>\n<div title=\"Page 98\">\n<div title=\"Page 98\">\n<div style=\"background-color:rgb(100.000000%,100.000000%,100.000000%);\">\n<div>\n<div><span style=\"font-family:'Courier';font-size:12pt;\">SQL&gt; SELECT TABLE_NAME, TABLESPACE_NAME, <\/span><\/p>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">  2         PARTITIONED, ROW_MOVEMENT<br \/>  3    FROM USER_TABLES ;<br \/><\/span><\/pre>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">TABLE_NAME TABLESPACE_NAME PARTITIONED ROW_MOVE<br \/>---------- --------------- ----------- --------<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">HR_EMP                     YES<br \/>MULTICOL                   YES<br \/>ORDINARY   USERS           NO<br \/>SIMPLE                     YES<br \/><\/span><\/pre>\n<\/div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">ENABLED<br \/>ENABLED<br \/><\/span><\/pre>\n<p><span style=\"font-family:'Courier';font-size:12pt;\">DISABLED<\/span><br \/><span style=\"font-family:'Courier';font-size:12pt;\"><br \/><\/span><span style=\"font-family:'Courier';font-size:12pt;\"><br \/><\/span>          <\/p>\n<div title=\"Page 99\">\n<div>\n<div>\n<div><span style=\"font-family:'Courier';font-size:12pt;\">SQL&gt; SELECT TABLE_NAME, PARTITIONING_TYPE,<br \/>2 SUBPARTITIONING_TYPE, PARTITION_COUNT,<br \/>3 PARTITIONING_KEY_COUNT,DEF_TABLESPACE_NAME 4 FROM USER_PART_TABLES ; <\/span><\/p>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">TABLE_NAME TYPE   SUBTYPE PAR.CNT PAR.KEY_CNT DEF_TAB.SP<br \/>---------- ------ ------- ------- ----------- ----------<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">COMPOS     RANGE  HASH          3<br \/>MULTICOL   RANGE  NONE          4<br \/>SIMPLE     LIST   NONE          2<br \/><\/span><\/pre>\n<\/div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:12pt;\">1 USERS<br \/>2 USERS&nbsp;<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><span style=\"font-family:Courier;font-size:12pt;\">1 USERS<\/span><br \/><span style=\"font-family:'Courier';font-size:12pt;\"><br \/><\/span><br \/><span style=\"font-family:'Courier';font-size:12pt;\"><br \/><\/span>          <\/p>\n<div title=\"Page 101\">\n<table style=\"background-color:rgb(100.000000%,100.000000%,100.000000%);border-collapse:collapse;\">\n<colgroup>\n<col style=\"width:29.215424%;\"><\/col>\n<col style=\"width:70.784576%;\"><\/col>\n<\/colgroup>\n<tbody>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(28.699552%,38.565022%,48.430493%);border-width:1.62pt 1.62pt 7.2pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Name <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(28.699552%,38.565022%,48.430493%);border-width:1.62pt 1.56pt 7.2pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Columns to show <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(28.699552%,38.565022%,48.430493%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%);border-width:7.2pt 1.62pt 1.62pt;\">\n<div>\n<div>\n<pre><span style=\"font-family:'Courier';font-size:11pt;\">DBA_SEGMENTS<br \/><\/span><\/pre>\n<\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(28.699552%,38.565022%,48.430493%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%);border-width:7.2pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">PARTITION_NAME, SEGMENT_TYPE <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Courier';font-size:11pt;\">DBA_EXTENTS <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">PARTITION_NAME, SEGMENT_TYPE <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Courier';font-size:11pt;\">DBA_OBJECTS <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">SUBOBJECT_NAME, OBJECT_TYPE <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/div>\n<div title=\"Page 101\"><\/div>\n<div title=\"Page 101\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div><span>Global index<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>create index idx on employees ( first_name )<\/span><\/div>\n<div><span>global partition by range (first_name)<\/span><\/div>\n<div><span>( partition x1 values less than (\u2018H\u2019) tablespace users,&nbsp;<\/span><\/div>\n<div><span>&nbsp; partition x2 values less than (maxvalue) );<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Local index tabela particionada mesmas tablespaces da tabela<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>create index idx on employees ( first_name ) local;<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Local index tabela particionada mas em outras tablespaces<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>create index idx on employees ( first_name )&nbsp;<\/span><\/div>\n<div><span>&nbsp;local<\/span><\/div>\n<div><span>(&nbsp;<\/span><\/div>\n<div><span>&nbsp;partition partition1 tablespace idx1,<\/span><\/div>\n<div><span>&nbsp;partition partition2 tablespace idx2<\/span><\/div>\n<div><span>&nbsp;);<\/span><\/div>\n<div><span><\/span><\/div>\n<div><span><\/span><\/div>\n<div><span><\/span><\/div>\n<div><span><\/span><\/div>\n<div><span>Algumas curiosidades quando usando tabelas particionadas:<\/span><\/div>\n<ul>\n<li><span>O particionamento e pago a parte, sendo uma option do banco instalado como enterprise database<\/span><\/li>\n<li><span>Algumas senten\u00e7as SELECT podem ser automaticamente dividas para que a resolu\u00e7\u00e3o seja mais r\u00e1pida<\/span><\/li>\n<li><span>As opera\u00e7\u00f5es de delete e inserts s\u00e3o enxergadas pelo dicion\u00e1rio somente como simples opera\u00e7\u00e3o de organiza\u00e7\u00e3o.<\/span><\/li>\n<li><span>As opera\u00e7\u00f5es nos indices podem ser individualizadas (usando local indexes)<\/span><\/li>\n<li><span>Podemos ter ate 1048575 parti\u00e7\u00f5es por tabela ou \u00edndice<\/span><\/li>\n<li><span>Podemos automatizar a cria\u00e7\u00e3o das tabelas atrav\u00e9s de templates para as parti\u00e7\u00f5es<\/span><\/li>\n<li><span>As opera\u00e7\u00f5es nos indices globais afetam as opera\u00e7\u00f5es nas tabelas<\/span><\/li>\n<li><span>As opera\u00e7\u00f5es nos indices locais n\u00e3o afetam as opera\u00e7\u00f5es nas tabelas como um todo<\/span><\/li>\n<li><span>Os indices globais podem ser usados em tabelas particionadas ou nao. Os indices locais somente em tabelas particionadas.<\/span><\/li>\n<li><\nspan>Os indices locais sao automaticamente mantidos. Ou seja, as parti\u00e7\u00f5es alteradas nas tabelas s\u00e3o automaticamente alteradas nos indices.<\/span><\/li>\n<\/ul>\n<div><\/div>\n<h2>Particionamento em indices<\/h2>\n<div>Diferente do particionamento da tabela, temos o particionamento do indice. O particionamento do indice pode existir independente da tabela ser particionada ou nao. Isso ocorre uma flexibilizacao a mais e importante para a manutencao destes dados.<\/div>\n<div><\/div>\n<h3>Atributos: Global ou &nbsp;Local<\/h3>\n<div>O indice sendo global pode ter outro tipo de particionamento que o da tabela, ou mesmo se a tabela nao tiver nenhum particionamento. &nbsp;O indice global pode utilizar somente as tecnicas range e hash.<\/div>\n<div><\/div>\n<div>Os tipos de particionamento validos para o indice global . O indice sendo particionado local segue a mesma regra de particionamento da tabela, sendo que o indice local somente pode ser criado para a tabela que e particionadada.<\/div>\n<div><\/div>\n<h3>Concorrencia pelo indice<\/h3>\n<div>Geralmente temos o evento buffer busy em uma frequencia muito grande de DML. Dai em um rac por exemplo para se evitar essa incidencia do evento, se cria o indice reverso. Isso resolveria em parte a concorrencia, mas para resolver de uma forma eficiente e conservar a mesma ordem o ideal e criar o indice global usando a tecnica de hash. Como o hash fara com que o indice seja designado a varias tablespaces, criaremos entao varios pequenos locais de contencao e nao um unico ponto de contencao geral, como resultado aumentaremos a eficiencia geral.<\/div>\n<div><\/div>\n<h3>Os indices particionados tem duas categorias de conceito logico<\/h3>\n<div><\/div>\n<div>\n<div>Prefixo &#8211; A chave de parti\u00e7\u00e3o \u00e9 a coluna mais \u00e0 esquerda (s) do \u00edndice. Sondagem este tipo de \u00edndice \u00e9 menos onerosa. Se uma consulta especifica a chave de parti\u00e7\u00e3o na parti\u00e7\u00e3o onde particao de pesquisa \u00e9 poss\u00edvel, isto \u00e9, nem todas as parti\u00e7\u00f5es ser\u00e3o pesquisados.<\/div>\n<div>N\u00e3o-prefixadas &#8211; N\u00e3o suporta parti\u00e7\u00e3o de pesquisa, mas \u00e9 eficaz no acesso aos dados que abrange v\u00e1rias parti\u00e7\u00f5es. Muitas vezes usado para indexar uma coluna que n\u00e3o \u00e9 a chave de parti\u00e7\u00e3o tabelas, quando voc\u00ea gostaria que o \u00edndice a ser dividido na mesma chave que a tabela subjacente.<\/div>\n<\/div>\n<div><\/div>\n<div>Isso depende como o acesso e feito e como as chaves estao armazenadas. Dai pode ser simplesmente um conceito logico sem nenhuma distincao ate na sintaxe do comando da criacao do indice local.<\/div>\n<h3>Local Prefixed Indexes<\/h3>\n<div>\n<ul>\n<li>Somente possivel em tabelas particionadas<\/li>\n<li>Ocupa menos espaco porque se refere a tabela particionada e suas devidas particoes<\/li>\n<li>Melhor performance quando utilizada para operacoes massivas com paralelismo<\/li>\n<li>Podem ser unique ou nao unique<\/li>\n<li>Btree ou Bitmap<\/li>\n<li>A condicao e que o indice seja criado com mesmas colunas da chave de particionamento da tabela<\/li>\n<\/ul>\n<\/div>\n<div><\/div>\n<div>Exemplo:<\/div>\n<div><\/div>\n<div>Create index idxp1 on emp(first_name) local;<\/div>\n<div>\n<div><\/div>\n<div>Create index idxp1 on emp(first_name)&nbsp;<\/div>\n<div>tablespace indx04<\/div>\n<div>local<\/div>\n<div>(&nbsp;<\/div>\n<div>partition ex1 tablespace indx01,<\/div>\n<div>partition ex2 tablespace indx02,<\/div>\n<div>partition ex3 tablespace indx03<\/div>\n<div>);<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<h3>Local Nonprefixed Index<\/h3>\n<div>Indices que sao criados em tabelas particionadas<\/div>\n<div>A chave do indice nao e a mesma da chave do particionamento, mesmo que a chave de particionamento seja a mesma, a chave de ordenacao nao e.<\/div>\n<div>Pode ser nao unica<\/div>\n<div>Pode ser bitmap ou btree<\/div>\n<div>Utilizada quando as consultas envolvem a busca em mais particoes, ou que geralmente temos que varrer o indice ou muitas particoes<\/div>\n<div><\/div>\n<div>Exemplo:<\/div>\n<div><\/div>\n<div>create index idxp on emp (hire_date) local;<\/div>\n<div><\/div>\n<div><\/div>\n<h3>Tipos de particionamento de Indice<\/h3>\n<div><\/div>\n<div>\n<div title=\"Page 119\">\n<table style=\"background-color:rgb(100.000000%,100.000000%,100.000000%);border-collapse:collapse;\">\n<colgroup>\n<col style=\"width:33.327325%;\"><\/col>\n<col style=\"width:33.336337%;\"><\/col>\n<col style=\"width:33.336337%;\"><\/col>\n<\/colgroup>\n<tbody>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 3.2401pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Index Types <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 3.2401pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Global (Range or Hash) <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 3.2401pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial,Bold';font-size:13pt;\">Local (All) <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(63.876652%,63.876652%,51.101322%);border-width:3.2401pt 1.62pt 5.04pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">B-tree <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(64.035088%,64.035088%,50.877193%);border-width:3.2401pt 1.56pt 5.04pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%) rgb(63.876652%,63.876652%,51.101322%);border-width:3.2401pt 1.62pt 5.04pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(63.876652%,63.876652%,51.101322%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%);border-width:5.04pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Bitmap <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(64.035088%,64.035088%,50.877193%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%);border-width:5.04pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(63.876652%,63.876652%,51.101322%) rgb(0.000000%,0.000000%,0.000000%) rgb(0.000000%,0.000000%,0.000000%);border-width:5.04pt 1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Bitmap Join <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Function <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No (*) <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"fon\nt-family:'Arial';font-size:11pt;\">Secondary IOT <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Yes <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">Cluster* <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.56pt 1.62pt 1.62pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No <\/span><\/div>\n<\/div>\n<\/td>\n<td style=\"border-style:solid;border-color:rgb(0.000000%,0.000000%,0.000000%);border-width:1.62pt 1.62pt 1.62pt 1.56pt;\">\n<div>\n<div><span style=\"font-family:'Arial';font-size:11pt;\">No <\/span><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/div>\n<\/div>\n<div title=\"Page 119\"><\/div>\n<div><\/div>\n<div>O indice normalmente criado na tabela, tambem pode ser chamado de GLOBALNONPARTITIONED INDEX<\/div>\n<div><\/div>\n<div><\/div>\n<h3>O Status do indice &#8211; UNUSABLE<\/h3>\n<div>Quando o indice fica no status de unusable, o indice nao e mais usado pelo otimizador e ocorrerao erros ao executar o DML. Para isso temos alguns detalhes a serem seguidos:<\/div>\n<div><\/div>\n<div>Parametro de inicializacao SKIP_UNUSABLE_INDEXES &#8211; quando configurado como TRUE que e o padrao o banco de dados o oracle ira executar o DML desde que haja um indice unique com status unusable, mas os indices nao sao mantidos aqueles com status unusable.<\/div>\n<div><\/div>\n<div>Se em um indice particionado uma ou mais particoes estiverem com status unusable, o otimizador nao ira usar o indice para a combinacao de particoes para resolucao de consultas ou o partitioning pruning. Para as demais, utilizara as particoes que estao usable.<\/div>\n<div><\/div>\n<div>Truncate de uma tabela com indices particionados invalidos, faz com que estes indices invalidos fiquem validos.<\/div>\n<div><\/div>\n<div>Os indices invalidos devem ser reconstruidos ou removidos.<\/div>\n<div><\/div>\n<div><\/div>\n<div>\n<h3>Criando o indice como PARTIAL ou FULL Versao 12c<\/h3>\n<div>O indice na versao 12c pode ser criado somente em algumas particoes da tabela, para agilizar sua utilizacao. Nas versoes anteriores as do 12c, nao temos tanta flexibilizacao na criacao, manutencao e remocao de particoes de indices.<\/div>\n<div><\/div>\n<div>Exemplos<\/div>\n<div><\/div>\n<div>create index orders_idx_partial on orders(order_total) global indexing partial;<\/div>\n<div><\/div>\n<div>ou<\/div>\n<div><\/div>\n<div>create index orders_idx_partial on orders(order_total) global indexing full;<\/div>\n<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<p><\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Particionamento de tabelas Oracle O particionamento de tabelas e de indices auxilia no tratamento e na sele\u00e7\u00e3o destes dados. Os dados s\u00e3o armazenados em segmentos, e estes segmentos que est\u00e3o armazenados nessas particoes podem sofrer manuten\u00e7oes diretamente. Para isso temos &hellip; <a href=\"https:\/\/www.soudba.com.br\/?p=69\">Continue lendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[199,213,214],"tags":[],"class_list":["post-69","post","type-post","status-publish","format-standard","hentry","category-oracle-partitioning","category-particionamento-como-funciona","category-particionamento-de-tabelas-oracle"],"_links":{"self":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts\/69","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69"}],"version-history":[{"count":0,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.soudba.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}