1.procedure
CREATE OR REPLACE
PROCEDURE kill_session
IS
v_session_id number;
v_serial number;
v_cursor_number number;
cursor c_locked_session is
select a.session_id,b.serial# from v$locked_object a,v$session b where a.session_id=b.sid;
BEGIN
open c_locked_session;
loop
fetch c_locked_session into v_session_id,v_serial;
exit when c_locked_session%notfound;
v_cursor_number:=dbms_sql.open_cursor;
dbms_sql.parse(v_cursor_number,' alter system kill session '||''''||v_session_id||''','''||v_serial||'''',2);
commit;
end loop;
close c_locked_session;
END; -- Procedure
/
2.job
declare
v_job_id number;
begin
v_job_id :=1;
dbms_job.submit(v_job_id,'kill_session;',sysdate,'sysdate+1');
end;
CREATE OR REPLACE
PROCEDURE kill_session
IS
v_session_id number;
v_serial number;
v_cursor_number number;
cursor c_locked_session is
select a.session_id,b.serial# from v$locked_object a,v$session b where a.session_id=b.sid;
BEGIN
open c_locked_session;
loop
fetch c_locked_session into v_session_id,v_serial;
exit when c_locked_session%notfound;
v_cursor_number:=dbms_sql.open_cursor;
dbms_sql.parse(v_cursor_number,' alter system kill session '||''''||v_session_id||''','''||v_serial||'''',2);
commit;
end loop;
close c_locked_session;
END; -- Procedure
/
2.job
declare
v_job_id number;
begin
v_job_id :=1;
dbms_job.submit(v_job_id,'kill_session;',sysdate,'sysdate+1');
end;
解决方案 »
- exp备份问题
- Mysql内置函数对应Oracle的内置函数
- 哪位朋友有oracle9i 中文版 FOR WINDOWS的,请帮帮我,很需要!
- 请教一个重复记录统计问题
- 有关oracle文本字段的长度验证问题
- 我怎么进不去“企业管理器”呀
- 如何将Oracle数据库中的数据导出为xml文件??急!
- ASP通过Microsoft ODBC连接Oracle数据库如何使用连接池?
- Oracle存储过程的问题急!!!!!!呀
- win10安装oracle数据库出现问题,百度的方案都不行啊,求救!!
- 请问怎么选取表中某一列的所有不重复的值?
- 只能在cmd下用sqlplus连接oracle920.pl\sql和oracle图形界面都无法连接数据库,也不报错。
CREATE OR REPLACE PROCEDURE ZT AS
CURSOR L_CUR IS
SELECT A.SESSION_ID A, B.SERIAL# B
FROM V$LOCKED_OBJECT A, V$SESSION B
WHERE A.SESSION_ID = B.SID;
BEGIN
FOR v_cur IN l_cur LOOP
EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION '''||v_cur.A||','||v_cur.B||'''';
END LOOP;
END;
是由於某個進程執行了某項操作但還沒有提交鎖造成。在非必要的情況下不建議KILL掉對應的SESSION,
因為如果直接KILL會照成用戶數據的丟失。ORACEL的鎖機制就是為了保証數據的完整性。建議從程序代碼和用戶實際操作來解決鎖等待的問題。
比如:後台程序中盡量多使用COMMIT
只在业务需要commit的时候commit,kill会话只能由DBA手工来做,否则出了问题责任谁负呢?
'your_procedure;',//要执行的过程
trunc(sysdate)+1/24,//下次执行时间
'trunc(sysdate)+1/24+1'//每次间隔时间
);
删除job:dbms_job.remove(jobno);
修改要执行的操作:job:dbms_job.what(jobno,what);
修改下次执行时间:dbms_job.next_date(job,next_date);
修改间隔时间:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
启动job:dbms_job.run(jobno);
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',//Procdemo为过程名称
SYSDATE, 'SYSDATE + 1/720');
commit;
end;
oracle会自动检测死锁,并处理的。