by Julio Cesar Correa
Shrink database segnments
Para que possamos compactar o espaço causado pela fragmentação baixo da HWM(high water mark).Depois do shrink a HWM é movida para baixo
e assim colocando disponivel o espaço que antes não poderia ser utilizado.
Quando é feito um insert/apdate em que a tabela é aumentada(tamanho em blocos).A HWM informa a quantidade de blocos alocados para este segmento.
O caso pe que quando acontece um delete/update em que o tamanho sda tabela fisica é diminuido, a HWM não é atualizada para baixo,ou seja,não é atualizada
com a informação que diminuiu de tamanho.Portanto existe espaço livre neste segmento,mas ele não pode ser utilizado.
Até que executemos um online segment shrink,que vai ajustar a marca d'agua ou HMW.
O segmento tem que ser elegível ao online segment shrink.Caso não seja,o DBA poderá usar online table redefinition via EM ou DBMS_REDEFINITION.
Vantagens:
- Pode ser feita on-line.
- Podem ocorrer queries e DML's normalmente no segmento,porem no final da operação os DML's serão bloqueados por um curto perido de tempo.
- Os indices são mantidos,porem só é possivel usá-lo no final da operação.
- Não requer mais espaço para a operação(diferente de online table redefinition)
Restrições:
1. os seguimentos devem estar em uma tablespace LMT(locally managed tablespace) com ASSM(automatic segment space management).
2. todos os seguimentos dentro do intem um são elegíveis exceto: IOT's,tabelas com materialized views baseada em rowid e tabelas com indices
baseados em função(function-based indexes)
requerimentos:
Habilitar a movimentação de linhas na tabela.
ALTER TABLE table_name ENABLE ROW MOVEMENT ;
--Inicio do bloco pl/sql
variable id number ;
DECLARE
name_task varchar2(100);
desc_task varchar2(500);
obj_id number ;
BEGIN
--execute immediate 'alter table cmt.userdocuments enable row movement';
begin
name_task := '' ;
desc_task := 'Teste do uso de segment advisor na tabela userdocuments';
dbms_advisor.create_task(
advisor_name => 'Segment Advisor',
task_id => :id,
task_name => name_task,
task_desc => desc_task );
/*dbms_advisor.create_object(
task_name => name_task,
object_type =>'TABLE',
attr1 => 'CMT',
attr2 => 'USERDOCUMENTS',
attr3 => null,
attr4 => null,
attr5 => null,
obj_id => obj_id) ; */
dbms_advisor.create_object(name_task,'TABLE','CMT','USERDOCUMENTS',NULL,NULL,obj_id) ;
dbms_advisor.set_task_parameter(
task_name => name_task,
parameter => 'recommend_all',
value => 'TRUE');
dbms_advisor.execute_task (name_task) ;
end;
END;
No comments:
Post a Comment