There is no guaranteed way but you may get lucky with one or more of ash,
See Doug Burns's series, or skip to the end:
Sent from my Windows Phone
From: Luis Santos<mailto:lsantos@xxxxxxxxx>
Sent: 08/09/2016 14:59
Subject: Holder query in lock
Sometimes we have some INACTIVE sessions holding another sessions due locks.
It´s easy of course to find discover the lock tree, and also the object
involved in query.
But is there a simple way (without any trace) to discover to the SQL_ID that
locked the rows related to blocker lock?
When the locker session runs the statement (usually an update) that locks these
rows this same session, generally, runs several other statements (usually
SELECTs) and after them becomes into SQL*Net message to client. So the current
(and previous) SQL_ID for the locker session is useless.
We have mainly 184.108.40.206 RDBMS versions.