Принудительное завершение сеансов Oracle (ALTER SYSTEM KILL SESSION)
15 марта 2011 Нет комментариев
Скрипт выборки зависших сеансов. Значения подставляйте, те которые Вам необходимы. В моем случае небольшое ограничение по времени и сессии всех пользователей кроме пользователя SYS.
SELECT v.SID, v.SERIAL# serial, w.SECONDS_IN_WAIT FROM v$session_wait w, v$session v WHERE v.STATUS IN ('ACTIVE') AND nvl(v.SCHEMANAME,'xx')!='SYS' AND v.LAST_CALL_ET > 3600 AND w.SECONDS_IN_WAIT > 115500 AND w.SID = v.sid;
Завершить сеансы можно SQL предложением ALTER SYSTEM KILL SESSION.
Полученные значения SID и SERIAL# указываются в SQL предложении:
ALTER SYSTEM KILL SESSION 'sid,serial#';
Например, для завершения сеанса пользователя TEST1 SQL предложение будет выглядеть так:
ALTER SYSTEM KILL SESSION '671, 26498';
В некоторых ситуациях процесс oracle не может быть завершен немедленно. В таких случаях сеанс помечается на прерывание. И будет уничтожен, как только будет возможно.
ALTER SYSTEM KILL SESSION является самым безопасным способом прекращения сеанса Oracle.
В oracle есть возможность завершить сеанс форсировано, добавлением ключевого слова IMMEDIATE:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
Например, для завершения сеанса пользователя TEST1 из вышеприведенного примера, команда будет выглядеть так:
ALTER SYSTEM KILL SESSION '671, 26498' IMMEDIATE;
Автоинкрементное поле в Oracle
15 марта 2011 Нет комментариев
Метки:
Oracle
SEQUENCE
автоинкрементное поле
В СУБД Oracle отсутствует такое понятия как “автоинкрементное поле”, для создания уникального значения поля используется последовательность SEQUENCE.
CREATE sequence sq_test;Следующее последовательное уникальное значение может быть получено напрямую или через триггер.
CREATE TABLE test ( test_id number(38) , code varchar2(16) , constraint pk_test PRIMARY KEY (test_id) ); CREATE OR REPLACE TRIGGER tbiur_test before INSERT OR UPDATE ON test FOR each row begin IF :new.test_id IS NULL then SELECT sq_test.NEXTVAL INTO :new.test_id FROM dual; end IF; end; / -- Прямое использование последовательности INSERT INTO test (test_id, code) VALUES (sq_test.NEXTVAL, 'One'); -- Нахождение значения первичного ключа в триггере. INSERT INTO test (code) VALUES ('Two'); INSERT INTO test (test_id, code) VALUES (NULL, 'Three');
Дополнительно: получение значения поля (любого, не только ключевого и/или сгенеренного из последовательности) после добавления одиночной записи (через INSERT INTO .. VALUES) через RETURN[ING]. (VAR – команда для SQL*Plus, деклалирующая переменную test_id)
var test_id number INSERT INTO test (test_id, code) VALUES (sq_test.NEXTVAL, 'One') RETURN test_id INTO :test_id; INSERT INTO test (code) VALUES ('Two') RETURN test_id INTO :test_id;
При использовании конструкции INSERT INTO .. SELECT опция RETURN[ING] недоступна.
Меня зовут Дмитрий Максютин, с 2005 года я создаю сайты и занимаюсь их продвижением и раскруткой.
Последние комментарии