更新包或其他对象时,如果包或其他对象被引用,则Oracle会产生一个DDL锁,进程则处于等待状态,利用以下SQL可以查看数据库当前的存在的DDL锁,可以根据CMD字段中的命令,将引起锁的进程结束。 CREATE OR REPLACE VIEW XT_V_LOCKSOBJECT AS select o.owner,o.object_name,s.sid,s.serial#,s.USERNAME,s.STATUS,s.machine,s.PROGRAM,'alter system kill session ' || chr(39) || to_char(s.SID) || ',' || to_char( s.SERIAL# ) || chr(39) || ';' as cmd from v$locked_object l,dba_objects o ,v$session s where l.object_id = o.object_id and l.session_id=s.sid --and s.STATUS = 'ACTIVE' union SELECT DISTINCT "SYS"."DBA_DDL_LOCKS"."OWNER", "SYS"."DBA_DDL_LOCKS"."NAME", "SYS"."V_$SESSION"."SID", "SYS"."V_$SESSION"."SERIAL#", "SYS"."V_$SESSION"."USERNAME", "SYS"."V_$SESSION"."STATUS", "SYS"."V_$SESSION"."MACHINE", "SYS"."V_$SESSION"."PROGRAM",'alter system kill session '|| chr(39) || to_char("SYS"."V_$SESSION"."SID") || ',' || to_char( "SYS"."V_$SESSION"."SERIAL#" ) || chr(39) || ';' as cmd FROM "SYS"."DBA_DDL_LOCKS","SYS"."V_$SESSION" WHERE ( "SYS"."DBA_DDL_LOCKS"."SESSION_ID" = "SYS"."V_$SESSION"."SID" ) AND ( SYS."V_$SESSION"."STATUS" = 'ACTIVE' )