一个新库,表空间和用户等已建好,再用PL/SQL从别的库 导出表和索引,Sequences等,可以进行增删改查了。
出现问题:运行最多两天后,数据库实例DOWN掉。重起服务,数据库实例恢复。再运行两天,又down掉。
查找问题: 打开企业管理器,发现有错误警告。根据错误找到日志文件:
\app\Administrator\diag\rdbms\shichudb\shichudb\alert\log.xml
发现里面狂报
ORA-04030: 在尝试分配 968 字节 (kxs-heap-c,temporary memory) 时进程内存不足
ORA-04030: 在尝试分配 968 字节 (kxs-heap-c,temporary memory) 时进程内存不足
ORA-04030: 在尝试分配 1016 字节 (kxs-heap-w,kghsseg : kokeismo) 时进程内存不足
这应该是PGA被耗尽的现象。于是先调整ORACLE内存配置:总内存改为1500M,SGA配成
800M。结果不行。试过几种内存配置方案,都失败。
上网查资料,说是有可能是某个进程占用了大部分的PGA。
select * from v$process where PGA_ALLOC_MEM > 20971520
查找PGA使用大于20M的进程,发现只有一个记录
select PID,USERNAME,PGA_USED_MEM from v$process where PGA_ALLOC_MEM > 20971520
查找出异常的PID=34 这个进程的PGA使用量一直在增长
select sid,serial#,username,machine from v$session b where b.paddr=(select addr from v$process c where c.pid=34);
根据查找到的PID=34 查找到SID=138
用DBA身份察看V$SESSION 视图,看到SID是138的SESSION的STATUS一直是AVTIVE,是不是死锁了?
select s.username,l.object_id,l.session_id,s.serial#,l.oracle_username,l.os_user_name,l.process from
v$locked_objectl,v$session s where l.session_id= s.sid;
查找死锁的进程,结果显示出来的是上面语句查找出来的SID=138
在V$SESSION 视图里看到这个SID=138的会话的PROGRAM 是OMS(ORACLE MANAGEMENT SERVER)
到企业管理器里察看警告信息
发现最严重的是:
BEGIN EMDW_LOG.set_context(MGMT_JOB_ENGINE.MODULE_NAME, :1); BEGIN
MGMT_JOB_ENGINE.update_step_status (:2,:3,:4,:5); END; EMDW_LOG.set_context; END;
SELECT EXECUTION_ID, STATUS, STATUS_DETAIL FROM MGMT_JOB_EXEC_SUMMARY WHERE JOB_ID = :B3 AND
TARGET_LIST_INDEX = :B2 AND EXPECTED_START_TIME = :B1
执行这两个SQL语句是引发的堵塞严重,但是看不懂它们在执行什么。
但是注意到里面都有JOB这个单词,猜是作业执行或调度的时候出问题了。到企业管理器里的作业定义里去找这两句
,没找到。
试着把138会话的进程杀死
alter system kill session '138,7031';
杀完后,再查
select PID,USERNAME,PGA_USED_MEM from v$process where PGA_ALLOC_MEM > 20971520
没有使用PGA大于20M的进程。
可是。。。
五分钟后,又出现了使用PGA大于20M的进程,在查查,又是死锁的会话。再杀,又出现。。。
试了几次,我放弃了。
把企业管理器的服务ORACLDBCONSOLEORAL停下试试,停了之后,再没有出现过。
这个问题解决过程到这里就停住了,还是上论坛求助吧。哪个大侠帮帮忙啊!!!!!!
不能把那么重要的服务一直停下啊!!!!!
|