1

膨大な数のレコード (約 150M) を挿入しようとした Oracle テーブルがあります。私は sqldeveloper を使用していましたが、挿入後に「コミット」ボタンをクリックしませんでした。

現在、テーブルはどの操作でも非常に遅いですが、更新またはカウントを行うと、テーブルに 0 レコードがあることが示されます。たとえば、すべてのレコードの更新に 5 時間かかり、0 件のレコードが更新されたとします。

したがって、遅い理由は、コミットされていないトランザクションがあるためだと思います。これらの保留中のトランザクションをコミットするにはどうすればよいですか? (SqlDeveloper は閉じられ、最初の挿入後に開かれました)。

4

3 に答える 3

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 に答える
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 に答える