KILL SESSION и DISCONNECT SESSION
Решил разобраться каким способом более “правильно” убивать сессию, и какую при этом получит ошибку клиент.
с активной транзакцией | без активной транзакции | |
---|---|---|
ALTER SYSTEM KILL SESSION 'integer1, integer2'; | Сессия помечается, как killed. Ожидается активность от клиента. Если клиент проявляет активность, то ему возвращаются ошибки. | Сессия помечается, как killed. Ожидается активность от клиента. Если клиент проявляет активность, то ему возвращаются ошибки. |
ALTER SYSTEM KILL SESSION 'integer1, integer2' IMMEDIATE; | Сессия убивается. Если клиент проявляет активность, то ему возвращаются ошибки. ORA-03113: end-of-file on communication channel | Сессия убивается. Если клиент проявляет активность, то ему возвращаются ошибки. ORA-03113: end-of-file on communication channel |
ALTER SYSTEM DISCONNECT SESSION 'integer1, integer2' POST_TRANSACTION; | Ожидается ответ пользователя. Клиент может продолжить работать в той сессии с той же транзакцией(продолжить изменять данные). Если клиент выполнит commit, то данные будут зафиксированы. После этого клиент будет отсоединен, сессия будет завершена. Если клиент после этого проявит активность, то ему будут возращены ошибка. ORA-03114: not connected to ORACLE | Сессия помечается, как killed. Ожидается активность от клиента. Если клиент проявляет активность, то ему возвращаются ошибки. |
ALTER SYSTEM DISCONNECT SESSION 'integer1, integer2' IMMEDIATE; | Клиент будет отсоединен, сессия будет завершена. Если клиент проявляет активность, то ему возвращаются ошибки. ORA-03113: end-of-file on communication channel | Клиент будет отсоединен, сессия будет завершена. Если клиент проявляет активность, то ему возвращаются ошибки. ORA-03113: end-of-file on communication channel |
ALTER SYSTEM DISCONNECT SESSION 'integer1, integer2' POST_TRANSACTION IMMEDIATE; | Опция IMMEDIATE игнорируется. Ожидается ответ пользователя. Клиент может продолжить работать в той сессии с той же транзакцией(продолжить изменять данные). Если клиент выполнит commit, то данные будут зафиксированы. После этого клиент будет отсоединен. Если клиент после этого проявит активность, то ему будут возращены ошибка. ORA-03114: not connected to ORACLE | Клиент будет отсоединен, сессия будет завершена. Если клиент проявляет активность, то ему возвращаются ошибки. ORA-03113: end-of-file on communication channel |
Одним цветом выделены ячейки, когда результат команды одинаков.
Подробнее можно почитать здесь.SQL Statements: ALTER SESSION to ALTER SYSTEM, 3 of 3
Резюме: если надо быстро и надежно убить сессию, то для этого идеально подходит команда ALTER SYSTEM KILL SESSION 'integer1, integer2' IMMEDIATE;
Читать полностью
Мой список блогов