SELECT * FROM V$SESSION WHERE SID IN ( select a.SID,b.sql_text from v$open_cursor a,v$sql b where b.SQL_ID=a.SQL_ID and upper(b.sql_text) like '%TEMPTABLE%' ) 秘密在于V$OPEN_CURSOR,这个DBA视图会保留着当前服务器打开的游标。 而所有的DML操作,ORACLE都会赋予一个游标的。所以,只要找到这个游标对应的SID,就能找到是那个会话,进而KILL session。
如过要删除这个临时表.必须确保所有的会话(session)都没在
使用它.才可以删除.
select a.SID,b.sql_text from v$open_cursor a,v$sql b where
b.SQL_ID=a.SQL_ID and
upper(b.sql_text) like '%TEMPTABLE%'
)
秘密在于V$OPEN_CURSOR,这个DBA视图会保留着当前服务器打开的游标。
而所有的DML操作,ORACLE都会赋予一个游标的。所以,只要找到这个游标对应的SID,就能找到是那个会话,进而KILL session。