问题:
使用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 = '<USER_NAME>';SQL> spool off
2.执行删除语句脚本(drop.sql)SQL> @drop.sql
3.删除用户SQL> DROP USER <USER_NAME> 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';<SQL 文>alter session set events '10046 trace name context off';exit
【怎么办专栏】
数据库技术支持专家免费教你解决工作中的实际问题。