解决方案 »
- oracle数据查询
- 如何给oracle中的一个角色赋予查询所有视图的权限
- 关于Oracle数据库并行问题
- 紧急求援……oracle数据库备份问题
- 在线求助,undo表空间数据飞速增长。
- 触发器中读取不到:new.rowid~!!
- update use_name set login_time=getTime() where name='admin';错在哪里啊?
- 只有dmp文件能导入到指定数据库么?
- toad7.x数据库管理工具能不能操作unix/linux上的ORA数据库
- oracle 动态sql查询语句中含有表中字段时的单引号问题
- oracle sql developer 不同的图标都有什么不同的意思?
- oracle 数据导入导出
sqlplus "/as sysdba" (sys/change_on_install)
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
2)kill掉这个死锁的进程:
alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
3)如果还不能解决:
select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr;
其中sid用死锁的sid替换: exit
ps -ef|grep spid
其中spid是这个进程的进程号,kill掉这个Oracle进程
from:http://southking.javaeye.com/blog/550832如果实在还不行,允许的话重启oracle服务
相关的表没有发生死锁啊.感觉就是存储过程卡在那里了, 我是从两点判断的:
1) plsql 里编译这个存储过程, 窗口卡死, 查看 v$session 里有 library cache pin 事件
2) 存储过程分两步往表里插数, insert 和 merge into, insert 的字段已经有值了, merge 的字段还为空, 应该是卡在 merge 了我的存储过程是由JOB 调的, 过程卡了, JOB 也就卡在那里了. 刚才手动把JOB STOP 了, JOB新周期开始后已经正常了. 接下来准备优化merge....另外, job stop 后过程可以编译, 也近一步证实过程是一直在执行. 也发现在 JOB STOP 前后,
select t.name, t.pins, t.locks, t.* from v$db_object_cache t where upper(t.name) = 'PROC_NAME';
里都能查到这个过程, 感觉用上面语句查"正在执行的存储过程" 不太靠谱. 还有自始至终没在 v$access 里看到这个过程, 所以也不确定网上说的用 v$db_object_cache 和 v$access 查正在执行的存储过程的方法是否好用....各种想不通谢谢~
可惜我已经手动把JOB停了, 那个过程也停了, 等问题重现了再验证一下.谢谢前辈
终于明白了!
我们的环境是RAC 双节点, 存储过程是由JOB 调度的, 原来JOB 是分节点的--可以先确定JOB 是在哪个节点上运行的
select t.running_instance, t.* from user_scheduler_running_jobs t;
--然后到对应节点上查正在执行的存储过程
select t.sid, t.* from v$access t where t.object = 'PROC_NAME';
--然后找到对应会话
select t.sid, t.serial#, t.* from v$session t where t.sid = '&sid';
--杀掉会话
alter system kill session '&sid, &serial#';谢谢大家