sql杀进程、长时间操作、表空间利用率_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2442 | 回复: 1   主题: sql杀进程、长时间操作、表空间利用率        下一篇 
unknsnow
注册用户
等级:上士
经验:272
发帖:78
精华:0
注册:2012-2-10
状态:离线
发送短消息息给unknsnow 加好友    发送短消息息给unknsnow 发消息
发表于: IP:您无权察看 2015-8-21 15:10:19 | [全部帖] [楼主帖] 楼主

一、根据系统进程号,检查运行的sql内容并kill session
在命令行通过ps -ef |grep XXXX.sh,获得进程号后,kill -9 进程号,有的时候会kill不干净,在数据库中还存在该进程。可以试试以下的办法:
1、ps -ef |grep xxx.sh 获得该脚本的进程号(假设进程号为111)
2、ps -ef |grep sqlplus 获得该脚本的sqlplus的进程号(一般来说sqlplus的进程号比脚本的进程号大1,我们假设该脚本的sqlplus进程号为112)
3、SELECT a.SID,a.SERIAL#,a.MACHINE,a.MODULE,b.SQL_TEXT FROM v$session a,v$sqlarea b

 WHERE b.ADDRESS=a.SQL_ADDRESS
AND process=’&unix_process_id’ /*此处的unix_process_id为刚刚查到的sqlplus进程号,如112 */
ORDER BY PROCESS,a.MACHINE,a.PROGRAM;


我们在获得该sid和serial#的时候,还可以看看它的sql_text,验证一下是不是我们当前在执行的sql。

4、根据刚刚查到的sid和serial# ,执行:alter system kill session ‘sid,serial#’ ;

二、长时间操作
1、根据刚才的操作(kill session操作的第1、2、3步骤),获得sid和serial#,记下这两个数字。
2、SELECT DECODE(TARGET_DESC,

 NULL,
DECODE(TARGET,
NULL,
OPNAME,
CONCAT(OPNAME, CONCAT(‘ – ‘, TARGET))),
DECODE(TARGET,
NULL,
CONCAT(OPNAME, CONCAT(‘ : ‘, TARGET_DESC)),
CONCAT(OPNAME,
CONCAT(‘ : ‘,


CONCAT(TARGET_DESC, CONCAT(‘ – ‘, TARGET)))))) 当前操作,
SOFAR 已处理,
TOTALWORK 总共需处理,

 UNITS,
START_TIME,


TO_CHAR(ELAPSED_SECONDS, ’99999990.00′) "已经耗时(秒)",

 DECODE(SOFAR,
0,
0,


ROUND(ELAPSED_SECONDS * (TOTALWORK – SOFAR) / SOFAR)) "剩余时间(秒)"

 FROM V$SESSION_LONGOPS
WHERE SID = 13 /*刚刚记下的sid*/
AND SERIAL# = 15 /*刚刚记下的serial#*/
AND SOFAR < TOTALWORK ;


三、表空间利用率

 SELECT d.status "Status",
d.tablespace_name "Name",
d.contents "Type",
d.extent_management "Extent Management",
to_char(nvl(a.bytes / 1024 / 1024, 0), ’99,999,990.900′) "Size (M)",
to_char(nvl(a.bytes – nvl(f.bytes, 0), 0) / 1024 / 1024,
’99999999.999′) || ‘/’ ||
to_char(nvl(a.bytes / 1024 / 1024, 0), ’99999999.999′) "Used (M)",
to_char(nvl((a.bytes – nvl(f.bytes, 0)) / a.bytes * 100, 0),
’990.00′) "Used %"
FROM sys.dba_tablespaces d,
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
AND NOT
(d.extent_management LIKE ‘LOCAL’ AND d.contents LIKE ‘TEMPORARY’)
UNION ALL
SELECT d.status "Status",
d.tablespace_name "Name",
d.contents "Type",
d.extent_management "Extent Management",
to_char(nvl(a.bytes / 1024 / 1024, 0), ’99,999,990.900′) "Size (M)",
to_char(nvl(t.bytes, 0) / 1024 / 1024, ’99999999.999′) || ‘/’ ||
to_char(nvl(a.bytes / 1024 / 1024, 0), ’99999999.999′) "Used (M)",
to_char(nvl(t.bytes / a.bytes * 100, 0), ’990.00′) "Used %"
FROM sys.dba_tablespaces d,
(SELECT tablespace_name, SUM(bytes) bytes
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes_cached) bytes
FROM v$temp_extent_pool
GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE ‘LOCAL’
AND d.contents LIKE ‘TEMPORARY’
ORDER BY "Used %" DESC;


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
dream007
注册用户
等级:少校
经验:1086
发帖:53
精华:0
注册:2015-7-2
状态:离线
发送短消息息给dream007 加好友    发送短消息息给dream007 发消息
发表于: IP:您无权察看 2015-8-23 22:02:34 | [全部帖] [楼主帖] 2  楼

不得不说很实用的分享啦,谢谢楼主!



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论