锁表后引发的几种删除方式与不同的扩展

在开发过程可能会遇到一些特殊场景,诸如我想删除某表,但是无法删除,去找原因发现是发生了锁表,

锁表指的是在执行一个事务时,该事务获取了一个锁并保持其锁定状态,直到事务完成或手动释放锁,导致其他事务无法同时访问相同资源。

-- 排查锁表和解除锁表
select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name, ao.object_name,lo.locked_mode
from v$locked_object lo,dba_objects ao,v$session sess
    where ao.object_id=lo.object_id and lo.session_id=sess.sid;
 
alter system kill session '72,1756’;
--分别为SID和SERIAL#号

--解除锁表后删除原表,建新表
drop table DEPT_TEST_WXX2;

 后来经蒋老师提醒,发现这个方法存在缺陷,

drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。

上面的删除只是在数据库无法使用该表数据,并不是真正意义上的删除,仍会占用数据库空间,真正的删除语句:drop table DEPT_TEST_WXX2 purge;

总结如下:

关于数据库表的几种删除方式和不同(扩展)

Oracle中删除表(drop,truncate,delete)

Drop命令

•drop table books;的指令会将表放到回收站里,用  flashback table “BIN$1Oiy3qm/QJubov1BwBUOgw==$0” to before drop;  就能恢复。    

•删除表:drop table books purge; 是绕过回收站,彻底删除。 

•建议先   purge recyclebin;   清除当前用户的回收站,不会影响其他用户的回收站。

•或者   purge table 表名;  清除回收站内指定的表。

•用drop删除表数据,不但会删除表中的数据,连表结构也被删除了!

truncate命令

•用truncate删除表数据,只是删除表中的数据,表结构不会被删除!

•删除整个表的数据时,过程是系统一次性删除数据,效率比较高

•truncate删除释放空间

delete命令

•用delete删除表数据,只是删除表中的数据,表结构不会被删除!

•虽然也是删除整个表的数据,但是过程是系统一行一行地删,效率比truncate低

•delete删除是不释放空

制作了排版方便记忆(虽然也很丑就是了)锁表后引发的几种删除方式与不同的扩展_第1张图片

你可能感兴趣的:(错误记录,oracle,数据库,oracle)