Hace unas semanas me llegó una consulta sobre PL/SQL en la que se me preguntaba si era posible conocer, utilizando una consulta SQL, el nombre de la partición en la que se encontraba almacenado un determinado registro de una tabla. El paquete estándar PLSQL DBMS_ROWID nos puede ayudar a obtener esta información mediante la extracción del ROWID_OBJECT que identifica de manera única el segmento donde se encuentran los datos. Después bastará que asociemos este identificador con una de las vistas XXX_OBJECTS (donde XXX puede ser DBA, ALL o USER) para obtener el nombre de la partición (ver ejemplo a continuación).
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