1

我有一个 Oracle 表,我试图在其中插入大量记录(大约 150M)。我使用的是 sqldeveloper,插入后我没有单击“提交”按钮。

现在该表在任何操作上都非常缓慢,但如果我进行更新或计数,它显示该表有 0 条记录。例如,更新所有记录需要 5 个小时,它更新了 0 条记录。

所以我认为它之所以慢是因为上面有未提交的事务。我如何提交这些待处理的交易?(SqlDeveloper 在初始插入后已关闭并打开)。

4

3 回答 3

3

您可能在该表上没有索引,因此您必须运行全表扫描。并且表的“高水位”被向前移动了。尝试通过执行“alter table shrink space compact”来减小表段的大小。或者您可以使用“老式”命令“alter table move”,但这会使您的表的索引无效,并且这些索引也必须重建。

注意:Oracle 表不是自我碎片整理的。

于 2013-08-19T10:22:39.907 回答
0

如果您有必要的特权,您可以使用

    select    nvl(S.USERNAME,'Internal') username,
                nvl(S.TERMINAL,'None') terminal,
                L.SID||','||S.SERIAL# Kill,
                U1.NAME||'.'||substr(T1.NAME,1,20) tab,
                decode(L.LMODE,1,'No Lock',
                               2,'Row Share',
                               3,'Row Exclusive',
                               4,'Share',
                               5,'Share Row Exclusive',
                               6,'Exclusive',null) lmode,
                decode(L.REQUEST,1,'No Lock',
                               2,'Row Share',
                               3,'Row Exclusive',
                               4,'Share',
                               5,'Share Row Exclusive',
                               6,'Exclusive',null) request
                from      V$LOCK L,
                V$SESSION S,
                SYS.USER$ U1,
                SYS.OBJ$ T1
    where  L.SID = S.SID
    and        T1.OBJ# = decode(L.ID2,0,L.ID1,L.ID2)
    and        U1.USER# = T1.OWNER#
    and        S.TYPE != 'BACKGROUND'
order by 1,2,5

这个 sql 给你任何表中的锁,你可以杀死它们

于 2013-08-19T08:30:45.197 回答
0

您的表可能已被锁定,请从系统用户运行以下查询以查明该表是否有任何锁定。

select
  object_name, 
  object_type, 
  session_id, 
  type,                 -- Type or system/user lock
  lmode,        -- lock mode in which session holds lock
  request, 
  block, 
  ctime                 -- Time since current mode was granted
from
  v$locked_object, all_objects, v$lock
where
  v$locked_object.object_id = all_objects.object_id AND
  v$lock.id1 = all_objects.object_id AND
  v$lock.sid = v$locked_object.session_id
ORDER BY
  session_id, ctime desc, object_name;
于 2013-08-19T08:32:15.443 回答