SELECT sh.order_number
, do.subobject_name
, do.data_object_id
FROM oe.so_headers_all sh
, dba_objects do
WHERE do.data_object_id =
DBMS_ROWID.ROWID_OBJECT(sh.rowid)
AND sh.order_number = '123456'
ORDER_NUMBER SUBOBJECT_NAME DATA_OBJECT_ID
------------ -------------- --------------
123456 PART1 15107
El paquete estándar PLSQL DBMS_ROWID resulta de mucha utilidad para ver como los datos están organizados dentro de una tabla e identificar donde están almacenados los distintos registros de la misma. Veamos a continuación otro ejemplo de uso del paquete DBMS_ROWID.
SELECT sh.order_number
, dt.tablespace_name
, dt.status
FROM oe.so_headers_all sh
, dba_data_files ddf
, dba_tablespaces dt
WHERE ddf.tablespace_name = dt.tablespace_name
AND ddf.relative_fno =
DBMS_ROWID.ROWID_RELATIVE_FNO(sh.rowid)
AND ddf.file_id =
DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO
(sh.rowid, 'OE', 'SO_HEADERS_ALL')
AND sh.order_number = '123456'
ORDER_NUMBER TABLESPACE_NAME STATUS
------------ --------------- ---------
123456 RESDATOS ONLINE
En este caso hemos utilizado el paquete estándar PL/SQL DBMS_ROWID para obtener, para un determinado ROWID, el número de bloque y el número de fichero en la base de datos Oracle, con estos valores podremos consultar en la vista DBA_DATA_FILES el nombre del TABLESPACE en el que está almacenado el registro en cuestión y después, utilizando la vista DBA_TABLESPACES, podremos determinar el estado de dicho TABLESPACE.
0 comentarios:
Publicar un comentario en la entrada