- Este tópico contém 10 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por
fsitja.
-
AutorPosts
-
20 de janeiro de 2010 às 8:58 pm #92211
Anônimo
Olá pessoal to tentando popular uma coluna com valores em sequencia, tipo tenho uma coluna PK em uma tabela com mais de 5milhoes de linhas e queria que essa coluna PK que se encontra com valores null que seja populada com numeros sequenciais.
Meu problema é fazer isso da forma mais rápida possível se alguém puder ajudar obrigado.20 de janeiro de 2010 às 9:12 pm #92216VitorLeandro
ParticipanteAmigo, se você quiser popular rapidamente a tabela, eu sugiro que você a recrie, ao invés de fazer update…
Exemplo:
select rownum seq, (restante dos campos) from tabela
Dessa forma, será acrescentado um numero seqüencial a esta tabela, ou se preferir, crie um sequence, e faça o select sobre ele (zerar o sequence após o teste).select seq.nexval, (restante dos campos) from tabela.
Em seguida, crie uma outra tabela com esta definição e estes dados:
create table dw_temp.teste2 nologging, parallel as
select rownum seq, (restante dos campos) from tabela…Parallel é pra criar em paralelo e nologging é pra gerar com o mínimo de redo (faça um export depois).
20 de janeiro de 2010 às 9:18 pm #92218burga
ParticipanteSe for utilizar sequence, você pode criar ela com um cache grande.
20 de janeiro de 2010 às 9:34 pm #92220VitorLeandro
ParticipanteEsqueci de postar, depois que você criar a tabela nova, faça um rename:
ALTER TABLE TABELA RENAME TO TABELA_BKP;
ALTER TABLE TABELA_NOVA RENAME TO TABELA;Se for utilizar essa tabela definitivamente, utilize sequence.
Não se esqueça de alterar a tabela para LOGGING (ALTER TABLE TABLE_NAME LOGGING;) para que gere redo e archive. Isso vai ajudar muito caso você precise fazer uma recuperação!
20 de janeiro de 2010 às 9:37 pm #92222Anônimo
VitorLeandro essa tabela tem mais de 15gb e eu só estou querendo colocar uma coluna nova e popular com números sequênciais pois para usar o package DBMS_REDEFINITION mas se tiver uma outra forma de eu criar uma partição nesta tabela de 15gb sem ter que mudar sua estrutura me diz.
Eu to fazendo assim:
Crio uma tabela clone da original apenas a estrutura e faço logo o particionamento e depois é que uso o DBMS_REDEFINITION mas sempre tenho problema com PK pois essa tabela de 15gb não tem PK.
Tem alguma maneira de eu criar essa partição na tabela de 15gb sem ter que criar uma coluna e popular para ficar como chave primária e só assim usar o package DBMS_REDEFINITION?20 de janeiro de 2010 às 10:38 pm #92225VitorLeandro
ParticipanteHá intendi…Você tá querendo particionar essa tabela não é?
A maneira mais rápida na minha opinião continua sendo CTAS…create table tempo nologging, parallel
PARTITION BY RANGE(DATINI)
(
PARTITION VALUES LESS THAN (to_date(‘4/6/2013′,’dd/mm/yyyy’)),
PARTITION VALUES LESS THAN (to_date(’31/12/2051′,’dd/mm/yyyy’)),
PARTITION VALUES LESS THAN (MAXVALUE)) as select * from tempo_oldalter table tempo logging;
Dessa forma, as nomes de partições serão geradas automaticamente…
Lembrando que em tabelas gigantes, é interessante você colocar uma Primary key!
É isso mesmo que você quer?
20 de janeiro de 2010 às 10:45 pm #92226Anônimo
Isso mesmo
20 de janeiro de 2010 às 11:12 pm #92228Anônimo
VitorLeandro Obrigado!
Mas tenho outra questão é sobre o nologging isso não é muito arriscado pois com essa opção ativa se der algum erro ou problema não vai deixar de registrar ou por exemplo pode parar no meio da criação da tabela e isso não teria problemas em eu saber quais os dados estão corretos e como eu poderia recuperar?21 de janeiro de 2010 às 12:00 am #92230VitorLeandro
ParticipanteVocê pode retirar o nologging, mas pode demorar um pouco mais! É prática utilizar o CTAS com nologging juntos, para agilizar o procedimento.
Se a tabela for criada com suscesso, não haverá problemas de recuperação, pois todas as linhas no select estaram na tabela final e sua tabela já fou gravada no datafile.. O problema é se o datafile falhar ou corromper, se não tiver realizado um backup, não haverão redo e conseguentemente archivelog suficiente para a recuperação desta…
Para garantir isso, basta não dropar a tabela original, e quando o backup full do seu banco terminar, você dropa ela pois já existirá ela no backupset e os logs continuaram a ser gravados normalmente, depois do alter table acima.
21 de janeiro de 2010 às 2:49 pm #92231Anônimo
ok obrigado irei fazer assim mesmo com nologging acho que não terei problemas com isso.
21 de janeiro de 2010 às 4:39 pm #92232fsitja
ParticipanteA vantagem de usar nologging é justamente essa do desempenho. Como a operação de create table as select é atômica, se der “pau” no meio do procedimento você vai ter que rodar o comando de novo. Working as intended.
-
AutorPosts
- Você deve fazer login para responder a este tópico.