1、 truncate 表报 ORA-00054 ,标明有事务正在操作该表
SQL> truncate table alldm.DM_XQKD_YUJING_D;truncate table alldm.DM_XQKD_YUJING_D *ERROR at line 1:ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired2、 找到正在操作该表的session与sql
SQL> set linesize 400SQL> set pagesize 400SQL> col object_name for a40SQL> select OWNER,OBJECT_NAME,OBJECT_ID from dba_objects where object_name='DM_XQKD_YUJING_D';OWNER OBJECT_NAME OBJECT_ID
------------------------------ ---------------------------------------- ----------ALLDM DM_XQKD_YUJING_D 7525915SQL> select SESSION_ID,OBJECT_ID from v$locked_object where OBJECT_ID = '7525915';
SESSION_ID OBJECT_ID
---------- ---------- 2226 7525915SQL> set linesize 400
SQL> set pagesize 400SQL> select sql_text from v$session a,v$sqltext_with_newlines b where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value and a.sid=&sid order by piece; Enter value for sid: 2226old 3: and a.sid=&sid order by piecenew 3: and a.sid=2226 order by pieceSQL_TEXT
----------------------------------------------------------------INSERT /*+APPEND*/ INTO DM_XQKD_YUJING_D SELECT /*+ORDERED*/ :B2 , A.AREA_NO, A.CITY_NO, A.XIAOQU_NO PLOT_ID, A.XIAOQU_NAME PLOT3、 找到该session的os进程
select a.username, a.sid, a.serial#, b.spid "OS Process", to_char(a.logon_time,'DD/MM/YYYY hh24:mi:ss') "Logon time", a.osuser, a.program, a.statusfrom v$session a, v$process bwhere a.sid = &sidand a.paddr = b.addr/USERNAME SID SERIAL# OS Process Logon time OSUSER PROGRAM STATUS
------------------------------ ---------- ---------- ------------------------ ------------------- ------------------------------ ------------------------------------------------ --------ALLDM 2226 28311 76949 13/01/2018 06:04:24 bca JDBC Thin Client ACTIVE4、 kill session
SQL> alter system kill session '2226,28311';System altered.5、 在os层面核实进程是否被kill
oracle@hbdw1:/oratmp$ps -ef | grep 76949oracle 11057 116412 0 16:21 pts/2 00:00:00 grep 769496、 再次truncate成功
SQL> truncate table alldm.DM_XQKD_YUJING_D;Table truncated.