delete语句执行不下去,删除不了数据,请问怎么解决?

cartonwang 2011-06-21 11:32:25

delete from sc_tt_stock s
where s.sc_tm_warehouse_id = 1018626;

我执行这条sql,一直没反应。。请问怎么解决呢/?谢谢大家了。。
...全文
11774 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2011-06-21
  • 打赏
  • 举报
回复
那就说明不是锁引起你的delete语句等待的问题,
我可能猜到你的原因了,你外健是不是不存在索引!
由于你delete会对从表进行施加行级锁,但是从表的外健是No action,oracle在删除主表的时候会去寻找所有以主表的主键作为外键的数据表,然后去看从表是否有该外键的索引,如果没有则会对整个从表施加表级锁,然后对从表进行全表扫描。当然如果从表存在外键的索引,会去访问对应的索引,而不会对从表本身进行加锁。
Kobayashi 2011-06-21
  • 打赏
  • 举报
回复 1
delete sc_tt_stock where sc_tm_warehouse_id = '1018626';
commit




cartonwang 2011-06-21
  • 打赏
  • 举报
回复

alter system kill session '554,53236';

我执行该sql后,已经没有锁了。。
再执行

delete from sc_tt_stock s
where s.sc_tm_warehouse_id = 1018626;

还是执行不过去,一直显示:Executing
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
谢谢潘哥哈~~~还是有点疑问。。。

--首先查看有哪些锁
select /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',null) lock_level,
o.owner,
o.object_name,
o.object_type,
s.sid,s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null

--执行结果只有1条
--1 CRP ROW LOCK null null null 554 53236 LENOVO-C1E06E80 WORKGROUP\LENOVO-C1E06E80 plsqldev.exe Administrator



--如果发生了锁等待,看是谁锁了表而引起谁的等待
--以下的语句可以查询到谁锁了表,而谁在等待。 如果有子节点,则表示有等待发生
--这条sql执行结果是0rows
gelyon 2011-06-21
  • 打赏
  • 举报
回复

--首先查看有哪些锁
select /*+ rule */ s.username,
decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',null) lock_level,
o.owner,
o.object_name,
o.object_type,
s.sid,s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null

--如果发生了锁等待,看是谁锁了表而引起谁的等待
--以下的语句可以查询到谁锁了表,而谁在等待。 如果有子节点,则表示有等待发生
select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#
from v$locked_object l,dba_objects o,v$session s
where l.object_id=o.object_id
and l.session_id=s.sid
order by o.object_id,xidusn desc


--找到引起等待的session,杀掉该session:
alter system kill session 'sid,serial#';

cartonwang 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gelyon 的回复:]
跟你说了,你通过v$locked_object 和 v$session查看下你sc_tt_stock表是否被其它session锁住了
如果锁住了,你肯定就不能删除,只能等待那个session事务提交或回滚你才能做
找到那个sid,然后kill掉
[/Quote]

还请潘哥请教啊~~~
coolkisses 2011-06-21
  • 打赏
  • 举报
回复
执行了多久? 先排除是数据查询慢导致的。
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
谢谢潘哥,估价是行级锁住了。我这个warehouse的数据都删不了。。
但要怎么执行,怎么kill掉呢。。。
不懂啊。。还请指教。。


select v$locked_object from dual;--???执行不了
tashiwoweiyi 2011-06-21
  • 打赏
  • 举报
回复
你看下是不是有SQL语句还在执行,

你删除要commit的。。。


下面是查询系统正在运行的SQL语句,你检查下,,,

select a.program,b.spid,c.sql_text from v$session a,v$process b,v$sqlarea c where a.paddr=b.addr and a.sql_hash_value=c.hash_value and a.username is not null;
kingkingzhu 2011-06-21
  • 打赏
  • 举报
回复
锁的问题导致
gelyon 2011-06-21
  • 打赏
  • 举报
回复
跟你说了,你通过v$locked_object 和 v$session查看下你sc_tt_stock表是否被其它session锁住了
如果锁住了,你肯定就不能删除,只能等待那个session事务提交或回滚你才能做
找到那个sid,然后kill掉
cartonwang 2011-06-21
  • 打赏
  • 举报
回复

delete from sc_tt_stock s
where s.sc_tt_stock_id = 342435;
我这样删除一条数据也删不掉。。。
删除s.sc_tm_warehouse_id = 1018626该门店的库存记录都删不掉。。
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
s.sc_tm_warehouse_id 是外键。。。
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
也不报错,就一直执行不下去。。。
tangren 2011-06-21
  • 打赏
  • 举报
回复
什么叫没反应?
表sc_tt_stock数据量很大?
如果数据量很大,查看一下字段sc_tm_warehouse_id是主键吗,有索引吗?
确认一下sc_tm_warehouse_id是什么类型?
如果是varchar2,且有索引,则加上引号才能使用上索引
delete from sc_tt_stock s
where s.sc_tm_warehouse_id = '1018626';

最好查看一下执行计划!
yelang 2011-06-21
  • 打赏
  • 举报
回复
s.sc_tm_warehouse_id = 1018626
这条记录数据库里有吗?如果有的话,需要Commit;

Delete、Update、Insert这三条语执行后要Commit;才会做用到表里。
gelyon 2011-06-21
  • 打赏
  • 举报
回复
是不是存在行级锁,你等待中?
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
谢谢潘哥,都删掉了~~
yejihui9527 2011-06-21
  • 打赏
  • 举报
回复
1、没有记录
2、锁表
3、报错
cartonwang 2011-06-21
  • 打赏
  • 举报
回复
谢谢潘哥。。那怎么解决呢?

我用PK键做where查询语句进行删除也是不行。

delete from sc_tt_stock s
where s.sc_tt_stock_id = 342435;

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧