数据库的连接查询
⑴ 查看oracle当前连接数和进程数
查询当前数据库的进程连接数:
使用sql语句:`select count(*) from v$process;`
查看当前数据库的会话连接数:
使用SQL语句:`select count(*) from v$session;`
查询数据库的并发连接数:
使用SQL语句:`select count(*) from v$session where status='ACTIVE';`
查看数据库建立的会话情况:
使用SQL语句:`select sid,serial#,username,program,machine,status from v$session;`
获取数据库允许的最大连接数:
使用SQL语句:`select value from v$parameter where name = 'processes';` 或者 `show parameter processes;`
查询所有数据库的连接数
使用SQL语句:`selectschemaname,count(*)fromv$sessiongroupbyschemaname;`
查询终端用户使用数据库的连接情况:
使用SQL语句:`selectosuser,schemaname,count(*)fromv$sessiongroupbyschemaname,osuser;`
修改数据库最大连接数:
使用SQL命令:`alter system set processes = value scope = spfile;`
重启数据库以实现连接数修改:
命令:`shutdown immediate;`
`startup;`
查看当前使用的数据库用户:
使用SQL语句:`select osuser,a.username,cpu_time/executions/1000000||'s',sql_fulltext,machine from v$session a,v$sqlarea b where a.sql_address = b.address order by cpu_time/executions desc;`
查询并释放被锁的表的session:
使用SQL语句:`SELECT A.OWNER,A.OBJECT_NAME,B.XIDUSN,B.XIDSLOT,B.XIDSQN,B.SESSION_ID,B.ORACLE_USERNAME, B.OS_USER_NAME,B.PROCESS, B.LOCKED_MODE, C.MACHINE,C.STATUS,C.SERVER,C.SID,C.SERIAL#,C.PROGRAM FROM ALL_OBJECTS A,V$LOCKED_OBJECT B,SYS.GV_$SESSION C WHERE ( A.OBJECT_ID = B.OBJECT_ID ) AND (B.PROCESS = C.PROCESS ) ORDER BY 1,2;`
释放指定session:
命令:`alter system kill session 'sid, serial#';`
查看占用系统IO较大的session:
使用SQL语句:`SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes FROM v$session se, v$session_wait st,v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC;`
找出耗用CPU较多的session:
使用SQL语句:`select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value from v$session a,v$process b,v$sesstat c where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;`