如何查看和清除oracle无用的连接进程 ...

如何查看和清除oracle无用的连接进程 ...,第1张

以下的SQL语句列出当前数据库建立的会话情况:select sid,serial#,username,program,machine,statusfrom v$session;输出结果为:SID SERIAL# USERNAME PROGRAM MACHINE STATUS---- ------- ---------- ----------- --------------- --------1 1 ORACLEEXE WORK3 ACTIVE2 1 ORACLEEXE WORK3 ACTIVE3 1 ORACLEEXE WORK3 ACTIVE4 1 ORACLEEXE WORK3 ACTIVE5 3 ORACLEEXE WORK3 ACTIVE6 1 ORACLEEXE WORK3 ACTIVE7 1 ORACLEEXE WORK3 ACTIVE8 27 SYS SQLPLUSEXE WORKGROUPWORK3 ACTIVE11 5 DBSNMP dbsnmpexe WORKGROUPWORK3 INACTIVE其中,SID 会话(session)的ID号;SERIAL# 会话的序列号,和SID一起用来唯一标识一个会话;USERNAME 建立该会话的用户名;PROGRAM 这个会话是用什么工具连接到数据库的;STATUS 当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何 *** 作;如果DBA要手工断开某个会话,则执行:alter system kill session \'SID,SERIAL#\';注意,上例中SID为1到7(USERNAME列为空)的会话,是Oracle的后台进程,不要对这些会话进行任何 *** 作。

使用sqlplus登录到sysdba,可以用数据字典查询数据库状态。正常开启的话状态应该是 OPEN select status from v$instance; 如果是RAC集群,可以使用CRS命令查看整个集群的实例运行状态: su -oracle crs_stat -t

Oracle服务器由数据库和实例组成,实例包括进程和内存结构。

你连接到一个实例上,只能查到与该实例对应的数据库。数据库名可以这样简单查询

show

parameter

db_name

或者楼上的语句也可以,但是都只能获得当前的数据库名。

oracle占用cpu过高怎么处理,本文将介绍有关oracle进程CPU占用率过高的问题,需要了解跟多的朋友可以参考下

1:首先使用TOP命令传到占用CPU高的SPID号

PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND

3575 oracle 1 12 0 0K 0K run 7486H 2498% oracle

3571 oracle 1 22 0 0K 0K sleep 7062H 2284% oracle

2:使用DBA账户登录数据库,使用以下SQL语句查询:

SELECT FROM V$PROCESS WHERE spid=3575;查询到SQL相关信息

3:根据以上查询到的信息使用以下SQL查询:

SELECT sid, program FROM V$SESSION S WHERE EXISTS(SELECT 1 FROM V$PROCESS WHERE spid=3575 AND ADDR = SPADDR);

可以查询到具体那个客户端查询一直在不断占用ORACLE资源!

最后对这个查询进行处理!

4根据SID查得SQLITPUB

复制代码代码如下:

select sql_textITPUB

from v$sqltext

where ahashvalue=(select sql_hash_value

from v$session b

where bSID='&sid')

0order by piece ASC;

根据lockwait字段可以查询当前正在等待的锁的相关信息:

复制代码代码如下:

select from v$lock where kaddr in (select lockwait from v$session where sid= $sid);

(sql_address,sql_hash_value),(prev_sql_addr,prev_hash_value) 根据这两组字段, 可以查询到当前session正在执行的或最近一次执行的sql语句的详细信息:

select from v$sqltext where address = &sql_address and hash_value = &sql_hash_value;

根据PID查SQL相关信息:

复制代码代码如下:

select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));

根据PID查SQL语句

复制代码代码如下:

SELECT ausername,amachine,aprogram,asid,aserial#,astatus,cpiece,csql_text FROM v$session a,v$process b,v$sqltext c WHERE bspid='&spid' AND baddr=apaddr AND asql_address=caddress(+) ORDER BY cpiece;

得到进程的sid号:

复制代码代码如下:

select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));

得到session的sqltext语句:

复制代码代码如下:

select sql_text from v$sqltext_with_newlines where hash_value in (select SQL_HASH_VALUE from v$session where paddr in (select addr from v$process where spid= '&pid')) order by piece;

在实际的工作中,数据库管理员(DBA)需要经常要定时对数据库的连接情况进行检查,查看与数据库建立的会话数目是不是正常,假如建立了过多的连接,会消耗许多数据库的资源。与此同时,针对一些“挂死”的连接,可能会需要DBA自行手工进行清理。

下面的SQL语句列出当前数据库建立的会话情况:

select

sid,serial#,username,program,machine,status

from

v$session;

输出的结果:

SID

SERIAL#

USERNAME

PROGRAM

MACHINE

STATUS

----

-------

----------

-----------

---------------

--------

1

1

ORACLEEXE

WORK3

ACTIVE

2

1

ORACLEEXE

WORK3

ACTIVE

3

1

ORACLEEXE

WORK3

ACTIVE

4

1

ORACLEEXE

WORK3

ACTIVE

5

3

ORACLEEXE

WORK3

ACTIVE

6

1

ORACLEEXE

WORK3

ACTIVE

7

1

ORACLEEXE

WORK3

ACTIVE

8

27

SYS

SQLPLUSEXE

WORKGROUP\WORK3

ACTIVE

11

5

DBSNMP

dbsnmpexe

WORKGROUP\WORK3

INACTIVE

其中SID

会话(session)的ID号;

SERIAL#

会话的序列号,和SID一起用来唯一标识一个会话;

USERNAME

建立该会话的用户名;

STATUS

当前这个会话的状态,ACTIVE表示会话正在执行某些任务,INACTIVE表示当前会话没有执行任何 *** 作;

假如要手工断开某个会话,则执行:

alter

system

kill

session

'SID,SERIAL#';注意:在上面的示例中,SID为1到7(USERNAME列为空)的会话,它是Oracle数据库的后台进程,请大家不要对这些会话进行任何 *** 作。

oracle的性能判断需要综合数据库的多个运行指标来判断:

1、进程数量和占用cpu:这个主要看有没有长时间占用cpu的进行。通常会判断大出sql,需要优化;这个可以用执行计划或者awr报告查看;

2、内存占用:主要用系统命令查看ora_占用和系统总内存的比例,swap的使用率;通常swap使用率低就没事;这个主要使用系统命令;

3、磁盘占用率:防止磁盘空间不足,需要的主要在系统和用户表空间、RMAN等 *** 作上;这个主要使用系统命令;RMAN命令查看

以上就是关于如何查看和清除oracle无用的连接进程 ...全部的内容,包括:如何查看和清除oracle无用的连接进程 ...、oracle crs进程怎么看、如何查看哪些进程和服务器正在使用数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10159851.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存