Usuwanie podłączonego użytkownika ze schematu bazy danych Oracle 10g

Czy istnieje lepszy sposób na silne odłączenie wszystkich użytkowników od schematu bazy danych Oracle 10g niż ponowne uruchamianie usług bazodanowych Oracle?

Mamy kilku programistów używających SQL Developer łączących się z tym samym schematem na jednym serwerze Oracle 10g. Problem polega na tym, że gdy chcemy upuścić schemat, aby go odbudować, nieuchronnie ktoś jest nadal podłączony i nie możemy upuścić schematu bazy danych lub użytkownika, gdy ktoś jest nadal podłączony.

Z tego samego powodu, nie chcesz rzucić wszystkie połączenia do innych schematów, ponieważ inne osoby mogą być nadal podłączone i testowanie z tych schematów.

Ktoś zna jakiś szybki sposób na rozwiązanie tego problemu?

 55
Author: Joshua Starner, 2008-09-17

7 answers

Aby znaleźć sesje, jako dba użyj

select sid,serial# from v$session where username = '<your_schema>'

Jeśli chcesz mieć pewność, że tylko sesje, które używają SQL Developer, możesz dodać and program = 'SQL Developer'. Jeśli chcesz zabić tylko sesje należące do konkretnego dewelopera, możesz dodać ograniczenie na os_user

Następnie zabij ich

alter system kill session '<sid>,<serial#>'

(np. alter system kill session '39,1232')

Zapytaniem, które tworzy gotowe kill-statements może być

select 'alter system kill session ''' || sid || ',' || serial# || ''';' from v$session where username = '<your_schema>'

To będzie zwraca jedną instrukcję kill na sesję dla tego użytkownika-coś w stylu:

alter system kill session '375,64855';

alter system kill session '346,53146';

 99
Author: Sten Vesterli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 19:33:17

Znajdź istniejące sesje do DB używając tego zapytania:

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';

Zobaczysz coś takiego jak poniżej. Sesje Oracle

Następnie uruchom poniższe zapytanie z wartościami wyodrębnionymi z powyższych wyników.

ALTER SYSTEM KILL SESSION '<put above s.sid here>,<put above s.serial# here>';

Ex: ALTER SYSTEM KILL SESSION '93,943';

 16
Author: Chand Priyankara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-20 07:59:38

Moja propozycja to taki prosty anonimowy blok:

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;
/
 7
Author: RLapinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-10 13:29:42

Upewnij się, że zmienisz system i włączysz ograniczoną sesję, zanim je zabijesz, albo szybko zalogują się z powrotem do bazy danych, zanim skończysz pracę.

 1
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-23 19:04:05

Wystarczy użyć SQL:

disconnect; 

conn tiger/scott as sysdba;
 1
Author: LinuxQuestions.org,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-23 22:05:15

Tylko moje dwa grosze : najlepszym sposobem (ale prawdopodobnie nie najszybszym w krótkiej perspektywie) byłoby prawdopodobnie, aby każdy programista pracował nad własną instancją bazy danych (zobacz rule #1 for database work ).

Instalacja Oracle na stacji deweloperskiej stała się nie do pomyślenia od Oracle Database 10g Express Edition.

 0
Author: Mac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 15:50:53

Próbowałeś Alter SYSTEM KILL SESSION? Pobierz SID i SERIAL# z V$SESSION dla każdej sesji w podanym schemacie, następnie wykonaj

ALTER SCHEMA KILL SESSION sid,serial#;

 0
Author: Dave Costa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 18:40:12