[oracle_br] Re: PARTICIONAMENTO DE TABELAS 9i
Valeu Jorge, obrigado. Cido --- Em oracle_br@yahoogrupos.com.br, "interessado60" escreveu > > Bom dia > > sempre que tive este problema, executei o comando abaixo: > > ALTER TABLE DWH.DW_A_BASE_DIARIA SPLIT PARTITION MES_200405_E_ACIMA > AT (TO_DATE(' 2004-06-01 00:00:00', 'S-MM-DD HH24:MI:SS', > 'NLS_CALENDAR=GREGORIAN')) > INTO (PARTITION MES_200405 pctused 98 pctfree 1 TABLESPACE > TSD_DW_A_BASE_DIARIA_MAI04, > PARTITION RESTANTE_MAXVALUE pctused 98 pctfree 1 TABLESPACE > TBL_DWH_MAXVALUE ) > parallel (degree 16); > > ## > para voce tirar a duvida de quem é quem, veja p PL abaixo: > ## > > # Procedimento de split da partição MAXVALUE, gerando a nova partição. > # > > # Garante que o nome da nova partição vai usar a descrição do mês em inglês > export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 > export ORACLE_SID=ASPP1 > > sqlplus '/ as sysdba' << !EOF > declare > -- > W_TABELA varchar2( 30 ) := '${1}'; -- Nome da tabela a ser > processada > W_SUFIXO_PART varchar2( 30 ) := '${2}'; -- Suxifo para compor o nome > das partições > W_PARTITION_NAME varchar2( 30 );-- Nome da última partição > W_HIGH_VALUE varchar2( 300 ); -- Valor de HIGH_VALUE da > última partição (antes da MAXVALUE) > W_DATA_HIGH_VALUE date; -- Valor do HIGH_VALUE em > formato data > W_PART_NOME_NOVO varchar2( 30 );-- Nome da nova partição > W_COMANDO_SPLIT varchar2( 300 ); -- Statement de split para uso > com 'execute immediate' > -- > begin > -- > -- Montagem do nome da nova partição > -- > -- Descobre o nome e o high_value da última partição (antes da MAXVALUE) > select PARTITION_NAME, HIGH_VALUE > into W_PARTITION_NAME, W_HIGH_VALUE > from DBA_TAB_PARTITIONS >where TABLE_OWNER= 'ASPP_DBA' > and TABLE_NAME = W_TABELA > and PARTITION_POSITION = ( select max( PARTITION_POSITION ) - 1 > from DBA_TAB_PARTITIONS > where TABLE_OWNER = 'ASPP_DBA' >and TABLE_NAME = W_TABELA ); > -- > -- Transforma o HIGH_VALUE em 'date' > execute immediate 'select ' || W_HIGH_VALUE || ' from dual' into > W_DATA_HIGH_VALUE; > -- > -- Compõe o nome da nova partição > W_PART_NOME_NOVO := to_char( W_DATA_HIGH_VALUE, 'MONYY' ) || W_SUFIXO_PART; > -- > -- Montagem e execução do comando de split > W_COMANDO_SPLIT := 'alter table ASPP_DBA.' || W_TABELA || ' split partition > DATI' || W_SUFIXO_PART || ' at ( ' || > 'to_date( ''' || to_char( add_months( W_DATA_HIGH_VALUE, > 1 ), 'dd/mm/' ) || ''', ''DD/MM/'' ) ) ' || > 'into ( ' || W_PART_NOME_NOVO || ', DATI' || > W_SUFIXO_PART || ' )'; > dbms_output.put_line( W_COMANDO_SPLIT ); > --execute immediate W_COMANDO_SPLIT; > end; > / > exit > !EOF > > > > > > > > > > --- Em oracle_br@yahoogrupos.com.br, "Aparecido" escreveu > > > > Muito bom seu artigo Ivan! > > > > Já está na biblioteca, rss > > > > Tenho mais uma dúvida, tenho uma tabela particionada por mês que pararam de > > dar manutenção. > > > > O que ocorre é que tenho que criar as partições pra dar andamento no que > > foi feito anteriormente, porém tenho mais de 3 anos de dados não > > particionado. > > > > Estou estudando a documentação de particionamento do 9i e até o momento só > > achei um ADD PARTITION... > > > > A pergunta é: > > > > É transparente eu ir adicionando as partições na Tabela conforme está no > > manual? Ou seja, é só dar um ALTER TABLE ... ADD PARTITION... e depois > > reconstuir os indices? Ou existe alguma observação? > > > > Obrigado a todos! > > > > Cido > > > > --- Em oracle_br@yahoogrupos.com.br, Ivan Ricardo Schuster > > escreveu > > > > > > Aparecido, > > > > > > Uma forma mais eficiente de particionar esta tabela é adicionar este > > > campo e usar o "exchange partition". > > > > > > Escrevi algo sobre isso ha um tempo atras no link abaixo, acredito que > > > funcione 100% no Oracle 9i, mas é bom testar: > > > > > > http://ivanschuster.wordpress.com/2010/06/04/utilizando-exchange-partition/ > > > > > > Abraço > > > > > > 2010/8/27 Aparecido : > > > > Obrigado pela resposta Amigo! > > > > > > > > Então, é exatamente isso, adicionar um campo somente para particionar > > > > uma tabela, e este campo seria adicionado na aplicação com o sysdate > > > > (por exemplo) pra cair na partição correta. > > > > > > > > A pergunta foi porque na tabela não tenho nenhum campo data. > > > > > > > > Valeu. > > > > > > > > Abraço > > > > > > > > --- Em oracle_br@yahoogrupos.com.br, Duilio Bruniera Junior > > > > escreveu > > > >> > > > >> Então amigão a parada é assim ! > > > >> O r
[oracle_br] Re: PARTICIONAMENTO DE TABELAS 9i
Bom dia sempre que tive este problema, executei o comando abaixo: ALTER TABLE DWH.DW_A_BASE_DIARIA SPLIT PARTITION MES_200405_E_ACIMA AT (TO_DATE(' 2004-06-01 00:00:00', 'S-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')) INTO (PARTITION MES_200405 pctused 98 pctfree 1 TABLESPACE TSD_DW_A_BASE_DIARIA_MAI04, PARTITION RESTANTE_MAXVALUE pctused 98 pctfree 1 TABLESPACE TBL_DWH_MAXVALUE ) parallel (degree 16); ## para voce tirar a duvida de quem é quem, veja p PL abaixo: ## # Procedimento de split da partição MAXVALUE, gerando a nova partição. # # Garante que o nome da nova partição vai usar a descrição do mês em inglês export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252 export ORACLE_SID=ASPP1 sqlplus '/ as sysdba' << !EOF declare -- W_TABELA varchar2( 30 ) := '${1}'; -- Nome da tabela a ser processada W_SUFIXO_PART varchar2( 30 ) := '${2}'; -- Suxifo para compor o nome das partições W_PARTITION_NAME varchar2( 30 );-- Nome da última partição W_HIGH_VALUE varchar2( 300 ); -- Valor de HIGH_VALUE da última partição (antes da MAXVALUE) W_DATA_HIGH_VALUE date; -- Valor do HIGH_VALUE em formato data W_PART_NOME_NOVO varchar2( 30 );-- Nome da nova partição W_COMANDO_SPLIT varchar2( 300 ); -- Statement de split para uso com 'execute immediate' -- begin -- -- Montagem do nome da nova partição -- -- Descobre o nome e o high_value da última partição (antes da MAXVALUE) select PARTITION_NAME, HIGH_VALUE into W_PARTITION_NAME, W_HIGH_VALUE from DBA_TAB_PARTITIONS where TABLE_OWNER= 'ASPP_DBA' and TABLE_NAME = W_TABELA and PARTITION_POSITION = ( select max( PARTITION_POSITION ) - 1 from DBA_TAB_PARTITIONS where TABLE_OWNER = 'ASPP_DBA' and TABLE_NAME = W_TABELA ); -- -- Transforma o HIGH_VALUE em 'date' execute immediate 'select ' || W_HIGH_VALUE || ' from dual' into W_DATA_HIGH_VALUE; -- -- Compõe o nome da nova partição W_PART_NOME_NOVO := to_char( W_DATA_HIGH_VALUE, 'MONYY' ) || W_SUFIXO_PART; -- -- Montagem e execução do comando de split W_COMANDO_SPLIT := 'alter table ASPP_DBA.' || W_TABELA || ' split partition DATI' || W_SUFIXO_PART || ' at ( ' || 'to_date( ''' || to_char( add_months( W_DATA_HIGH_VALUE, 1 ), 'dd/mm/' ) || ''', ''DD/MM/'' ) ) ' || 'into ( ' || W_PART_NOME_NOVO || ', DATI' || W_SUFIXO_PART || ' )'; dbms_output.put_line( W_COMANDO_SPLIT ); --execute immediate W_COMANDO_SPLIT; end; / exit !EOF --- Em oracle_br@yahoogrupos.com.br, "Aparecido" escreveu > > Muito bom seu artigo Ivan! > > Já está na biblioteca, rss > > Tenho mais uma dúvida, tenho uma tabela particionada por mês que pararam de > dar manutenção. > > O que ocorre é que tenho que criar as partições pra dar andamento no que foi > feito anteriormente, porém tenho mais de 3 anos de dados não particionado. > > Estou estudando a documentação de particionamento do 9i e até o momento só > achei um ADD PARTITION... > > A pergunta é: > > É transparente eu ir adicionando as partições na Tabela conforme está no > manual? Ou seja, é só dar um ALTER TABLE ... ADD PARTITION... e depois > reconstuir os indices? Ou existe alguma observação? > > Obrigado a todos! > > Cido > > --- Em oracle_br@yahoogrupos.com.br, Ivan Ricardo Schuster > escreveu > > > > Aparecido, > > > > Uma forma mais eficiente de particionar esta tabela é adicionar este > > campo e usar o "exchange partition". > > > > Escrevi algo sobre isso ha um tempo atras no link abaixo, acredito que > > funcione 100% no Oracle 9i, mas é bom testar: > > > > http://ivanschuster.wordpress.com/2010/06/04/utilizando-exchange-partition/ > > > > Abraço > > > > 2010/8/27 Aparecido : > > > Obrigado pela resposta Amigo! > > > > > > Então, é exatamente isso, adicionar um campo somente para particionar uma > > > tabela, e este campo seria adicionado na aplicação com o sysdate (por > > > exemplo) pra cair na partição correta. > > > > > > A pergunta foi porque na tabela não tenho nenhum campo data. > > > > > > Valeu. > > > > > > Abraço > > > > > > --- Em oracle_br@yahoogrupos.com.br, Duilio Bruniera Junior > > > escreveu > > >> > > >> Então amigão a parada é assim ! > > >> O range partition, ou (Particionamento por intervalo), tem como > > >> principal > > >> função é dividir uma tabela em intervalos de tempo ou numéricos. > > >> > > >> Agora deixa eu ver se entendi, oque voce quer fazer é criar um campo > > >> data ha > > >> mais nessa tabela, jogar um valor sysdate ou uma sequence nesse campo pra > > >> poder particionar a tabela, é isso ? > > >>
[oracle_br] Re: PARTICIONAMENTO DE TABELAS 9i
Muito bom seu artigo Ivan! Já está na biblioteca, rss Tenho mais uma dúvida, tenho uma tabela particionada por mês que pararam de dar manutenção. O que ocorre é que tenho que criar as partições pra dar andamento no que foi feito anteriormente, porém tenho mais de 3 anos de dados não particionado. Estou estudando a documentação de particionamento do 9i e até o momento só achei um ADD PARTITION... A pergunta é: É transparente eu ir adicionando as partições na Tabela conforme está no manual? Ou seja, é só dar um ALTER TABLE ... ADD PARTITION... e depois reconstuir os indices? Ou existe alguma observação? Obrigado a todos! Cido --- Em oracle_br@yahoogrupos.com.br, Ivan Ricardo Schuster escreveu > > Aparecido, > > Uma forma mais eficiente de particionar esta tabela é adicionar este > campo e usar o "exchange partition". > > Escrevi algo sobre isso ha um tempo atras no link abaixo, acredito que > funcione 100% no Oracle 9i, mas é bom testar: > > http://ivanschuster.wordpress.com/2010/06/04/utilizando-exchange-partition/ > > Abraço > > 2010/8/27 Aparecido : > > Obrigado pela resposta Amigo! > > > > Então, é exatamente isso, adicionar um campo somente para particionar uma > > tabela, e este campo seria adicionado na aplicação com o sysdate (por > > exemplo) pra cair na partição correta. > > > > A pergunta foi porque na tabela não tenho nenhum campo data. > > > > Valeu. > > > > Abraço > > > > --- Em oracle_br@yahoogrupos.com.br, Duilio Bruniera Junior > > escreveu > >> > >> Então amigão a parada é assim ! > >> O range partition, ou (Particionamento por intervalo), tem como principal > >> função é dividir uma tabela em intervalos de tempo ou numéricos. > >> > >> Agora deixa eu ver se entendi, oque voce quer fazer é criar um campo data > >> ha > >> mais nessa tabela, jogar um valor sysdate ou uma sequence nesse campo pra > >> poder particionar a tabela, é isso ? > >> > >> se for isso o primeiro passo é fazer um alter table add novo campo e > >> carregar os valores depois criar a tabela_com_particionamento, depois voce > >> pode fazer um "INSERT INTO . (select * > >> from );" depois faz um rename na tabela. > >> > >> mais voce tem que analizar o tamanho e se a movimentação tiver que ser a > >> quente é um pouco mais complicado. > >> > >> Em 26 de agosto de 2010 19:59, Aparecido escreveu: > >> > >> > > >> > > >> > Olá pessoal. > >> > > >> > Alguém sabe se é possível criar um campo do tipo data somente para fazer > >> > particionamento por range?? > >> > > >> > Obrigado pela atenção. > >> > > >> > Att. > >> > > >> > Cido > >> > > >> > > >> > > >> > >> > >> [As partes desta mensagem que não continham texto foram removidas] > >> > > > > > > > > > > > > > > -- > >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira > >>responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > -- > >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure > >>» Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: > >>http://www.oraclebr.com.br/ > > > > Links do Yahoo! Grupos > > > > > > > > > > -- > Ivan Ricardo Schuster > OCP 10g/11g > OCE RAC 10g/Linux >
Re: [oracle_br] Re: PARTICIONAMENTO DE TABELAS 9i
Aparecido, Uma forma mais eficiente de particionar esta tabela é adicionar este campo e usar o "exchange partition". Escrevi algo sobre isso ha um tempo atras no link abaixo, acredito que funcione 100% no Oracle 9i, mas é bom testar: http://ivanschuster.wordpress.com/2010/06/04/utilizando-exchange-partition/ Abraço 2010/8/27 Aparecido : > Obrigado pela resposta Amigo! > > Então, é exatamente isso, adicionar um campo somente para particionar uma > tabela, e este campo seria adicionado na aplicação com o sysdate (por > exemplo) pra cair na partição correta. > > A pergunta foi porque na tabela não tenho nenhum campo data. > > Valeu. > > Abraço > > --- Em oracle_br@yahoogrupos.com.br, Duilio Bruniera Junior > escreveu >> >> Então amigão a parada é assim ! >> O range partition, ou (Particionamento por intervalo), tem como principal >> função é dividir uma tabela em intervalos de tempo ou numéricos. >> >> Agora deixa eu ver se entendi, oque voce quer fazer é criar um campo data ha >> mais nessa tabela, jogar um valor sysdate ou uma sequence nesse campo pra >> poder particionar a tabela, é isso ? >> >> se for isso o primeiro passo é fazer um alter table add novo campo e >> carregar os valores depois criar a tabela_com_particionamento, depois voce >> pode fazer um "INSERT INTO . (select * >> from );" depois faz um rename na tabela. >> >> mais voce tem que analizar o tamanho e se a movimentação tiver que ser a >> quente é um pouco mais complicado. >> >> Em 26 de agosto de 2010 19:59, Aparecido escreveu: >> >> > >> > >> > Olá pessoal. >> > >> > Alguém sabe se é possível criar um campo do tipo data somente para fazer >> > particionamento por range?? >> > >> > Obrigado pela atenção. >> > >> > Att. >> > >> > Cido >> > >> > >> > >> >> >> [As partes desta mensagem que não continham texto foram removidas] >> > > > > > > > -- >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira >>responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -- >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » >>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: >>http://www.oraclebr.com.br/ > > Links do Yahoo! Grupos > > > -- Ivan Ricardo Schuster OCP 10g/11g OCE RAC 10g/Linux
[oracle_br] Re: PARTICIONAMENTO DE TABELAS 9i
Obrigado pela resposta Amigo! Então, é exatamente isso, adicionar um campo somente para particionar uma tabela, e este campo seria adicionado na aplicação com o sysdate (por exemplo) pra cair na partição correta. A pergunta foi porque na tabela não tenho nenhum campo data. Valeu. Abraço --- Em oracle_br@yahoogrupos.com.br, Duilio Bruniera Junior escreveu > > Então amigão a parada é assim ! > O range partition, ou (Particionamento por intervalo), tem como principal > função é dividir uma tabela em intervalos de tempo ou numéricos. > > Agora deixa eu ver se entendi, oque voce quer fazer é criar um campo data ha > mais nessa tabela, jogar um valor sysdate ou uma sequence nesse campo pra > poder particionar a tabela, é isso ? > > se for isso o primeiro passo é fazer um alter table add novo campo e > carregar os valores depois criar a tabela_com_particionamento, depois voce > pode fazer um "INSERT INTO . (select * > from );" depois faz um rename na tabela. > > mais voce tem que analizar o tamanho e se a movimentação tiver que ser a > quente é um pouco mais complicado. > > Em 26 de agosto de 2010 19:59, Aparecido escreveu: > > > > > > > Olá pessoal. > > > > Alguém sabe se é possível criar um campo do tipo data somente para fazer > > particionamento por range?? > > > > Obrigado pela atenção. > > > > Att. > > > > Cido > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >