查看: 15064|回复: 56

truncate表的时候异常中断,所有该表操作挂死

[复制链接]
论坛徽章:
2
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
跳转到指定楼层
1#
发表于 2008-10-30 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
oracle 9206 三节点rac。
hp 11.11

以下操作均在节点1(gdrac1)上操作。


在一次truncate一个大表的过程中:

SQL> select sum(bytes)/1024/1024/1024 size_g from user_segments where
segment_name='ALERTBUFF';

SIZE_G
----------
329.8125

1* select tablespace_name,PARTITIONED from user_tables where table_name='ALERTBUFF'
SQL> /

TABLESPACE_NAME PAR
------------------------------ ---
DATA_DYNAMIC NO

SQL> select EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT from user_tablespaces where
tablespace_name='DATA_DYNAMIC';

EXTENT_MAN SEGMEN
---------- ------
LOCAL MANUAL

SQL> select index_name,tablespace_name,PARTITIONED from user_indexes where table_name='ALERTBUFF';

INDEX_NAME TABLESPACE_NAME PAR
------------------------------ ------------------------------ ---
IDX_ALERTBUFF_ALERTTIME DATA_DYNAMIC NO
PK_ALERTBUFF DATA_DYNAMIC NO


我们执行了truncate table xxx reuse storage,希望通过分步回缩extent的方式在truncate该表。

但是在truncate table ALERTBUFF reuse storage的时候,网络中断了。再次登录db的时候,发现该session还在,找到其sid,serial#,spid,kill掉session和os中的process,希望重新跑。

检查起状态已经变成killed,但是其dba dml lock中仍然有其锁存在:
SQL> select * from dba_dml_locks;

SESSION_ID OWNER NAME MODE_HELD
MODE_REQUESTE LAST_CONVERT BLOCKING_OTHERS
---------- ------------------------------ ------------------------------ -------------
------------- ------------ ----------------------------------------
64 MISC ALERTBUFF Exclusive
None 1643 Global
64 SYS MLOG$ Row-X (SX) None 1643
Global


SQL> l
1* select * from v$session_wait where sid=64
SQL> /

SID SEQ# EVENT
P1TEXTP1 P1RAW P2TEXT
P2 P2RAW P3TEXT P3 P3RAW WAIT_TIME
SECONDS_IN_WAIT STATE
---------- ---------- ----------------------------------------------------------------
---------------------------------------------------------------- ----------
----------------
---------------------------------------------------------------- ----------
----------------
---------------------------------------------------------------- ----------
---------------- ---------- --------------- -------------------
64 3540 DFS lock handle
type|mode1128857605 0000000043490005 id1
18 0000000000000012 id2 2 0000000000000002
0 39340 WAITING

SQL>


在alertlog中有告警信息:
ARC1: Beginning to archive log 5 thread 1 sequence 53670
Creating archive destination LOG_ARCHIVE_DEST_1: '/arch/gdrac_1_53670.arc'
ARC1: Completed archiving  log 5 thread 1 sequence 53670

Wed Oct 29 23:12:28 2008
PMON failed to delete process, see PMON trace file
Wed Oct 29 23:14:40 2008
Thread 1 advanced to log sequence 53672
  Current log# 1 seq# 53672 mem# 0: /ora_redo/redo11
  Current log# 1 seq# 53672 mem# 1: /ora_redo/redo12
Wed Oct 29 23:14:40 2008

相关的pmon trace file见附件。

目前关于这个表的任何操作都无法进行!即使是select也会有library cache lock。

请问如何在不重启instance、重启database的情况下,解决该问题!


谢谢!

[ 本帖最后由 jimmyhe1981 于 2008-10-30 10:27 编辑 ]

gdrac1_pmon_7976.rar

11.84 KB, 下载次数: 13

alert_gdrac1.rar

2.27 KB, 下载次数: 4

论坛徽章:
8
授权会员
日期:2007-03-10 13:09:08ITPUB元老
日期:2007-04-29 12:41:15会员2007贡献徽章
日期:2007-09-26 18:42:10奥运会纪念徽章:摔跤
日期:2008-06-05 14:47:21奥运会纪念徽章:跳水
日期:2008-06-24 15:51:07生肖徽章2007版:蛇
日期:2009-11-11 15:38:102011新春纪念徽章
日期:2011-02-13 11:12:412011新春纪念徽章
日期:2011-02-18 11:42:47
2#
发表于 2008-10-30 10:28 | 只看该作者
找到这个sid的pid,kill -9 pid

使用道具 举报

回复
论坛徽章:
2
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
3#
 楼主| 发表于 2008-10-30 10:52 | 只看该作者
原帖由 hcl 于 2008-10-30 10:28 发表
找到这个sid的pid,kill -9 pid

昨晚就已经kill了的。

昨晚的log:
昨晚的log:
SQL> select spid from v$session a,v$process b where a.paddr=b.addr and a.sid=64;

SPID
------------
6821

SQL> !
oracle@gd_rac01:/oracle$ ps -ef |grep 6821
  oracle  6821  6820  0 22:28:40 ?         0:00 oraclegdrac1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
  oracle 15152 15150  1 22:54:02 pts/4     0:00 grep 6821
oracle@gd_rac01:/oracle$
oracle@gd_rac01:/oracle$
oracle@gd_rac01:/oracle$
oracle@gd_rac01:/oracle$ kill -9 6821



今天的检查:
SQL> select spid from v$session a,v$process b where a.paddr=b.addr and a.sid=64;

SPID
------------
6821

SQL> !
oracle@gd_rac01:/oracle$ ps -ef |grep 6821
  oracle 16357 16324  0 10:34:40 pts/0     0:00 grep 6821
oracle@gd_rac01:/oracle$   


可以发现那个进程昨晚就被kill掉了的。

使用道具 举报

回复
论坛徽章:
97
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04
4#
发表于 2008-10-30 10:53 | 只看该作者
没遇见过.等高手.

使用道具 举报

回复
论坛徽章:
151
2014年新春福章
日期:2014-04-17 11:38:13奥运会纪念徽章:皮划艇静水
日期:2012-07-31 15:42:58奥运会纪念徽章:田径
日期:2012-07-10 16:21:10奥运会纪念徽章:跆拳道
日期:2012-06-20 22:07:29奥运会纪念徽章:皮划艇静水
日期:2012-06-16 02:55:21奥运会纪念徽章:曲棍球
日期:2012-06-13 10:09:19蛋疼蛋
日期:2012-05-19 23:20:41迷宫蛋
日期:2012-05-16 17:35:25版主2段
日期:2012-05-15 15:24:11双黄蛋
日期:2012-03-19 19:34:04
5#
发表于 2008-10-30 10:57 | 只看该作者
alter system kill session一把试试

使用道具 举报

回复
论坛徽章:
190
生肖徽章:狗
日期:2006-11-23 04:26:03生肖徽章:羊
日期:2007-09-26 17:08:21生肖徽章:马
日期:2007-09-26 17:08:49授权会员
日期:2007-12-31 19:14:41生肖徽章2007版:牛
日期:2008-03-28 10:02:30奥运会纪念徽章:柔道
日期:2008-04-30 16:28:44奥运会纪念徽章:垒球
日期:2008-05-12 21:28:28奥运会纪念徽章:体操
日期:2008-06-26 10:00:41奥运会纪念徽章:沙滩排球
日期:2008-07-27 12:41:59奥运会纪念徽章:艺术体操
日期:2008-07-30 11:09:47
6#
发表于 2008-10-30 10:57 | 只看该作者

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
7#
发表于 2008-10-30 11:12 | 只看该作者
实在不行就重起一下库了,或者将这个表Rename一下

使用道具 举报

回复
论坛徽章:
0
8#
发表于 2008-10-30 11:12 | 只看该作者
Alert.log
[PHP]
Wed Oct 29 23:12:28 2008
PMON failed to delete process, see PMON trace file
[/PHP]

PMON Trace
[PHP]
*** 2008-10-29 23:12:14.056
found process c0000004435e0a00 pid=28 serial=82 dead
gdrac1_pmon_7976.trc (2%)ksb_wait_for_cic_completion: ksiget(KSBCIPAR) returned 33
ksb_wait_for_cic_completion: ksiget(KSBCIPAR) returned 33
ksb_wait_for_cic_completion: ksiget(KSBCIPAR) returned 33
[/PHP]

根据serial=82在v$process, v$session找找。

使用道具 举报

回复
论坛徽章:
5
ITPUB元老
日期:2007-05-24 11:30:28授权会员
日期:2007-05-24 11:28:22会员2007贡献徽章
日期:2007-09-26 18:42:10BLOG每日发帖之星
日期:2008-04-30 01:02:122011新春纪念徽章
日期:2011-02-18 11:43:33
9#
发表于 2008-10-30 11:27 | 只看该作者
“found process c0000004435e0a00 pid=28 serial=82 dead”,可看到状态已经dead了。
v$session_wait中event是DFS lock handle,应该一直在等待CIC(the Cross Instance Calls),ksb_wait_for_cic_completion: ksiget(KSBCIQUE) returned 33
有关'DFS LOCK HANDLE'导致hang着的bug在metalink上有,可上去看看有无解决方案。

使用道具 举报

回复
论坛徽章:
2
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:53
10#
 楼主| 发表于 2008-10-30 11:47 | 只看该作者
原帖由 blue_prince 于 2008-10-30 10:57 发表
alter system kill session一把试试


SQL> set timing on
SQL> set time on
10:37:39 SQL> set feedback on
10:37:44 SQL> set echo on
10:37:49 SQL>
10:37:50 SQL> select sid,serial#,status from v$session where sid=64;

       SID    SERIAL# STATUS
---------- ---------- --------
        64      58703 KILLED

1 row selected.

Elapsed: 00:00:00.01
10:38:31 SQL>
10:38:32 SQL> alter system kill session '64,58703';
alter system kill session '64,58703'
*
ERROR at line 1:
ORA-00031: session marked for kill


Elapsed: 00:01:00.60
10:39:37 SQL>
10:39:58 SQL> select sid,serial#,status from v$session where sid=64;

       SID    SERIAL# STATUS
---------- ---------- --------
        64      58703 KILLED

1 row selected.

Elapsed: 00:00:00.00
10:40:02 SQL>

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表