1

Ich führe eine gespeicherte Prozedur auf der SQL Server-Seite aus. In einem Teil dieses Verfahrens, eine Remote-Oracle-Prozedur aufgerufen wirdOracle-Prozedur von SQL Server-Prozedur abbrechen, wenn abgebrochen wird

execute (' 
begin 
    oraprocname(procparams); 
end;') 
at remotedb. 

Heute brauchte ich die Ausführung dieses Verfahrens zu stoppen, so habe ich verwenden Abfrage auf SQL Server-Seite gelöscht werden.

Das Problem ist, dass SQL Server war nicht in der Lage, die Prozedur zu stoppen, bis die Remote-Prozedur gestoppt wurde (ich musste es von remotedb Seite zu töten).

Gibt es irgendeine Möglichkeit, die Oracle-Seite irgendwie zu "informieren", dass die Prozedur von einer gespeicherten Prozedur auf der SQL Server-Seite abgebrochen werden muss?

Antwort

0

Ihr Problem besteht darin, dass Sie nach dem Senden eines Befehls an Oracle erst nach dem Ende des Befehls zurückkehren.

Also, wenn execute() at remotedb hat bestimmte Parameter, die den Anruf in einem Unterprozess, der vom Aufrufer gestoppt werden kann (unwahrscheinlich, aber warum nicht?), Müssen Sie Ihre eigene Oracle-Funktion, die Ihre lang-running beenden wird Session.

Also meine Lösung ist, Sie erstellen eine andere Oracle-Funktion oder eine Prozedur, um Ihre lang laufende Sitzung zu beenden, und rufen Sie es aus einem separaten Prozess.

Erhalten Sie Ihren laufenden Sitzungen:

select 
    sid 
    , serial# 
from 
    v$session 
where 
     username='<your user>' 
    and status = 'ACTIVE' 

oben info Verwenden Sie dann, es zu töten, mit EXECUTE IMMEDIATE ALTER SYSTEM:

begin 
    EXECUTE IMMEDIATE 'ALTER SYSTEM kill session ''<sid>,<serial#>'' '; 
end; 
/
+0

Hallo, Danke für die Antwort. Das Problem ist, dass ich keinen Zugriff auf globale Ansichten wie v $ session ... habe. Mein Benutzer auf der Oracle-Site hat nur Lese- und Ausführungsrechte für verschiedene Prozeduren:/ – Damian

+0

Dann müssen Sie möglicherweise eine solche Prozedur erstellt haben Sie auf der Remote-Datenbank und führen Sie die Berechtigung aus, die Ihrem Benutzer gewährt wurde. –

Verwandte Themen