it-swarm-pt.tech

Removendo um usuário conectado de um esquema de banco de dados Oracle 10g

Existe uma maneira melhor de desconectar com força todos os usuários de um esquema de banco de dados Oracle 10g do que reiniciar os serviços de banco de dados Oracle?

Temos vários desenvolvedores que usam o SQL Developer se conectando ao mesmo esquema em um único servidor Oracle 10g. O problema é que, quando queremos descartar o esquema para reconstruí-lo, inevitavelmente alguém ainda está conectado e não podemos descartar o esquema do banco de dados ou o usuário enquanto alguém ainda está conectado.

Da mesma forma, não queremos descartar todas as conexões com outros esquemas porque outras pessoas ainda podem estar conectadas e testando com esses esquemas.

Alguém sabe uma maneira rápida de resolver isso?

61
Joshua Starner

Para encontrar as sessões, como DBA, use

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

Se quiser ter certeza de obter apenas as sessões que usam o SQL Developer, você pode adicionar and program = 'SQL Developer'. Se você quiser apenas matar sessões pertencentes a um desenvolvedor específico, poderá adicionar uma restrição em os_user

Então mate-os com

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

(por exemplo, alter system kill session '39,1232')

Uma consulta que produz declarações de execução prontas pode ser

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

Isso retornará uma declaração de morte por sessão para esse usuário - algo como:

alter system kill session '375,64855';

alter system kill session '346,53146';

105
Sten Vesterli

Encontre sessões existentes no banco de dados usando esta consulta:

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

você verá algo como abaixo. Oracle Sessions

Em seguida, execute a consulta abaixo com os valores extraídos dos resultados acima.

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

Ex: ALTER SESSÃO DE MORTE DO SISTEMA '93, 943 ';

17
Chand Priyankara

minha proposta é este bloco anônimo simples:

DECLARE
   lc_username   VARCHAR2 (32) := 'user-name-to-kill-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;
/
9
RLapinski

Certifique-se de alterar o sistema e ativar a sessão restrita antes de matá-los ou eles voltarão rapidamente ao banco de dados antes de concluir seu trabalho.

1
tc

basta usar SQL:

disconnect; 

conn tiger/scott as sysdba;
1
LinuxQuestions.org

Você já experimentou a ALTER SYSTEM KILL SESSION? Obtenha o SID e o número de série de V $ SESSION para cada sessão no esquema fornecido e faça

ALTER SCHEMA KILL SESSION sid, número de série;

0
Dave Costa

Apenas meus dois centavos: a melhor maneira (mas provavelmente não a mais rápida no curto prazo) seria provavelmente cada desenvolvedor trabalhar em sua própria instância de banco de dados (consulte regra nº 1 para trabalho de banco de dados ).

Instalar o Oracle em uma estação de desenvolvedor tornou-se fácil desde Oracle Database 10g Express Edition .

0
Mac