jueves, 9 de julio de 2026

Oracle Enterprise Edition "** MISSING: 6604574/6604574" en nombre de objeto en estadísticas del AWR.

Tenemos un script para validar el crecimiento de objetos dentro de la base de datos en los últimos 6 días y cuando ejecutamos la consulta nos devuelve la siguiente salida.

OWNER                     SEGMENT_NAME                        SEGMENT_TYPE               GROWTH_MB------------------------- ----------------------------------- -------------------- ---------------
INTEGRACION               LOG                                 TABLE                       1,714.20
FCUBSLIVE                 GWTB_MSG_OUT_LOG                    TABLE                       1,258.01
INTEGRACION               SYS_LOB0000989853C00006$$           LOB                           832.05
FCUBSLIVE                 GWTB_MSG_IN_LOG                     TABLE                         750.85
INTEGRACION               TRACK_ENTRY_REQUEST_INTEGRACION_HIS TABLE                         733.66
                          TORY

** MISSING **             ** MISSING: 6604574/6604574         UNDEFINED                     684.62
** MISSING **             ** MISSING: 6618097/6618097         UNDEFINED                     684.56
** MISSING **             ** MISSING: 6611295/6611295         UNDEFINED                     681.16
** MISSING **             ** MISSING: 6624752/6624752         UNDEFINED                     615.75
** MISSING **             ** MISSING: 6631455/6631455         UNDEFINED                     613.48
** MISSING **             ** MISSING: 6597842/6597842         UNDEFINED                     612.60
FCUBSLIVE                 PK01_ICTB_DEPOSIT_EXECUTION_LO      INDEX                         355.53
** MISSING **             ** MISSING: 6591054/6591054         UNDEFINED                     342.05
FCUBSLIVE                 IDX_CLTP_AMT_DUE                    INDEX                         304.77
FCUBSLIVE                 PK_CLTP_ACCOUNT_COMP_CALC           INDEX                         286.41
FCUBSLIVE                 PK01_STTB_FIELD_LOG                 INDEX                         273.21
SYS                       I_SCHEDULER_JOB_RUN_DETAILS         INDEX                         261.97
** MISSING **             ** MISSING: 6576422/6576422         UNDEFINED                     256.87
** MISSING **             ** MISSING: 6584108/6584108         UNDEFINED                     243.75
SYS                       SCHEDULER$_INSTANCE_PK              INDEX                         234.50

20 rows selected.
El script en cuestión es el siguiente, asociado a una vista para poderlo ejecutar más fácil:
create view v_tablas_mas_crecimiento as
WITH snaps AS (
    SELECT
        MIN(snap_id) AS begin_snap,
        MAX(snap_id) AS end_snap
    FROM dba_hist_snapshot
    WHERE begin_interval_time >= SYSDATE - 6
),
seg_begin AS (
    SELECT
        obj.owner,
        obj.object_name AS segment_name,
        obj.object_type AS segment_type,
        ss.space_used_delta
    FROM dba_hist_seg_stat ss
    JOIN dba_hist_seg_stat_obj obj
      ON obj.dbid = ss.dbid
     AND obj.obj# = ss.obj#
     AND obj.dataobj# = ss.dataobj#
    JOIN snaps sn
      ON ss.snap_id = sn.begin_snap
),
seg_growth AS (
    SELECT
        obj.owner,
        obj.object_name AS segment_name,
        obj.object_type AS segment_type,
        SUM(ss.space_used_delta) AS growth_bytes
    FROM dba_hist_seg_stat ss
    JOIN dba_hist_seg_stat_obj obj
      ON obj.dbid = ss.dbid
     AND obj.obj# = ss.obj#
     AND obj.dataobj# = ss.dataobj#
    WHERE ss.snap_id BETWEEN (SELECT begin_snap FROM snaps)
                         AND (SELECT end_snap FROM snaps)
    GROUP BY obj.owner, obj.object_name, obj.object_type
)
SELECT *
FROM (
    SELECT
        owner,
        segment_name,
        segment_type,
        ROUND(growth_bytes/1024/1024,2) AS growth_mb
    FROM seg_growth
    WHERE growth_bytes > 0
    ORDER BY growth_bytes DESC
)
WHERE ROWNUM <= 20;

select * from  "V_TABLAS_MAS_CRECIMIENTO";

Qué son estos datos en el nombre del objeto  ** MISSING: 6591054/6591054 ?

Vamos a explicarlo.

En Oracle, cuando estás consultando crecimiento histórico (normalmente desde AWR usando DBA_HIST_SEG_STAT y DBA_HIST_SEG_STAT_OBJ) y en lugar del nombre del objeto aparece algo como:
** MISSING: 6624752/6624752

significa que AWR tiene estadísticas históricas de un segmento, pero ya no puede resolver el objeto asociado en el diccionario histórico de objetos.

El formato corresponde normalmente a:

** MISSING: <OBJ#>/<DATAOBJ#>

En tu caso:

** MISSING: 6624752/6624752
| |
| +-- DATA_OBJECT_ID
|
+---------- OBJECT_ID

¿Por qué ocurre?

Oracle guarda actividad de segmentos en:

DBA_HIST_SEG_STAT
|
| OBJ#
| DATAOBJ#
v
DBA_HIST_SEG_STAT_OBJ

Cuando intenta hacer el JOIN:

ss.obj# = obj.obj#
and ss.dataobj# = obj.dataobj#

y no encuentra la descripción histórica del objeto, muestra:

** MISSING

Causas más comunes

1. La tabla fue eliminada

Ejemplo:

CREATE TABLE TEMP_CARGA AS SELECT ...
DROP TABLE TEMP_CARGA PURGE;

El AWR todavía conserva:

  • lecturas
  • escrituras
  • crecimiento
  • bloques modificados

pero el objeto ya no existe.


2. TRUNCATE de la tabla

Muy frecuente.

Al hacer:

TRUNCATE TABLE FACTURAS;

Oracle cambia:

DATA_OBJECT_ID

Ejemplo:

Antes:

OBJECT_ID       6624752
DATA_OBJECT_ID 6624752

Después:

OBJECT_ID       6624752
DATA_OBJECT_ID 6639011

Para AWR parece otro segmento.


3. Operaciones MOVE / REBUILD

Ejemplos:

ALTER TABLE CLIENTES MOVE;

ALTER INDEX IDX_CLIENTES REBUILD;

Generan nuevo DATAOBJ#.


4. Objetos temporales creados por procesos

Muy común con:

  • Data Pump
  • Cargas masivas
  • ETL
  • cargas batch
  • APEX
  • reportes
  • particiones temporales

Cómo intentar identificarlo

Primero buscar si todavía existe:

SELECT owner,
object_name,
object_type,
object_id,
data_object_id,
created,
last_ddl_time
FROM dba_objects
WHERE object_id = 6624752
OR data_object_id = 6624752;

Si no devuelve nada, ya desapareció.


Buscarlo en recycle bin:

SELECT owner,
original_name,
object_name,
type,
droptime
FROM dba_recyclebin
WHERE base_object = 6624752;

También puedes revisar si AWR todavía tiene rastros:

SELECT *
FROM dba_hist_seg_stat_obj
WHERE obj# = 6624752
OR dataobj# = 6624752;

No necesariamente significa corrupción ni problema de diccionario.

No hay comentarios:

Publicar un comentario

Te agradezco tus comentarios. Te esperamos de vuelta.

Todos los Sábados a las 8:00PM