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;可以 ps -ef|grep ora 要是oracle运行的话可以看到进程
没运行可以使用oracle 用户 sqlplus / as sysdba 看看是否能进入oracle能的话就装了哦在检查oracle的进程命令输出后,输出显示至少应包括以下一些进程:
oracle写数据文件的进程,输出显示为:"ora_dbw0_ORCL"
oracle写日志文件的进程,输出显示为:"ora_lgwr_ORCL"
oracle监听实例状态的进程,输出显示为:"ora_smon_ORCL"
oracle监听客户端连接进程状态的进程,输出显示为:"ora_pmon_ORCL"
oracle进行归档的进程,输出显示为:"ora_arc0_ORCL"
oracle进行检查点的进程,输出显示为:"ora_ckpt_ORCL"
oracle进行恢复的进程,输出显示为:"ora_reco_ORCL"用 ps -ef|grep smon
看你当前有多少个已经启动的实例,
没启动的,只能去$ORACLE_HOME/dbs下面去数你有多少init文件了。
如果你有多个ORACLE HOME,那就挨个数吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)