insert into select执行时间很长

wxcnl1 2013-04-15 04:03:06
我在pl/sql developer里面执行
INSERT INTO PRODUCTION(OPERATIONID,STARTDATE,ENDDATE,PRODUCTIONQUANTITY,UNITOFMEASURECODE,DEACTIVATE,IMPORTID,SOURCEID,LASTMODIFIEDDATE,USER01NUMBER,USER02NUMBER,USER03NUMBER,USER01FIELD,USER02FIELD,USER03FIELD)
(SELECT OPERATION.OPERATIONID, V_PRODUCTION .STARTDATE, V_PRODUCTION .ENDDATE, V_PRODUCTION .PRODUCTIONQUANTITY, V_PRODUCTION .UNITOFMEASURECODE, V_PRODUCTION .DEACTIVATE, V_PRODUCTION .IMPORTID, V_PRODUCTION .SOURCEID, V_PRODUCTION .RUNDATE, V_PRODUCTION .USER01NUMBER, V_PRODUCTION .USER02NUMBER, V_PRODUCTION .USER03NUMBER, V_PRODUCTION .USER01FIELD, V_PRODUCTION.USER02FIELD, V_PRODUCTION .USER03FIELD
FROM V_PRODUCTION
inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode
);
commit;

V_PRODUCTION 是一个视图,问题是这条语句执行了好长时间都不结束,select语句单独执行是成功的,而且就7条数据这是为什么?本人刚刚从sqlserver转过来,不是特别清楚啊,谢谢
...全文
675 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sych888 2013-04-18
  • 打赏
  • 举报
回复
可以join v$Lock v$Lock 获得谁在block谁 select a.sid ||' is blocking '||b.sid from v$lock a,v$Lock b where a.id1=b.id1 and a.id2=b.id2 and a.block=1 and b.request>0;
陈字文 2013-04-16
  • 打赏
  • 举报
回复
引用 3 楼 wxcnl1 的回复:
应该是锁的问题 请问,当创建好一个用户后,并且创建了一个新的表,是不是oracle就自动地给该表赋予了锁的功能,因为我查看了一下我的项目的之前的创建数据库的脚本,好像没有什么特别的比如类似create table的语句,请回答,谢谢 我如何操作,会导致我上面问题的出现呢?
锁的发生情况很多.... 比如,某一个事务正在修改这个表的数据,另外一个事务也要修改这个表的数据. 比如,你某个同事SELECT * FROM XXX FOR UPDATE,你也恰好在执行UPDATE XXX SET 比如,在某个过程中,正在UPDATE ,恰好,你也在UPDATE 这些都可能会导致加锁. 这个是我之前的一篇模拟加锁的小测试: http://blog.csdn.net/ziwen00/article/details/6331037 试一下,就很明白了.
wxcnl1 2013-04-16
  • 打赏
  • 举报
回复
应该是锁的问题 请问,当创建好一个用户后,并且创建了一个新的表,是不是oracle就自动地给该表赋予了锁的功能,因为我查看了一下我的项目的之前的创建数据库的脚本,好像没有什么特别的比如类似create table的语句,请回答,谢谢 我如何操作,会导致我上面问题的出现呢?
adaizi1980 2013-04-15
  • 打赏
  • 举报
回复
试试 create table PRODUCTION_test (SELECT OPERATION.OPERATIONID, V_PRODUCTION .STARTDATE, V_PRODUCTION .ENDDATE, V_PRODUCTION .PRODUCTIONQUANTITY, V_PRODUCTION .UNITOFMEASURECODE, V_PRODUCTION .DEACTIVATE, V_PRODUCTION .IMPORTID, V_PRODUCTION .SOURCEID, V_PRODUCTION .RUNDATE, V_PRODUCTION .USER01NUMBER, V_PRODUCTION .USER02NUMBER, V_PRODUCTION .USER03NUMBER, V_PRODUCTION .USER01FIELD, V_PRODUCTION.USER02FIELD, V_PRODUCTION .USER03FIELD FROM V_PRODUCTION inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode ); 如果这样快了,检查PRODUCTION表里是否有锁. 如果这样速度也慢,检查select count(1) FROM V_PRODUCTION inner join OPERATION on OPERATION.operationcode = V_PRODUCTION .OperationCode 确认查询出来的结果的确是7,再检查下optimizer_mode参数值,看设置成CHOOSE会不会快一些。
陈字文 2013-04-15
  • 打赏
  • 举报
回复
引用 楼主 wxcnl1 的回复:
我在pl/sql developer里面执行 INSERT INTO PRODUCTION(OPERATIONID,STARTDATE,ENDDATE,PRODUCTIONQUANTITY,UNITOFMEASURECODE,DEACTIVATE,IMPORTID,SOURCEID,LASTMODIFIEDDATE,USER01NUMBER,USER02NUMBER,U……
如果7条数据是比较迅速的,检查锁.

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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