问题描述:今早ods系统维护人员跑来说建立不了表了。
create table test as select * from dual;
hang住了。半天不成功。
create table test1(a int);成功
检查表空间,排除表空间满了建不了表。
问题重现:
建不了表,hang住,怀疑是锁住了;
查看锁对象:select * from v$locked_object;
XIDUSN XIDSLOT XIDSQN OBJECT_ID SESSION_IDORACLE_USERNAME OS_USER_NAME PROCESS LOCKED_MODE
---------- ---------- ---------- ---------- ---------- ------------------------------------------------------------ ------------ -----------
28 30 519197 9168 151 oracle 21859 6
28 30 519197 9239 151 oracle 21859 3
46 5 191234 18 190 SYS oracle 25058 3
26 49 616912 18 460 SYS oracle 18047 3
发现18号对象被锁了;注:一般object_id序号小的对象都是oracle自己的内部对象。
查看18号对象:select * from dba_objectswhere object_id =18;
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY
SYS OBJ$ 18 18 TABLE 17-四月-07 3:34:45 17-四月-07 4:34:55 2007-04-17:03:34:45 VALID N N N
这是一个系统对象。
~~~查看等待事件~~~
select event from v$session_wait where sid=746;---这个是我测试用的session的sid;
gc current request --创建表的session产生了这个等待:
select * from v$event_name where name='gc currentrequest';
创建表一直hang住,发现的等待事件是:gc curren request
这个就是通信或者竞争严重引起的
我试图找出竞争,但是毫无眉目
做下10046事件追踪~~追踪文件查看:06odsdb1_ora_21756--10046.trc
查看2号节点122的锁对象。
select event,sid,p1,p2,p3 from v$session_wait where event not like 'SQL*%' and event not like 'rdbms%';
select * from v$session a where a.SID in ('165','460','454','151','516','216');
select * from v$sql a where a.SQL_ID in ('gqwsgfwhnhnh7','brg6f6rqm5p42','4n7rfjgcsx7p9');
select * FROM DBA_EXTENTS a where a.segment_name='I_FILE#_BLOCK#';
select * from dba_segments a where a.segment_name='I_FILE#_BLOCK#';
select * from dba_objects a where a.object_name='I_FILE#_BLOCK#';
select * from dba_objects a where a.object_id = '9';
select * from v$locked_object a where a.OBJECT_ID='9';
select * from dba_objects a where a.object_id in ('9168','9239');
select a.STATUS from v$session a where a.STATUS='KILLED';
select * from v$session a where a.WAIT_CLASS<>'Idle';
create table
obj#----516
查到session的sid为516的用户一直存在:"cms 新增用户的几个脚本" 这个session;在122节点里面。直到重新启动121节点,这个才session才消失。这个session把9号对象锁住了。
对节点121的操作:
今早只是看到obj$被锁了。之后做的create的测试操作,都是锁住18号对象,也就是obj$.后来我们把锁进程全部杀死了,还是在锁,还在hang住。
我们查了查segment级别的,2号节点发现这个9号被锁,发现:select* from v$locked_object a where a.OBJECT_ID='9';9号对象被锁了。
这个由于是之前的问题了,问题不能重现,你现在帮忙看看,需要什么再说。
我想知道为什么hang住?之前我问过你我的V$OBJ被锁了。但是那个后来锁的时候没有hang住我create table啊。
为什么产生gc current request等待,我们杀了锁住v$obj的session怎么还hang啊?