Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2599 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Une procédure PL/SQL continue a tourné malgré l'arret de SQL plus

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Une procédure PL/SQL continue a tourné malgré l'arret de SQL plus

n°1231535
molarisapa
Posté le 26-10-2005 à 14:30:34  profilanswer
 

Bonjour
quelque chose me turlupine.  :jap:  
 
j'ai une procedure "test" comme suit:
PROCEDURE     TEST IS
BEGIN
    delete from SIB_LOG;
    commit;
    WRITELOG ('A');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('B');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('C');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('D');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('E');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('F');
    commit;
    dbms_lock.sleep(3);
    WRITELOG ('G');
    commit;
EXCEPTION WHEN OTHERS THEN RAISE;
END;
 
 
WRITELOG est un sous procedure qui ecrit dans une table de la base.
 
si j'excecute la procédure avec SQL+ de la maniere suivante:
BEGIN
  test;
EXCEPTION
WHEN OTHERS THEN
  dbms_output.put_line('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM);
RAISE;
END;
 
si parallèlement, je fais des requetes select dans ma table WRITELOG, je voit bien que la procédure "test" est en train de travailler... Cela dit, si je quitte SQL+ (Ctr-Alt_Suppr par exemple), et bien ma procédure test continue malgré tout a etre excécute!!!!! (si je fais des select sur la table WRITELOG, je vois que de nouvelles lignes sont inserrée !!!!
 
comment cela est possible??? comme alors pouvons nous arreter l'excecution d'une procédure????
 
merci pour vos réponses   :bounce:  :bounce:

mood
Publicité
Posté le 26-10-2005 à 14:30:34  profilanswer
 

n°1231573
Beegee
Posté le 26-10-2005 à 14:57:39  profilanswer
 

Tu ne quittes pas SQLPLUS, tu le killes ... l'exécution va se poursuivre quelque temps, jusqu'à un timeout Oracle, donc c'est logique de voir des INSERTs se faire encore ...
 
En fait, le processus SQLPLUS et le processus qui tourne sur la base sont 2 process distincts, tu ne tues que le processus SQLPLUS.

n°1231581
molarisapa
Posté le 26-10-2005 à 15:01:33  profilanswer
 

merci beegee
 
ok. et ya til donc des commandes pour killer le processus? peut t-on regler le timeout oracle (par exemple le regler a 1seconde)?  
 
 

n°1231594
Beegee
Posté le 26-10-2005 à 15:24:49  profilanswer
 

Quelques infos ici :
 
http://home.planet.nl/~heuve345/databases/oraclea.html
 
Q: I’ve powered off my PC while a SQL statement was running. Although my PC is powered off, the table on which the SQL statement was running is still locked. What should I do?
 
A: To prevent this:
Some OS’s automatically detect when an client has died. In this case, you don’t have to do anything to automatically kill an Oracle process.
However, there are OS’s (like Windows NT) which don’t have this feature; in that case try the following.
 
   1. Open the file \ORANT\NETWORK\ADMIN\SQLNET.ORA on the server with a text editor (e.g. notepad).
   2. Change or add:
      sqlnet.expire_time = n
      in which n is a positive integer unequal to zero.
   3. Save the file and close the editor.
   4. Reboot the server.
 
Every n minutes, the server will send a small packet to the client,. If the server doesn’t get an answer, it assumes the client is dead, and it will ROLLBACK its transactions and then kill the session).
To kill a process:
 
   1. Make sure all the users are logged out.
   2. Start any SQL tool you like.
   3. Connect to the database as user sys or system.
   4. Execute the following query.
      SELECT * FROM v$session;
   5. Note down the SID and SERIAL# of the remaining sessions.
   6. For every session you want to kill, execute the following statement.
      ALTER SYSTEM KILL SESSION '<SID>,<SERIAL#>';
      Don’t forget the qoutes!
   7. Query v$session again. The sessions should either have been disappeared or have the STATUS 'KILLED'.


Message édité par Beegee le 26-10-2005 à 15:26:27
n°1231683
molarisapa
Posté le 26-10-2005 à 16:46:42  profilanswer
 

merci  
 
j'ai utilisé la methode du alter system kill session. c'est excactement ce que je recherchais
 
merci beegee

n°1231724
sircam
I Like Trains
Posté le 26-10-2005 à 17:29:13  profilanswer
 

Attention cependant : d'après mon expérience, le process OS associé à la session Oracle n'est pas forcément tué immédiatement. "pmon" est chargé du nettoyage mais je n'en sais pas plus.
 
A l'aide de V$SESSION et de V$PROCESS (faire une jointure), tu peux retrouver le PID sur l'OS et faire un ps -p pour vérifier.
 
A expérimenter, à moins que beegee en sache un peu plus.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Une procédure PL/SQL continue a tourné malgré l'arret de SQL plus

 

Sujets relatifs
[ASP - Sql Server 2000] Défi pour trouver une requête complexetaille d'une table en SQL
[Résolu][SQL] PB de requete (2en 1 ? comme le ...) trop dur pour moi ![SQL] ALTER TABLE sur table liée ?? ou solution de contournement plz ?
Arborescence en SQLMettre le nom d'une table en paramètre dans un script Sql
[Résolu][SQL] Convertion de valeurs dans une requete SQL[SQL/Access] Problème de rafraichissement de zone de liste
SQL Transac OptimisationExécuter une chaîne de caractère en PL/SQL
Plus de sujets relatifs à : Une procédure PL/SQL continue a tourné malgré l'arret de SQL plus


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR