oracle 会话 死锁 执行sql 执行job的方法
//根据用户分组会话 selectt.USERNAME,count(*)fromv$sessiontgroupbyt.USERNAME //查找某一用户正在执行的sql_id值 select*fromv$sessiontwheret.USERNAME='BUDGET'andt.SQL_IDisnotnull //查找对应sql_id的对应sql语句 selectm.SQL_TEXTfromv$sessiont,v$sqlareamwheret.USERNAME='BUDGET'andt.sql_id=m.SQL_ID // select*fromv$sqlareatwheret.SQL_ID='g92sy7kwt6mrq' //查询死锁对象 select*fromv$locked_object
1、修改Oracle最大连接数的方法
a、以sysdba身份登陆PL/SQL或者Worksheet b、查询目前连接数 showparameterprocesses; c、更改系统连接数 altersystemsetprocesses=1000scope=spfile; d、创建pfile createpfilefromspfile; e、重启Oracle服务或重启Oracle服务器 2、查询Oracle游标使用情况的方法 select*fromv$open_cursorwhereuser_name='TRAFFIC'; 3、查询Oracle会话的方法 select*fromv$session
杀掉会话:
方法一:SQL>SELECTpid,spidFROMV$PROCESSWHEREADDRIN(SELECTPADDRFROMV$SESSIONwhereusername='SYS');
PIDSPID
----------------------
1713657
ps-ef|grep13657
kill-913657
方法二:
SQL>SELECTsid,serial#FROMV$SESSIONWHEREsidin(SELECTdistinctsidFROMV$MYSTAT);
SIDSERIAL#
--------------------
163713894
altersystemdisconnectsession'1637,13894'immediate;
执行这句会提示:ora-00031:标记要终止的会话。。。但是其实执行成功了。
如果用pl/sql登陆客户端那边会提示:ora-00028:您的会话已经被终止。
查看正在执行sql进度:
SELECTSE.SID,OPNAME,TRUNC(SOFAR/TOTALWORK*100,2)||'%'ASPCT_WORK,ELAPSED_SECONDSELAPSED,ROUND(ELAPSED_SECONDS*(TOTALWORK-SOFAR)/SOFAR)REMAIN_TIME,SQL_TEXT
FROMV$SESSION_LONGOPSSL,V$SQLAREASA,V$SESSIONSE
WHERESL.SQL_HASH_VALUE=SA.HASH_VALUEANDSL.SID=SE.SIDANDSOFAR!=TOTALWORK
ORDERBYSTART_TIME
SELECTa.tablespace_name"表空间名",round(total/1024/1024/1024,4)表空间大小Gb,round(free/1024/1024/1024,4)表空间剩余大小Gb,
round((total-free)/1024/1024/1024,4)表空间使用大小Gb,ROUND((total-free)/total,4)*100"使用率%"
FROM(SELECTtablespace_name,SUM(bytes)freeFROMDBA_FREE_SPACE
GROUPBYtablespace_name)a,
(SELECTtablespace_name,SUM(bytes)totalFROMDBA_DATA_FILESGROUPBYtablespace_name)b
WHEREa.tablespace_name=b.tablespace_nameorderby5desc
强制停止oracle正在执行的job:
1、查看所有job;
select*fromdba_jobs;
2、查看正在运行的job;
select*fromdba_jobs_running;
3、根据sid查出对应的session;
selectSID,SERIAL#fromV$SessionwhereSID='&SID';
4、kill对应的session;
altersystemkillsession'&SID,&SERIAL';
5、将job置为broken;
execdbms_job.broken('&JOB',true);
6、sysdba用户权限删除job;
deletefromdba_jobswhereJOB='&JOB';
---实在无奈时启动数据库