- 浏览: 145734 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
murphee:
请问下如果要给header设置固定值呢?比如 <so ...
根据WSDL生成带SOAPHeader节点的报文 -
double_f:
这里有更详细解答,来自官方:jse为用于桌面应用软件,及服务器 ...
认识J2EE规范或标准以及J2EE和JEE有什么不同? -
除了你无可取代:
灰常不错的
关于ExtJS插件Spket安装指南 (转) -
hf_jj:
lz 你好 下载你的包发现点了没有生成代码 能否发一份可以的给 ...
Axis2_1.X学习笔记 -
faith515:
兄台 ,你咋个自动添加请求头的啊,我现在遇到一个问题没法解决呢 ...
根据WSDL生成带SOAPHeader节点的报文
1、发现系统cpu使用率在50%
topas :
Topas Monitor for host: DBSERVER EVENTS/QUEUES FILE/TTY
Fri Jul 2 21:33:13 2010 Interval: 2 Cswitch 1473 Readch 0.0G
Syscall 1452 Writech 0.0G
Kernel 3.6 |## | Reads 174 Rawin 0
User 49.1 |############## | Writes 175 Ttyout 216
Wait 0.0 | | Forks 0 Igets 0
Idle 47.3 |############## | Execs 0 Namei 0
Runqueue 0.5 Dirblk 0
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0
en0 11.1K 5219.0 349.5 234.5 10.9K
en1 0.0 0.0 0.0 0.0 0.0 PAGING MEMORY
lo0 0.0 0.0 0.0 0.0 0.0 Faults 22 Real,MB 16016
Steals 2815 % Comp 80.9
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 0 % Noncomp 19.4
hdisk1 0.0 11.0K 44.0 11.0K 0.0 PgspOut 0 % Client 19.4
dac0 0.0 0.0 0.0 0.0 0.0 PageIn 2816
dac0utm 0.0 0.0 0.0 0.0 0.0 PageOut 0 PAGING SPACE
dac1 0.0 0.0 0.0 0.0 0.0 Sios 2816 Size,MB 16384
dac1utm 0.0 0.0 0.0 0.0 0.0 % Used 59.2
hdisk0 0.0 0.0 0.0 0.0 0.0 NFS (calls/sec) % Free 40.7
hdisk2 0.0 0.0 0.0 0.0 0.0 ServerV2 0
ClientV2 0 Press:
Name PID CPU% PgSp Owner ServerV3 0 "h" for help
oracle 655514 26.7 10.2 oracle ClientV3 0 "q" to quit
ftp 1011860 0.5 0.6 root
lrud 16392 0.4 0.5 root
topas 782448 0.1 1.8 oracle
oracle 254012 0.0 17.8 oracle
oracle 385218 0.0 10.1 oracle
dtgreet 123020 0.0 1.3 root
oracle 389312 0.0 8.0 oracle
2、进入sqlplus
执行察看oracle 655514 26.7 10.2 oracle 系统进程对应的sql
SYS@ora10g>select sid,serial#,machine,username,program,sql_hash_value,sql_id, to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') as login_time from v$session
where paddr in (select addr from v$process where spid in ('655514'));
SID SERIAL# MACHINE USERNAME PROGRAM SQL_HASH_VALUE SQL_ID LOGIN_TIME
---------- ---------- --------------- ------------- -------------- ------------------- -------------- --------------
572 28114 APPSERVER NC5X 2201849944 5uhv05f1mv42s 2010/07/02 08:35:58
3、查看该sql
SYS@ora10g>select sql_text from v$sqltext_with_newlines where hash_value = 2201849944 order by piece;
SQL_TEXT
----------------------------------------------------------------
update so_sale set ts='2010-07-02 14:17:09',capproveid = :1, dap
provedate = :2, fstatus = 2, daudittime = '2010-07-02 14:17:09'
where csaleid = :3
4、由于sql中有参数,查看个参数值
SYS@ora10g>select t.HASH_VALUE, t.SQL_ID, t.NAME, t.LAST_CAPTURED, t.WAS_CAPTURED, t.VALUE_STRING, t.VALUE_ANYDATA
from v$sql_bind_capture t where sql_id = '5uhv05f1mv42s';
no rows selected
5、查看系统中有无死锁
SYS@ora10g>select sess.sid,
sess.serial#,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid; 2 3 4 5 6 7
SID SERIAL# LOCKED_MODE
---------- ---------- -----------
572 28114 3
572 28114 3
572 28114 3
572 28114 3
572 28114 3
sid 和第二步中查出的sid 相同
查看其它锁
select * from V$lock
SYS@ora10g>select sid from V$lock;
SID
----------
660
660
660
661
662
662
662
662
662
662
662
SID
----------
662
662
662
662
662
662
662
662
662
662
662
SID
----------
662
659
572
572
572
572
572
572
30 rows selected.
根据几个sid均查不到 sqltext
SYS@ora10g>select sql_fulltext from v$sqlarea where address in (select sql_address from v$session where sid in (659,660,661,662));
no rows selected
6、根据sid查看死锁的sql
select * where address = (select sql_address from v$session where sid = 572)
结果no rows
select sql_address from v$session where sid = 572;
SQL_ADDRESS
----------------
0700000373C4EA88
7、查询v$open_cursor 视图
SYS@ora10g>select * from v$open_cursor where ADDRESS ='0700000373C4EA88' ;
no rows selected
8、杀死死锁进程
SYS@ora10g>ALTER SYSTEM KILL SESSION '572,28114';
ALTER SYSTEM KILL SESSION '572,28114'
*
ERROR at line 1:
ORA-00031: session marked for kill
9、查看系统几进程
SYS@ora10g>select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=572
2 3 4 ;
SPID OSUSER
------------ ------------------------------
PROGRAM
------------------------------------------------
655514
10、进入系统
#kill -9 655514
系统恢复正常
11、返回oracle的sqlplus查看锁
SYS@ora10g>select p.spid,a.serial#, c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.object_id;
no rows selected
死锁解决
其中有两个问题
1、第4步查看含参数的sql找不到参数
考虑任何sql语句执行第一步都会 创建游标(Create a Cursor),而含参数的sql语句是将参数绑定给游标,很有可能是sql执行中的游标已经关闭了。
参考:oracle sql语句执行过程和http://xiarilian12.javaeye.com/blog/574715以及http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2114.htm
2、第5步select sid from V$lock 看到有其它一些sid为什么不能kill
SYS@ora10g>select sid,serial#,username from v$session;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
634 70
635 10 NC5X
636 34 NC5X
637 1
638 2 NC5X
639 1
644 27 IUFO
645 13
650 1
651 1
653 79 NC5X
SID SERIAL# USERNAME
---------- ---------- ------------------------------
654 3 SYS
655 1
656 1
657 1
658 1
659 1
660 1
661 1
662 1
663 1
664 1
SID SERIAL# USERNAME
---------- ---------- ------------------------------
665 1
23 rows selected.
其中USERNAME为空的会话是Oracle的后台进程,对这些会话进行任何操作丢有可能造成宕机或者其它损失。
其它死锁问题收集 :
Oracle杀死死锁进程
先查看哪些表被锁住了:
select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; OWNER OBJECT_NAME SESSION_ID LOCKED_MODE ------------------------------ ----------------- WSSB SBDA_PSHPFTDT 22 3 WSSB_RTREPOS WB_RT_SERVICE_QUEUE_TAB 24 2 WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB 29 2 WSSB_RTREPOS WB_RT_NOTIFY_QUEUE_TAB 39 2 WSSB SBDA_PSDBDT 47 3 WSSB_RTREPOS WB_RT_AUDIT_DETAIL 47 3 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; USERNAME SID SERIAL# LOGON_TIME ------------------------------ ---------- ------- WSSB_RTACCESS 39 1178 2006-5-22 1 WSSB_RTACCESS 29 5497 2006-5-22 1 |
杀进程中的会话:
alter system kill session 'sid,serial#'; e.g alter system kill session '29,5497'; |
如果有ora-00031错误,则在后面加immediate;alter system kill session '29,5497' immediate;
如何杀死oracle死锁进程
1.查哪个过程被锁:
查V$DB_OBJECT_CACHE视图:
SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='0';
2. 查是哪一个SID,通过SID可知道是哪个SESSION:
查V$ACCESS视图:
SELECT * FROM V$ACCESS WHERE OWNER='过程的所属用户' AND NAME='刚才查到的过程名';
3. 查出SID和SERIAL#:
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM V$SESSION WHERE SID='刚才查到的SID';
查V$PROCESS视图:
SELECT SPID FROM V$PROCESS WHERE ADDR='刚才查到的PADDR';
4. 杀进程:
(1)先杀ORACLE进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2)再杀操作系统进程:
KILL -9 刚才查出的SPID或ORAKILL 刚才查出的SID 刚才查出的SPID。
Oracle的死锁
查询数据库死锁:
select t2.username||' '||t2.sid||' '||t2.serial#||' '||t2.logon_time||' '||t3.sql_text from v$locked_object t1,v$session t2,v$sqltext t3 where t1.session_id=t2.sid and t2.sql_address=t3.address order by t2.logon_time; |
查询出来的结果就是有死锁的session了,下面就是杀掉,拿到上面查询出来的SID和SERIAL#,填入到下面的语句中:
alter system kill session 'sid,serial#';
一般情况可以解决数据库存在的死锁了,或通过session id 查到对应的操作系统进程,在Unix中杀掉操作系统的进程。
SELECT a.username,c.spid AS os_process_id,c.pid AS oracle_process_id FROM v$session a,v$process c WHERE c.addr=a.paddr and a.sid= and a.serial#= ; |
然后采用kill (unix) 或 orakill(windows )。
在Unix中:
ps -ef|grep os_process_id kill -9 os_process_id ps -ef|grep os_process_id |
经常在Oracle的使用过程中碰到这个问题,所以也总结了一点解决方法。
1)查找死锁的进程:
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进程。
发表评论
-
Oracle 字符集查看与修改(字符集解惑)
2013-10-20 22:00 2823针对Oracle字符集知识点收集学习 常用语句 ... -
修改数据库字符集
2012-07-29 15:34 0oracle的编码一直是个很 ... -
数据库知识以及性能优化方向概述(转)
2012-06-02 20:24 1624任何事情都有它的源头 ... -
Oracle常用动态性能表:v$sqltext、v$sqlarea、v$sql以及v$sql_plan解释
2012-06-02 19:46 956v$sqltext 存储的是完整的SQL ... -
数据库的一致性、ORA-01555以及UNDO_RETENTION
2012-06-02 15:57 4136数据库的一致性 定义 数据库一致 ... -
数据库学习
2012-05-29 19:56 7数据库学习 -
关于Ibatis分页问题解决方案
2012-02-21 19:51 731关于Ibatis分页问题解决方案----重写ibatis内部类 ... -
查询oracle数据库的数据库名、实例名、ORACLE_SID
2012-02-01 10:21 1088(转)http://hi.baidu.com/goodo ... -
项目中最基本的Oracle操作与安装
2012-02-01 09:54 26131.查询实例 env | gre ...
相关推荐
### DB2死锁问题分析及解决方案 #### 一、引言 在数据库管理与维护过程中,死锁问题是一个常见的挑战,特别是在使用IBM DB2这样的大型关系型数据库管理系统时。本文将详细探讨DB2中死锁问题的分析方法及有效的解决...
并发访问ORACLE数据库的数据死锁分析和解决措施 Oracle数据库是一个关系型数据库管理系统,广泛应用于各种行业领域。在实际应用中,高并发访问数据库可能会导致数据死锁问题,本文将对数据死锁分析和解决措施进行...
最后,总结一下,死锁的分析和解决是一个综合性的任务,需要结合MySQL的事务处理、锁机制以及并发控制等多方面的知识。通过深入理解和解析死锁日志,我们可以更好地诊断和预防此类问题,从而提高数据库的性能和稳定...
### Oracle死锁故障分析与诊断解决 在Oracle数据库管理中,...总之,Oracle死锁虽然是一种常见问题,但通过合理的诊断和解决方案,以及有效的预防措施,可以大大降低其对数据库性能的影响,确保数据库系统的稳定运行。
本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...
本文将深入探讨如何使用SQL Server Profiler工具来监视和分析死锁,以便更好地理解和解决这类问题。 首先,理解死锁的基本概念至关重要。死锁发生时,两个事务A和B各自持有对方需要的资源,导致双方都无法继续执行...
针对这一问题,数据库管理系统通常采用三种策略来解决:预防死锁、检测死锁以及避免死锁。 ### 预防死锁 预防死锁是最为保守的策略,其核心思想是在事务开始前就尽可能避免死锁的发生。这主要通过以下几种方式实现...
通过何登成的分享,我们可以看到,死锁分析需要深入理解事务逻辑、掌握锁的原理以及合理配置数据库和应用,从而确保数据库系统的稳定和高效。这些知识点不仅是DBA需要掌握的,对于任何涉及数据库设计和优化的开发者...
本文将通过一个具体的死锁导致的ANR实例,解析如何利用Android trace文件来分析和解决这类问题。 当Android系统检测到ANR发生时,会在/data/anr/目录下自动生成一个trace文件,其中包含了系统运行时的详细信息,如...
9. **监控和日志记录**:通过SQL Server的系统日志或专门的工具监控死锁事件,记录死锁信息,以便分析死锁模式并针对性地调整应用程序或数据库配置。 总的来说,解决SQL Server中的死锁问题需要综合考虑数据库设计...
本文将深入探讨SQL Server死锁的概念、原因、检测方法以及如何有效地解决和预防死锁。 1. **死锁的概念** 死锁是系统资源分配的一种状态,其中两个或更多的事务相互等待对方释放资源,形成一个循环等待链,导致...
这些日志条目可以帮助定位死锁发生的具体位置以及相关的进程和会话信息。 ##### 3.2 使用跟踪文件 除了alert.log外,Oracle还会为每个死锁生成一个跟踪文件(trace file),该文件包含了更多关于死锁的信息。在...
通过以上分析和建议,我们可以有效地检测、解决并预防ORACLE表的死锁问题,从而提高数据库系统的稳定性和性能。在实际操作中,这些方法已经被证明是亲测有效的,能够显著提升数据库管理的效率和效果。
MySQL中的死锁问题是一个常见的事务处理挑战,尤其是在...总之,理解MySQL的死锁现象、其日志分析以及如何预防是保证数据库高效、稳定运行的关键。通过细致的分析和良好的编程实践,我们可以有效地管理并避免死锁问题。
### 死锁分析存储过程 在给定的部分内容中,可以看到一个名为`sp_check_lock`的存储过程被创建,其主要目的是检查系统中是否存在死锁,并获取发生死锁的进程信息。以下是对该存储过程的详细解析: 1. **查询死锁中...
通过对数据库死锁现象的深入分析,我们可以发现,正确处理资源竞争是避免死锁的关键。此外,合理设计事务逻辑、优化数据库结构以及提高SQL语句的执行效率,都是预防死锁的有效措施。在实际开发过程中,开发者应当...
以下是对“SQLSERVER谈死锁的监控分析解决思路共8页.pdf”这一主题的详细探讨。 1. **死锁定义与产生条件**: - **循环等待**:在死锁中,存在一个事务集合,每个事务都在等待另一个事务释放资源。 - **不可抢占...
3. **禁用跟踪标志1204**:在完成死锁分析后,应使用`DBCC TRACEOFF(1204, -1)`命令关闭该跟踪标志,以避免不必要的系统资源消耗。 #### 分析死锁图 死锁图是死锁报告中最为直观的部分,它以图形的方式展示了死锁...