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