问题:
使用DROP USER ... CASCADE删除用户时执行特别慢怎么办?
方法:
使用DROP USER ... CASCADE删除用户时,如果目标用户有太多表等对象的话,执行可能会非常慢。作为临时处理方法可以先删除目标用户Schema中的所有对象,然后删除用户。
例:
1.通过如下SQL列出目标用户所有对象的删除语句脚本(drop.sql)SQL> set pages 0SQL> spool drop.sqlSQL> select 'drop ' || object_type || ' ' || owner || '.' || object_name || ';' from dba_objects where owner = '';SQL> spool off
2.执行删除语句脚本(drop.sql)SQL> @drop.sql
3.删除用户SQL> DROP USER CASCADE ;
如果想进一步调查原因的话,可以设置10046跟踪文件看看到底什么操作花费了更多的时间。
例:
set timing onset time onalter session set tracefile_identifier='10046';alter session set max_dump_file_size = UNLIMITED;alter session set timed_statistics=true;alter session set events '10046 trace name context forever, level 12';alter session set events '10046 trace name context off';exit
【怎么办专栏】
数据库技术支持专家免费教你解决工作中的实际问题。
关于小编:
10+年数据库运维/开发/技术支持经验,多年项目维护/开发/团队管理经验,熟悉Oracle/MySQL/DB2等关系型数据库,翻译出版《MySQL基础教程》,Oracle 11g OCM大师认证、10g/11g/12c OCP、RAC&GI OCE、Cloud等认证专家,IBM DB2 数据库V8.1 DBA认证。
本文仅代表个人观点,与任何公司无关。
领取专属 10元无门槛券
私享最新 技术干货