Segue respostas :

>>Thu, 07 Feb 2008 03:37:46 -0800

Bom Dia Chiappa, eu li e reli a sua resposta a minha pergunta. só tem 
mais uma coisa que eu gostaria de entender, no final, você me 
responde dizendo que este segmento de undo especial chamado "system" 
que reside na tablespace "system" somente é utilizado para transações 
de tabelas internas e não para tabelas de usuários. Sendo assim, 
temos 2 cenários:
undo_management=AUTO
undo_tablespace=UNDOTBS1

e undo_management=MANUAL
undo_tablespace=UNDOTBS1.

No primeiro caso, ele utilizaria o gerenciamento dos segmentos de 
rollback é feito automaticamente pelo banco e eu não preciso me 
preocupar com isso, somente com o tamanho da tablespace, de acordo 
com o tamanho máximo das transações e com o tempo máximo que desejo 
ter "flashback" no banco, correto? 

==> Não só o tamanho das transações mas também quanto tempo ela fica
ativa, consumindo extents, mas é essencialmente correto, sim.

>> Mas a tablespace que o banco 
utiliza continua sendo a UNDOTBS1, correto?

==> Certo.


>> no segundo cenário, eu teria que criar os segmentos de undo e o banco 
utilizaria estes segmentos de rollback ( que foram criados dentro da 
tablespace UNDOTBS1) para o armazenamento de dados de undo.

==> Criar e colocar ONLINE, sim.

>> A minha pergunta ( o que fiquei sem entender na sua resposta 
anterior) é, no caso de undo_management=auto, ele mesmo assim 
utilizaria segmentos de rollback de dentro da tablespace system para 
dados das tabelas internas do sistemas, e automaticamente segmentos 
de rollback dentro da tablespace de undo UNDOTBS1?
seria isso?

==> PRECISAMENTE, a idéia é separar o que é UNDO de usuário do UNDO
interno do banco. Isso é facílimo de se verificar, veja só :

-> estou com UNDO automático

[EMAIL PROTECTED]:SQL>show parameters undo

NAME                                 TYPE        VALUE
------------------------------------ -----------
------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

-> MESMO ASSIM veja lá que há SIM o segmento de rollback SYSTEM criado
e ativo, à disposição do banco, MAS veja lá que ele é não é público, é
PARTICULAR a quem o criou, o usuário SYS no caso, que é o usuário
interno do banco :

[EMAIL PROTECTED]:SQL>select * from DBA_ROLLBACK_SEGS;

SEGMENT_NAME OWNER  TABLESPACE_NAME SEGMENT_ID FILE_ID BLOCK_ID
INITIAL_EXTENT NEXT_EXTENT  STATUS
------------ ------ --------------- ---------- ------- --------
-------------- -----------  ------
SYSTEM       SYS    SYSTEM                   0       1        9      
  114688              ONLINE
_SYSSMU1$    PUBLIC UNDOTBS1                 1       2        9      
  131072              ONLINE
_SYSSMU2$    PUBLIC UNDOTBS1                 2       2       25      
  131072              ONLINE
_SYSSMU3$    PUBLIC UNDOTBS1                 3       2       41      
  131072              ONLINE
_SYSSMU4$    PUBLIC UNDOTBS1                 4       2       57      
  131072              ONLINE
_SYSSMU5$    PUBLIC UNDOTBS1                 5       2       73      
  131072              ONLINE
_SYSSMU6$    PUBLIC UNDOTBS1                 6       2       89      
  131072              ONLINE
_SYSSMU7$    PUBLIC UNDOTBS1                 7       2      105      
  131072              ONLINE
_SYSSMU8$    PUBLIC UNDOTBS1                 8       2      121      
  131072              ONLINE
_SYSSMU9$    PUBLIC UNDOTBS1                 9       2      137      
  131072              ONLINE
_SYSSMU10$   PUBLIC UNDOTBS1                10       2      153      
  131072              ONLINE

11 linhas selecionadas.

[EMAIL PROTECTED]:SQL> 

==> esses caras _SYSxyz$ são os que foram criados pelo undo
automático, é o que eu te falei na msg anterior, segmento de rollback
existe SEMPRE, o que o undo auto faz é os criar/ativar/desativar
automaticamente cfrme crescem/diminuem as transações, ok ?

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "rei_do_delphi"
<[EMAIL PROTECTED]> escreveu
>
> Bom Dia Chiappa, eu li e reli a sua resposta a minha pergunta. só tem 
> mais uma coisa que eu gostaria de entender, no final, você me 
> responde dizendo que este segmento de undo especial chamado "system" 
> que reside na tablespace "system" somente é utilizado para transações 
> de tabelas internas e não para tabelas de usuários. Sendo assim, 
> temos 2 cenários:
> undo_management=AUTO
> undo_tablespace=UNDOTBS1
> 
> e undo_management=MANUAL
> undo_tablespace=UNDOTBS1.
> 
> No primeiro caso, ele utilizaria o gerenciamento dos segmentos de 
> rollback é feito automaticamente pelo banco e eu não preciso me 
> preocupar com isso, somente com o tamanho da tablespace, de acordo 
> com o tamanho máximo das transações e com o tempo máximo que desejo 
> ter "flashback" no banco, correto? Mas a tablespace que o banco 
> utiliza continua sendo a UNDOTBS1, correto?
> 
> no segundo cenário, eu teria que criar os segmentos de undo e o banco 
> utilizaria estes segmentos de rollback ( que foram criados dentro da 
> tablespace UNDOTBS1) para o armazenamento de dados de undo.
> 
> A minha pergunta ( o que fiquei sem entender na sua resposta 
> anterior) é, no caso de undo_management=auto, ele mesmo assim 
> utilizaria segmentos de rollback de dentro da tablespace system para 
> dados das tabelas internas do sistemas, e automaticamente segmentos 
> de rollback dentro da tablespace de undo UNDOTBS1?
> seria isso?
> 
> Mais uma vez obrigado.
> --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <jlchiappa@> 
> escreveu
> >
> > Intão, os segmentos são um pouco mais que simples "divisões" 
> lógicas,
> > eles tem um papel físico também. Antes de falar sobre isso, de cara 
> já
> > aviso que o que segue é mais conhecimento acadêmico do que  qquer
> > outra coisa, a Oracle desencoraja e recomenda contra o controle 
> manual
> > de undo nas versões mais recentes de banco, e é o que é praxe, então
> > só mesmo num exercício teórico (como o é o OCP), ou num eventual 
> caso
> > de banco enorme e ultra-ativo é que vc vai precisa disso . Por causa
> > disso também a documentação atual fala muito pouco deles, ela os 
> > considera como um mecanismo interno que deveria ser controlado
> > internamente pelo banco, para referência eu indico docs antigos, 
> como
> > as notas metalink "General Overview of Rollback Segments", doc
> > id=1011108.6 e "Creating, Optimizing, and Understanding Rollback
> > Segments", doc id=62005.1 .
> >  Bem, vamos lá : creio que vc já sabe, mas o conceito básico de
> > consistência no bd Oracle é que para poder ser alterado
> > necessariamente o dado foi lido pro cache, e o que é liudo é o BLOCO
> > inteiro aonde o dado reside. Quando há a alteração, é feita uma 
> CÓPIA
> > desse bloco antes da alteração , que é o UNDO (ou também chamado de
> > ROLLBACK). Ora, um bloco é bem pequeno, então vc normalmente tem **
> > montes ** deles, se o banco fosse ter uma lista de blocos  de undo 
> ia
> > ser enrome, além do que ia exigir montes e montes de I/Os
> > pequeninos,então ele ** agrupa ** isso num EXTENT, que é uma série 
> de
> > blocos contíguos, aí esse I/O todo pode ser feito duma vez só. O
> > conjunto de extents de undo em uso é o chamado rollback segment. 
> Notar
> > que cada transação só pode acessar um único rollback segment 
> durante a
> > sua vida, MAS um rollback segment pode atender várias transações, um
> > extent por vez. Suponha que exista um segmento de rollback R1 online
> > numa dada tablespace, uma transação T1 inicia-se, ela aloca um 
> extent
> > E1 nesse segmento, essa transação enquanto durar só poderá pedir por
> > mais extents nesse segmento R1. Se logo após uma transação T2 
> inicia,
> > ela pode alocar um extent E2 nesse mesmo segmento (e daí pra frente 
> só
> > poderá pedir por mais extents nesse segmento), assim por diante.
> > Então, logicamente falando, em tese eu poderia ter só um único
> > segmento de rollback atendendo todo mundo ? Até poderia, mas :
> >   - há limite na qtdade máxima de extents que um segmento pode ter
> > (bem alto nos releases mais recentes, mas há)
> >   - há estruturas de controle no cabeçalho (header) dum segmento, 
> cada
> > transação interessada em o usar/continuar usando um segmento precisa
> > aplicar/esperar por latches nesses caras
> >   
> >   ==> então poderia haver forte CONTENÇÃO (competição pela chance de
> > usar) se houvesse um só segmento, além da questão de limites de
> > extents. Assim, se deve trabalhar em esquema de round-robin, ie : vc
> > cria alguns segmentos de rollback, a primeira transação T1 vê que o
> > segmento R1 tá livre e aloca um extent nele, a  T2 aloca extent no
> > segmento R2, assim por diante, até chegar um momento em que não há
> > segmentos livres, aí a transação Tn aloca um extent do R1, Tn+1 do 
> R2,
> > aí vai. Com isso vc DIMINUI a taxa de interessados num único 
> segmento,
> > portanto diminui a concorrência, essa é a idéia. 
> >    Aí vem as suas perguntas : 
> >     - qual o tamanho adequado pra extents dum segmento de rollback :
> > tem que ser um tamanho nem muito grande (pois se não uma transação 
> que
> > altere poucos bytes vai causar um tamanhão de I/O), nem muito 
> pequeno
> > senão sub-utiliza o hardware de I/O, normalmente 1 Mb é considerado
> > razoável
> >     - qtdade de segmentos : tem que ser uma qtdade tal que 
> não "force"
> > muitas transações a quererem usar o mesmo segmento ao mesmo tempo, 
> mas
> > também não desperdice muito espaço em disco, normalmente se ter 
> umas 3
> > ou 4 transações ativas pra cada segmento de rollback é ok. 
> >     
> >     ==> essas recomendações vêm da aplicação do citado em
> > http://asktom.oracle.com/pls/asktom/f?
> p=100:11:0::::P11_QUESTION_ID:275215756923
> > , mas na época de rollback manual a gente tinha mesmo que fazer os
> > testes cfrme o link cita.
> >     
> >     - quando vc seta undo_management para AUTO, o que ele faz é ir
> > criando/removendo/colocando ONLINE e OFFLINE os segmentos de 
> rollback
> > conforme as transações vão chegando, ok ? Então SIM, a partir do
> > momento que vc desliga a feature com undo_management=MANUAL, fica 
> POR
> > SUA CONTA não só criar como ativar/colocar ONLINE os segmentos, 
> então
> > é natural que se vc não o fez levou erro....
> >     
> >     - o erro da msg em questão : quando vc cria o banco de dados por
> > conta própria ele cria um segmento de rollback especial, chamado
> > SYSTEM, na tablespace de sistema também chamada SYSTEM : esse cara
> > porém só pode ser usada para as transações *** INTERNAS ***, feitas
> > nas tabelas INTERNAS do banco por ele próprio, se vc não tiver
> > segmentos de rollback de usuário criados, no caso de transação em
> > tabelas não-internas o banco vai olhar, só achará o SYSTEM, esse é
> > RESERVADO, pumba, levas o erro em questão, ok ? É como eu falei, a
> > partir do momento que vc desativa o undo automático, fica POR SUA
> > CONTA criar segmentos, os ter online, os ter offline quando não
> > estiverem sendo usados, definir o tamanho de extent, etc....
> >     
> >     []s
> >     
> >      Chiappa
> >      
> > --- Em oracle_br@yahoogrupos.com.br, "rei_do_delphi"
> > <brunomaximomogi@> escreveu
> > >
> > > Chiappa e Companhia, boa tarde,
> > > Gostaria de entender um conceito importante no Db Oracle. Estava 
> > > lendo um material da sybex sobre Oracle e no capítulo de 
> > > gerenciamento de undo, fui fazendo os exercícios. A versão do 
> Oracle 
> > > é a 10.2.0.1.0 - 64 bits, rodando em um Centos 5.0 64 bits por 
> > > vmware. Quando alterei o parâmetro undo_management para manual ( 
> > > utilizando spfile) e iniciei novamente a instance, recebi o erro: 
> > > ORA-01552: cannot use system rollback segment for non-system 
> > > tablespace 'yyy' ao tentar fazer um update na base. Aí, voltei o 
> > > parâmetro para auto e reiniciei a instância e tentei efetuar o 
> mesmo 
> > > update e ele deu certo. Voltei o parâmetro para o manual e voltou 
> a 
> > > dar o mesmo erro ( p.s: parâmetro undo_tablespace setado para uma 
> > > tablespace de UNDO corretamente e undo_retention=900, para 
> guardar 
> > > por 15 minutos). aí dando uma olhada a mais no material que 
> possuo, 
> > > eu vi que aparentemente( digo isso, pois ainda não entendi o 
> conceito 
> > > de "segmento de rollback") "segmento de rollback" é como se fosse 
> > > divisórias na tablespace de undo? Este erro me ocorreu porque? 
> Quando 
> > > consultei a v$undotbs ele havia me retornado que os segmentos de 
> > > rollback estavam na system, seria por isso que estava dando o 
> erro 
> > > então? 
> > > criei então um novo segmento de rollback através do dbconsole ( 
> pois 
> > > não conhecia esse conceito até então): 
> > > create rollback segment "rollbs2" tablespace "undotbs1" storage ( 
> > > inicial 1M next 5M)/
> > > alter rollback segment "rollbs2" online;
> > > 
> > > pelo que entendi, este comando me criou um "novo" segmento de 
> > > rollback e o ativou em seguida correto?
> > > 
> > > sendo assim, minhas perguntas são:
> > > O que é segmento de rollback? é como eu "presumi" agora pouco 
> como 
> > > sendo divisórias na tablespace de undo?
> > > quando o tamanho que devo definir em initial, next e optimal 
> size ?
> > > é possível ter mais que 1 segmento de undo?
> > > Obrigado.
> > >
> >
>


Responder a