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