3 sessões selvagens cada uma obteve um bloqueio exclusivo de linha na mesma tabela:
SELECT * FROM DBA_DML_LOCKS;
Como posso remover o bloqueio sem ser administrador?
Se eu fosse admin listaria (SID, SERIAL#) as sessões que possuem os bloqueios:
SELECT SID,SERIAL#
FROM V$SESSION
WHERE SID IN (SELECT SESSION_ID
FROM DBA_DML_LOCKS );
Então execute:
ALTER SYSTEM KILL SESSION 'SID,SERIALl#';
por exemplo:
ALTER SYSTEM KILL SESSION '115,1931';
Mas, como não sou administrador, recebo um erro de privilégio insuficiente :
ALTER SYSTEM KILL SESSION '115,1931'
Error report -
SQL Error: ORA-01031: insufficient privileges
01031. 00000 - "insufficient privileges"
*Cause: An attempt was made to perform a database operation without
the necessary privileges.
*Action: Ask your database administrator or designated security
administrator to grant you the necessary privileges
Estou executando o Oracle 11gR2 11.2.0.3.
Se isso acontecer com frequência, existe a opção de escrever um pacote ou um procedimento armazenado para isso. O proprietário do pacote precisaria do privilégio de sistema alter e o pacote deveria ser criado com direitos de definidor.
Você só precisa executar privilégios nesse pacote e alimentar o procedimento de interrupção de sessão com os parâmetros corretos.
Ainda há uma boa chance de que os processos zumbis continuem em execução até que o usuário final que estava executando os processos eliminados tente fazer qualquer coisa. Esses zumbis podem ser mortos pelo sistema operacional. Para encontrar aqueles processados, antes de matar, leia seus pids de sistema juntando v$session com v$process. Uma outra opção é limpar regularmente esses processos órfãos encontrando processos em v$process que não tenham sessão em v$session.