Подтвердить что ты не робот

Удаление подключенного пользователя из схемы базы данных Oracle 10g

Есть ли лучший способ принудительно отключить всех пользователей от схемы базы данных Oracle 10g, чем перезапустить службы баз данных Oracle?

У нас есть несколько разработчиков, использующих SQL Developer, подключающихся к одной и той же схеме на одном сервере Oracle 10g. Проблема в том, что, когда мы хотим отказаться от схемы для ее восстановления, неизбежно кто-то все еще подключен, и мы не можем отказаться от схемы базы данных или пользователя, пока кто-то все еще подключен.

Точно так же мы не хотим отбрасывать все подключения к другим схемам, потому что другие люди могут быть подключены и тестироваться с помощью этих схем.

Кто-нибудь знает быстрый способ решить эту проблему?

4b9b3361

Ответ 1

Чтобы найти сеансы, как использование DBA

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

Если вы хотите убедиться, что только для сеансов, использующих SQL Developer, вы можете добавить and program = 'SQL Developer'. Если вы хотите только убить сеансы, принадлежащие конкретному разработчику, вы можете добавить ограничение на os_user

Затем убейте их

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

(например, alter system kill session '39,1232')

Запрос, создающий готовые команды-убийцы, может быть

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

Это приведет к возврату одного оператора убийства за сеанс для этого пользователя - что-то вроде:

alter system kill session '375,64855';

alter system kill session '346,53146';

Ответ 2

Найти существующие сеансы в БД с помощью этого запроса:

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

вы увидите что-то вроде ниже. Oracle Sessions

Затем выполните ниже запрос со значениями, извлеченными из полученных выше результатов.

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

Пример: ALTER SYSTEM KILL SESSION '93, 943 ';

Ответ 3

Мое предложение - это простой анонимный блок:

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

Ответ 4

Убедитесь, что вы изменили систему и включили ограниченный сеанс перед тем, как убить их, или они быстро вернутся в базу данных, прежде чем завершить свою работу.

Ответ 5

просто используйте SQL:

disconnect; 

conn tiger/scott as sysdba;

Ответ 6

Вы пробовали ALTER SYSTEM KILL SESSION? Получите SID и SERIAL # из V $SESSION для каждого сеанса в данной схеме, затем выполните

ALTER SCHEMA KILL SESSION sid, серийный номер;;

Ответ 7

Только мои два цента: лучший способ (но, вероятно, не самый быстрый в краткосрочной перспективе), вероятно, будет для каждого разработчика работать над собственным экземпляром базы данных (см. правило №1 для работы с базой данных).

Установка Oracle на станции-разработчике стала без проблем с Oracle Database 10g Express Edition.