Para saber o que está rolando no momento :
Select p.spid, s.sid, s.serial#, s.username, s.osuser, s.status, s.server, s.logon_time,
TO_CHAR (TRUNC (last_call_et / 3600), '009') || ':' ||
Case When TRUNC (last_call_et / 3600) >= 1 Then
TO_CHAR (MOD ((last_call_et - (3600 * TRUNC (last_call_et / 3600))) / 3600, 2) * 60, '09')
Else
TO_CHAR (MOD (last_call_et / 3600, 2) * 60, '09')
End inatividade, s.machine, s.program, p.pga_used_mem, p.pga_alloc_mem, p.pga_freeable_mem, pga_max_mem, sql.sql_text
From v$session s, v$process p, (Select distinct sql_text, address
From v$sql sql ) sql
Where s.username is not null
And status = 'ACTIVE'
And s.paddr = p.addr (+)
And s.sql_address = sql.address (+)
Order by s.last_call_et desc
Agora, se algum outro usuário que não o dono do objeto esteja alterando alguma procedure, você pode rever as permissões…
Se todos tem acesso único, não tem como saber quem alterou, creio que o Oracle não guarda essa informação…