Pular para o conteúdo principal

Visualizando a marca d´água (High Water Mark)

O HWM - High Water Mark é uma fronteira entre o espaço usado e não usado do segmento.Quando ocorre um solicitação para uso de novos blocos e essa requisição não pode ser atendida pela atual lista de blocos livres, o bloco atual que possue a marca d´água é marcado como usado e a marca avança para o seguinte. Em outras palavras, todo segmento que está a esquerda da marca é usado e o espaço a direita é livre.


Quando uma tabela é criada um número inicial de blocos / extensão são alocados para a tabela. Depois, com o aumento de número de operações DML, novas extensões são alocadas de acordo com a demanda.


Vamos a um exemplo prático para entender melhor. Criei um tabela para teste com a mesma estrutura da visão dba_users:

CREATE TABLE teste AS (SELECT * FROM dba_users WHERE rownum<0 nbsp="" p="">


Após alguns insertes:
INSERT INTO teste (SELECT * FROM dba_users);
COMMIT:


Realizando uma consulta na DBA_SEGMENTS, Temos para nossa tabela: 1 extensão contendo 8 blocos. Mas de fato, só poderemos usar 7 dos 8 blocos, pois um deles é destinado ao header.


SELECT BLOCKS,EMPTY_BLOCKS,NUM_ROWS  FROM dba_tables WHERE table_name='TESTE' and owner='THIAGO';

BLOCKS                    EMPTY_BLOCKS           NUM_ROWS
----------------------       ----------------------               ----------------------
1                                           6                                   57



Executando o mesmo insert 11 vezes, DBA_SEGMENTS nos mostra:

BLOCKS                     EXTENTS
----------------------     ----------------------
16                                     2


E DBA_TABLES depois do ANALYZE nos mostra:

BLOCKS                            EMPTY_BLOCKS        NUM_ROWS
----------------------            ----------------------           ----------------------
12                                             3                                  627


Após os inserts, a marca d´água de nossa tabela foi alterada. Agora temos 16 blocos e 2
segmentos. Agora vamos realizar operações de delete e ver o comportamento da tabela.

DELETE teste WHERE rownum < 200;
COMMIT;


BLOCKS                             EMPTY_BLOCKS             NUM_ROWS
----------------------              ----------------------                   ----------------------
12                                             3                                                     428


Note que o número de blocos é o mesmo, porém o número de linhas foi reduzido. Para determinar
o número exato de blocos que contém dados usaremos a consulta abaixo, nela consultaremos
o primeiro e o último bloco pelo rowid.

SELECT COUNT (distinct dbms_rowid.rowid_block_number(rowid)||'-'||dbms_rowid.rowid_relative_fno (rowid)) "blocos usados"
FROM TESTE;

blocos usados
----------------------
7


Veja, tínhamos 16 blocos reservados para a tabela, 12 estavam formatados para receber dados,
mas segundo nossa consulta apenas 7 desses possuem dados. Para reorganizar a tabela
e também reajustar a marca d´água temos três opções.

- TRUNCATE TABLE teste ( Apaga todos os dados da tabela)

- ALTER TABLE teste MOVE (Pode ser usado para mover a tabela para uma outra tablespace)

- ALTER TABLE teste SHRINK SPACE ( Introduzido na versão 10g)

Comentários

Postagens mais visitadas deste blog

Configurando a política de retenção de backups no RMAN

                       Configurando a politica de reten çã o de backups no RMAN        O objetivo deste post é explicar como podemos configurar a reten çã o de backups na poderosa ferramenta de backup do bando de dados Oracle RMAN. Podemos configurar nossa pol í tica tendo por base dois tipos: janela de recupera çã o (recovery window) ou redundãncia (redundancy). Abaixo iremos abordar os dois tipos.       Para identificar qual dos dois tipos o RMAN está usando, use: RMAN> show retention policy; Política baseada em redundância CONFIGURE RETENTION POLICY TO REDUNDANCY 1; Política baseada em janela de recuperação CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS; ·        Política baseada em redund â ncia ( REDUNDANCY )       De uma maneira bem simples e objetiva, o par â met...

ORA-28365: wallet is not open - Oracle Data Guard + Oracle TDE

Problema: No meu ambiente de testes usando Oracle Data Guard e com algumas tablespaces com TDE me deparei com o seguinte erro: PR00 (PID:396056): MRP0: Background Media Recovery terminated with error 28365 2024-03-15T03:12:42.419136+00:00 Errors in file /u01/app/oracle/diag/rdbms/thdr/thdr/trace/thdr_pr00_396056.trc: ORA-28365: wallet is not open 2024-03-15T03:12:43.000571+00:00 Recovery interrupted! Recovered data files to a consistent state at change 32232590 Stopping change tracking Solução: Verifiquei a wallet na base de dados standby e estava fechada. set lines 300 col name for a15 col wrl_type for a10 col status for a30 select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id) order by p.con_id;     CON_ID NAME            OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS ---------- --------------- ---------- --------...

Oracleasm Deletedisk - Unable to open device or resource busy failed Unable to clear disk

Após a migração de storages utilizando Oracle ASM em um ambiente, precisei remover os discos que não estavam mais sendo utilizados. Porém quando fui utilizar o deletedisk no oracleasm recebi o seguinte erro: # oracleasm deletedisk -v HITACHI33 Clearing disk header: oracleasm-write-label: Unable to open device "/dev/oracleasm/disks/HITACHI33": Device or resource busy failed Unable to clear disk "HITACHI33" Fiz a verificação para ver ser o disco ainda estava em uso, mas não obtive nenhum retorno: # fuser /dev/oracleasm/disks/HITACHI33 # lsof /dev/oracleasm/disks/HITACHI33 Então lendo alguns posts e artigos vi que o problema poderia estar relacionado ao multipath do sistema operacional. Então utilizei o -f para realizar um flush, mas recebi a mensagem abaixo: # multipath -f /dev/oracleasm/disks/HITACHI33 Jun 22 08:43:21 | must provide a map name to remove Utilizei o comando do ASM para verificar o mapeamento do disco....