Existe-t-il un meilleur moyen de déconnecter de force tous les utilisateurs d’un schéma de firebase database Oracle 10g que de redémarrer les services de firebase database Oracle?
Plusieurs développeurs utilisent SQL Developer pour se connecter au même schéma sur un seul serveur Oracle 10g. Le problème est que lorsque nous voulons supprimer le schéma pour le reconstruire, quelqu’un est inévitablement toujours connecté et nous ne pouvons pas supprimer le schéma de la firebase database ou l’utilisateur alors que quelqu’un est encore connecté.
De même, nous ne voulons pas supprimer toutes les connexions vers d’autres schémas, car d’autres personnes peuvent encore être connectées et tester avec ces schémas.
Quelqu’un sait-il un moyen rapide de résoudre ce problème?
Pour trouver les sessions, en tant qu’utilisateur DBA
select sid,serial# from v$session where username = '
'
Si vous voulez vous assurer que vous obtenez uniquement les sessions qui utilisent SQL Developer, vous pouvez append and program = 'SQL Developer'
. Si vous souhaitez uniquement supprimer des sessions appartenant à un développeur spécifique, vous pouvez append une ressortingction sur os_user
Puis tuez-les avec
alter system kill session '
, ' (p.ex.
alter system kill session '39,1232'
)
Une requête qui produit des instructions de suppression prêtes à l’emploi pourrait être
select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = '
'
Cela retournera une instruction de suppression par session pour cet utilisateur – quelque chose comme:
alter system kill session '375,64855';
alter system kill session '346,53146';
Recherchez les sessions existantes dans DB en utilisant cette requête:
SELECT s.inst_id, s.sid, s.serial#, p.spid, s.username, s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND';
vous verrez quelque chose comme ci-dessous.
Ensuite, exécutez ci-dessous la requête avec les valeurs extraites des résultats ci-dessus.
ALTER SYSTEM KILL SESSION ', ';
Ex: ALTER SYSTEM KILL SESSION ’93, 943 ‘;
ma proposition est ce simple bloc anonyme:
DECLARE lc_username VARCHAR2 (32) := 'your user name here'; BEGIN FOR ln_cur IN (SELECT sid, serial# FROM v$session WHERE username = lc_username) LOOP EXECUTE IMMEDIATE ('ALTER SYSTEM KILL SESSION ''' || ln_cur.sid || ',' || ln_cur.serial# || ''' IMMEDIATE'); END LOOP; END; /
Veillez à modifier le système et à activer la session restreinte avant de les tuer ou à vous reconnecter rapidement à la firebase database avant de terminer votre travail.
utilisez simplement SQL:
disconnect; conn tiger/scott as sysdba;
Juste mes deux cents: le meilleur moyen (mais probablement pas le plus rapide à court terme) serait que chaque développeur travaille sur sa propre instance de firebase database (voir la règle n ° 1 pour le travail de firebase database ).
L’installation d’Oracle sur une station de développement est devenue une évidence depuis Oracle Database 10g Express Edition .
Avez-vous essayé ALTER SYSTEM KILL SESSION? Récupère les SID et SERIAL # de V $ SESSION pour chaque session du schéma donné, puis fais
ALTER SCHEMA KILL SESSION sid , numéro de série ;