也谈Oracle中删除用户下所有对象
因为要对数据库做换版,百度了以下Oracle中删除用户下所有对象的脚本并修改:
/* 保留owner */
BEGIN
FOR obj IN
(SELECT t.owner,t.object_name,object_type from all_OBJECTS t
where t.owner in ('VENTURE',
'TOTAL',
'PARAMS',
'KSMANAGE',
'KINGSTAR',
'HISTORY',
'DCETL',
'CORE',
'CLOSING')
and ( object_type='PROCEDURE'
OR object_type='TABLE'
OR object_type='VIEW'
OR object_type='FUNCTION'
OR object_type='PACKAGE'
OR object_type='PACKAGE BODY'
OR object_type='SEQUENCE' )
)
LOOP
IF obj.object_type='TABLE' THEN
EXECUTE IMMEDIATE 'DROP '||obj.object_type||' '|| obj.owner||'.'||obj.object_NAME||' CASCADE CONSTRAINTS';
ELSE
EXECUTE IMMEDIATE 'DROP '||obj.object_type||' '|| obj.owner||'.'||obj.object_NAME;
END IF;
END LOOP;
END;
然后执行结果并不理想,看来脚本还需要继续做细节优化:
清除所有用户的回收站:purge dba_recyclebin;
dba_objects中的查询结果中,LOB类型变成了TYPE类型,记录依然存在。