Chiapa, Obrigado desde já pelas explanações todas, mas mesmo assim ainda não consegui alterar a bendita tabela. Outra opção que pensei, seria criar o campo na tabela sem valor default e not null....gradativamente eu iria fazendo update nos registros até conseguir colocar todos com um valor apropriado. No momento em que todos os registros estivessem com valor, eu alteraria o campo da tabela para not null+ valor default, no caso 0 (zero). Um alter table, depois que estiver tudo com valor acertado, via update, será bem mais rápido, não será???
Tks Sérgio ----- Original Message ----- From: jlchiappa To: oracle_br@yahoogrupos.com.br Sent: Friday, November 30, 2007 3:50 PM Subject: [oracle_br] Re: Dúvida Ah, alguns detalhes importantes : 1. vc diz que fez "alter system enable restricted" : alguns jobs (como por exemplo os jobs de propagação via streams, entre outros, como é dito no manual "Oracle® Streams Concepts and Administration") continuam mesmo assim, para se obter o status de banco REALMENTE idle eu sigiriria vc fazer um SHUTDOWN mesmo e um STARTUP RESTRICT 2. o ponto principal que paga na performance de DDLs do tipo em ambientes Produção é que DDLs de ALTER TABLE normalmente não podem ser paralelizados : CONSIDERE a possibilidade de se fazer um CREATE TABLE nomeqqueer nologging etcetc as (select * from tabela where 1=2), adicionar o campo novo nesse cara vazio, depois mandar um INSERT /*+ APPEND */ into tabelanova(lista de campos) (select * from tabela) - que esse sim PODE ser paralelizado via ALTER SESSION ENABLE PARALLEL DML, não consome quase nada de undo/redo, etc -, depois vc renomeia a tabela atual, renomeia a nova pra atual e vai recriando os índices/constraints/etc na tabela nova, com NOVALIDATE/PARALLEL/NOLOGGING, tudo que puder... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <[EMAIL PROTECTED]> escreveu > > Bem, antes de qquer coisa, vc ** MONITOROU ** o consumo de UNDO antes, > durante e depois da tentativa de ALTER TABLE, ** E ** verificou a > possibilidade de eventual bug, tal como eu tinha dito ? Essás ações > vão te dar subsídios, EM ESPECIAL se vc está num release antigo de 10g > (vc não diz a versão exata.... ) com RAC, houveram mais de um bug nos > releases iniciais de banco e de RAC 10g. > De qquer maneira : > > 1. sobre o tamanho/retenção : como eu disse e repito, a partir do > momento em que vc vá visitar uma enorme qtdade de blocos (já que a > tabela tem milhões e milhões de linhas), não é NADA incomum vc > precisar de undo na casa das dezenas de Gb, então SIM, pode ser que 6 > Gb não estejam dando conta.... Sobre a retenção, esse valor é em > segundos, então 10800 segundos representam 180 minutos, ie, uma hora e > meia, tranquilamente pode ser sim que um DDL numa tabela de não sei > quantos milhões demore mais que isso, suba esse valor também > > 2. sobre dropar : sim, vc até pode dropar as > triggers/índices/constraints, , mas aí vc ** tem ** que ter um step a > mais de backup do DDL pra poder recriar depois, penso que > DESABILITAR/DESLIGAR/DEIXAR INUSÁVEL é mais fácil, imho. Lembro também > não ser possível dropar índice em uso por constraint, não ser possível > dropar constraint PK/UK em uso por FK, etc, similar às referentes ao > DISABLE, leve em conta se vc quiser dropar os índices > > 3. desabilitar : a sintaxe correta para se desabilitar/deixar > inacessíveis índices/constraints/triggers (e portanto não sendo > necessária alteração, não sendo disparadas triggers, etc, mostradas no > manual "Oracle SQL Reference" e discutidas no "Oracle® Database > Administrator's Guide", para índices é ALTER INDEX nnn UNUSABLE; , > para constraints é ALTER TABLE nomedatabela DISABLE CONSTRAINT > nomedaconstraint, e para triggers é ALTER TRIGGER nnn DISABLE; - > lembro que tanto podem existir trigger a nível de tabela amarradas na > tabela que vc quer alterar, QUANTO podem haver triggers de DDL que > estejam interferindo no seu comando ALTER, desabilite/desligue TODAS > que encontrar!! > As principais restrições (documentadas no manual de Admin citado) são : > > - vc não pode desabilitar/desligar um índice que esteja sendo usado > por uma constraint de PK/UK, então primeiro faça o desabilit das > constraint, pra depois fazer dos índices > > - vc TEM que desabilitar primeiro as constraints de FK das outras > tabelas todas que apontam pra tabela cuja PK ou UK vc quer desligar, > para DEPOIS desligar as PKs e UKs, FKs e CHECKs da tabela-alvo > > ==>> aí sim, em resposta ao DDL de alter na dita tabela vc terá > alterações (e portanto undo/redo) apenas nos objetos internos Oracle > que "cuidam" de tabelas, não terá processamento a mais na transação, > não terá triggers nem lock de tabela devido á FK sem índice ou coisas > do tipo - está é a SUPOSIÇÃO que estou fazendo, que vc estava tendo > muita geração e/ou leitura consistente em undo por causa desses > "acessórios" da tabela, desabilitando geral tudo vc teria resultado > melhor, essa é a minha suposição... E claro, feito o DDL, na hora de > rehabilitar , logicamente vc ** VAI ** pedir um ENABLE NOVALIDATE nas > constraints, REBUILD PARALLEL nn NOLOGGING nos índices (** se ** o seu > banco/hardware suporta Paralelismo e modo nolog), vai ter várias > sessões cada uma habilitando uma parte.... > > 4. já que necessariamente um DDL tipo ALTER TABLE ** TEM QUE ** > varrer a tabela toda (lendo TODOS os registros em todos os blocos > formatados de todos os extents, reservando/criando espaço em cada > registro para os dados que virão na tal coluna), e vc está numa janela > de manutenção (sem outros usuários concorrentes), sugiro também que : > > a) vc faça a operação via sqlplus , com conexão LOCAL NO SERVIDOR > ORACLE, e não de máquina-cliente > > b) na sessão aonde vc vai fazer a operação, mande lá um ALTER SESSION > SET DB_FILE_MULTIBLOCK_READ_COUNT=máximovalorpossívelnoseuhardware ; , > um WORKAREA_SIZE_POLICY=MANUAL e sete os valores de hash_area_size, > sort_area_size, etc, lááá pro alto, já que haverá só as sessões > internas do Oracle competindo por disco e RAM com vc > > []s > > Chiappa > --- Em oracle_br@yahoogrupos.com.br, Sérgio <sergio@> escreveu > > > > Chiappa, > > > > Ainda tentei fazer alter index xx.xxxx disable, mas não é possível, > > dá ora-02243. Seria assim mesmo para desabilitar um índice??? > > > > Tks > > > > Sérgio > > ----- Original Message ----- > > From: Sérgio > > To: oracle_br@yahoogrupos.com.br > > Sent: Friday, November 30, 2007 2:49 PM > > Subject: Re: [oracle_br] Re: Dúvida > > > > > > Chiappa, > > > > Na verdade existem 6 Gb disponíveis para UNDO, e o > undo_retention=10800. > > Esse valor de undo_retention seria pequeno?? > > Durante a tentativa de fazer o alter table, o erro demorou 1:45 hs > para acontecer. > > > > Se eu fizer um drop nos indices, isso ajudaria?? Depois eu poderia > recriá-los... > > > > Obrigado. > > > > Sérgio > > > > Não sei se as informações sobre tamanho de tabela ajudam, mas... > > Tabela 1 - 36.000.000 de registros > > Tabela 2.543.616 Kb > > Indice 1 - 1.840.128 Kb > > Indice 2 - 1.904.640 Kb > > Indice 3 - 1.310.720 Kb > > > > Tabela 2 - 68.000.000 de registros > > Tabela 3.929.088 Kb > > Indice 1 - 3.997.696 Kb > > Indice 2 - 3.801.088 Kb > > Indice 3 - 2.949.120 Kb > > > > ----- Original Message ----- > > From: jlchiappa > > To: oracle_br@yahoogrupos.com.br > > Sent: Tuesday, November 27, 2007 7:52 AM > > Subject: [oracle_br] Re: Dúvida > > > > Ah, detalhes importantes : > > > > a) vc diz que é "grande" a sua undo tablespace, grande o QUANTO ???? A > > partir do momento em que se tem que processar milhões e milhões de > > linhas, undo tablespace na casa de DEZENAS de Gigabytes, é por aí que > > vc está ? > > > > b) vc não diz, mas assumo undo automático, ENTÂO vc tem que subir > > TAMBÉM o undo_retention se não o fez, UNDO grande com retention > > default não serve DE NADA... > > > > []s > > > > Chiappa > > --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <jlchiappa@> escreveu > > > > > > OK, erro 30036 já é alguma coisa - pra saber, exatamente O QUE mudou > > > na sua tentativa anterior, que não dava erro NENHUM, para essa > que dá > > > erro ? Vc mudou de tool, de tipo de conexão, o que exatamente ?? > > > Bem, sobre o erro, seguinte : é totalmente documentado, e nós > aqui no > > > fórum já falamos também, que a opção de NOLOGGING sozinha não > serve de > > > COISA NENHUMA, ela só funciona ** EM ALGUMAS POUCAS OPERAÇÔES > **, tal > > > como INSERT /*+ APPEND */ , DDLs do tipo ALTERs necessariamente > SERÃO > > > logados E exige também que não hajam índices habilitados (alterações > > > em índices SEMPRE SEMPRE são logadas)... No seu caso, o ALTER em si > > > gera muito pouco UNDO, e também muito pouco REDO LOG, não > justificaria > > > um consumo grande, então pra mim o que está acontecendo é que vc tem > > > ** ÍNDICES ** nessas tabelas, e talvez TRIGGERs e CONSTRAINTSs > também, > > > e são esses outros caras periféricos que estão gerando muita > coisa.... > > > Eu recomendaria que antes dos ALTERs vc *** DESABILITASSE TOTALMENTE > > > ** as constraints, os índices e as eventuais triggers das > tabelas que > > > vão ser alteradas e das tabs á elas relacionadas (via FK ou > > > assemelhado), E imediatamente antes, durante e depois do ALTER vc > > > fosse consultando a geração de redo e de undo, pesquisando os > > > registros apropriados nas v$%stat%, E também checasse a qtdade > de regs > > > de undo via uma query tipo : > > > > > > column sid format 999 > > > column segment_name format a15 > > > select b.segment_name, a.username, a.sid, a.serial#, c.used_ublk, > > > c.used_urec,c.START_UBAFIL, c.START_UBABLK, c.START_UBAREC , > b.status, > > > b.TABLESPACE_NAME, b.SEGMENT_ID, b.FILE_ID, b.BLOCK_ID > > > from v$session a, dba_rollback_segs b, v$transaction c > > > where b.segment_id = c.xidusn > > > and a.taddr = c.addr > > > / > > > > > > []s > > > > > > Chiappa > > > --- Em oracle_br@yahoogrupos.com.br, Sérgio <sergio@> escreveu > > > > > > > > Chiappa, boa tarde. > > > > > > > > Na verdade eu utilizava um script, mas tentei fazer cada comando > > > > manualmente e recebi ORA-30036-Unable to extend segment by 8 > > > > in Undo tablespace <tblspc>. Tive um problema parecido no 8i e > > > > era bug mesmo, mas depois disso nunca mais vi algo parecido. > > > > Minha tablespaces Undo já é enorme e estou sem espaço para > > > > aumentar isso. > > > > Para 'alter table....', a opção 'nologging' não irá fazer todo o > > > 'trabalho' > > > > sem 'encher' a Undo??? Seria uma opção??? > > > > > > > > Obrigado. > > > > > > > > Sérgio > > > > > > > > ----- Original Message ----- > > > > From: jlchiappa > > > > To: oracle_br@yahoogrupos.com.br > > > > Sent: Tuesday, November 20, 2007 1:38 PM > > > > Subject: [oracle_br] Re: Dúvida > > > > > > > > > > > > Sérgio, isso realmente cheira a bug, pra vc comprovar isso com o > > > > SUporte da Oracle (que é quem pode te orientar mais > precisamente),eu > > > > sugiro que vc , se não o fez, faça a operação diretamente no > > sqlplus, > > > > para evitar probs com utilitários "escondendo" msgs de erros, E > > > > diretamente em SQL, sem qquer tipo de programação. > > > > > > > > []s > > > > > > > > Chiappa > > > > > > > > --- Em oracle_br@yahoogrupos.com.br, Sérgio <sergio@> escreveu > > > > > > > > > > Sim, a tabela está correta Gleyson. > > > > > Não tenho sinônimos no meu banco. > > > > > Eu fiz alter table em 2 outras tabelas, na mesma sessão, > > logado com > > > > o owner > > > > > da tabela, sem problemas. > > > > > Os comandos foram executados conforme especifiquei abaixo. > > > > > - alter system enable restricted session > > > > > - alter table tabela1 > > > > > - alter table tabela2 > > > > > - alter table tabela3 > > > > > - alter system disable restricted session > > > > > > > > > > As tabelas 1 e 2 foram alteradas, a 3 , não. > > > > > > > > > > Sérgio > > > > > > > > > > > > > > > ----- Original Message ----- > > > > > From: Gleyson Melo > > > > > To: oracle_br@yahoogrupos.com.br > > > > > Sent: Monday, November 19, 2007 4:39 PM > > > > > Subject: Re: [oracle_br] Dúvida > > > > > > > > > > > > > > > Fala Sérgio! > > > > > > > > > > Antes de tudo... você verificou se você realmente está fazendo a > > > > modificação > > > > > na tabela correta? Digo, voce nao verificou em uma outra com > > > > sinonimo igual? > > > > > Você está utilizando o owner no comando ALTER TABLE? Só pra ter > > > > certeza. > > > > > > > > > > Você pode gerar um script da sua operação e mandar pra lista o > > > > resultado? > > > > > > > > > > Abração > > > > > > > > > > Em 19/11/07, Sérgio <sergio@> escreveu: > > > > > > > > > > > > Srs. boa tarde. > > > > > > > > > > > > Possuo uma tabela com 32.000.000 de registros e > > > > > > precisei fazer um alter table xxx add(campo number(15,4) > default > > > > 0 not > > > > > > null). > > > > > > Após umas 2 horas de processamento, o comando termina > > normalmente > > > > > > mas nada foi feito. > > > > > > Tentei fazer a mesma coisa novamente, mas não consegui > > adicionar o > > > > > > campo desejado. (tentei até commit após o comando...) > > > > > > No alert nada de anormal aparece, apenas o arquivamento dos > > > redos.. > > > > > > > > > > > > Alguém tem alguma dica do que pode estar acontecendo?? > > > > > > > > > > > > Obrigado desde já > > > > > > > > > > > > Sérgio > > > > > > > > > > > > Meu ambiente: > > > > > > - Oracle 10g , Linux RHAS 4, 2 instancias (RAC) com storage, > > > 64 bits > > > > > > - Fiz alter system enable restricted session em ambas > > instancias, > > > > > > derrubei conexões remanescentes de usuarios (embora inativos), > > > > > > parei todos os job´s que estavam rodando, embora nenhuma > tivesse > > > > > > ligação com a tabela em questão, > > > > > > executei o comando alter table xxx add........ > > > > > > --nesse ponto verifico objetos inválidos e recompilo-os, se > > > > existirem > > > > > > alter system disable restricted session em ambas novamente. > > > > > > > > > > > > Detalhe: havia feito alteração idêntica em 2 tabelas de > > > > 300.000anteriormente, > > > > > > e ocorreu tudo normalmente. > > > > > > > > > > > > --- > > > > > > Esta mensagem não implica a assunção de obrigações em nome da > > > > > > empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em > > > > > > sua 3a. Cláusula da 56a. alteração. Qualquer uso não > autorizado, > > > > > > replicação ou disseminação desta mensagem ou parte dela é > > > > > > expressamente proibido. A empresa Irmãos Muffato e Cia > Ltda não > > > > > > é responsável pelo conteúdo ou a veracidade desta informação. > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram > > removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Atenciosamente, > > > > > Gleyson Melo > > > > > Oracle Database 10g Administrator Certified Professional > > > > > > > > > > [As partes desta mensagem que não continham texto foram > removidas] > > > > > > > > > > > > > > > > > > > > > > > > > --- > > > > > Esta mensagem não implica a assunção de obrigações em nome da > > > > > empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em > > > > > sua 3a. Cláusula da 56a. alteração. Qualquer uso não autorizado, > > > > > replicação ou disseminação desta mensagem ou parte dela é > > > > > expressamente proibido. A empresa Irmãos Muffato e Cia Ltda não > > > > > é responsável pelo conteúdo ou a veracidade desta informação. > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram > removidas] > > > > > > > > > > > > > > > > > > > > > > > > > --- > > > > Esta mensagem não implica a assunção de obrigações em nome da > > > > empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em > > > > sua 3a. Cláusula da 56a. alteração. Qualquer uso não autorizado, > > > > replicação ou disseminação desta mensagem ou parte dela é > > > > expressamente proibido. A empresa Irmãos Muffato e Cia Ltda não > > > > é responsável pelo conteúdo ou a veracidade desta informação. > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > --- > > Esta mensagem não implica a assunção de obrigações em nome da > > empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em > > sua 3a. Cláusula da 56a. alteração. Qualquer uso não autorizado, > > replicação ou disseminação desta mensagem ou parte dela é > > expressamente proibido. A empresa Irmãos Muffato e Cia Ltda não > > é responsável pelo conteúdo ou a veracidade desta informação. > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > --- > > Esta mensagem não implica a assunção de obrigações em nome da > > empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em > > sua 3a. Cláusula da 56a. alteração. Qualquer uso não autorizado, > > replicação ou disseminação desta mensagem ou parte dela é > > expressamente proibido. A empresa Irmãos Muffato e Cia Ltda não > > é responsável pelo conteúdo ou a veracidade desta informação. > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > --- Esta mensagem não implica a assunção de obrigações em nome da empresa Irmãos Muffato e Cia Ltda, conforme Contrato Social em sua 3a. Cláusula da 56a. alteração. Qualquer uso não autorizado, replicação ou disseminação desta mensagem ou parte dela é expressamente proibido. A empresa Irmãos Muffato e Cia Ltda não é responsável pelo conteúdo ou a veracidade desta informação. [As partes desta mensagem que não continham texto foram removidas]