如何擦除一组 Oracle 模式?
擦除的意思是删除所有数据、表、视图、过程、同义词等等。
答案1
以 SYSTEM 身份启动 sqlplus,然后输入:
drop user MYSCHEMA cascade;
对所有想要删除的模式重复此操作。
答案2
这是一个开始,而不是一个完整的脚本——我很确定如果用户有任何使用 AQ 配置的队列,它就会失败。
declare
l_sql varchar2(2000);
begin
for i in (select object_type, object_name
from dba_objects
where owner = :user_to_be_wiped
and object_type in ('TYPE', 'PACKAGE', 'PROCEDURE', 'FUNCTION',
'TABLE', 'VIEW', 'SEQUENCE', 'DATABASE LINK')
loop
l_sql := 'drop ' || :user_to_be_wiped || ' ' || i.object_type || '.' i.object_name;
if i.object_type = 'TABLE' then
l_sql := l_sql || ' cascade constraints';
end if;
execute immediate l_sql;
end loop;
end;
/
答案3
我发现为了能够删除对象,您必须使用以下命令禁用外键约束。
select status,
'alter table '||table_name||' disable constraint "'
||constraint_name||'";' from user_constraints
where r_constraint_name is not null
order by owner,table_name
;
如果这不起作用,我使用以下命令删除外键约束。
select status,
'alter table '||table_name||' drop constraint "'
||constraint_name||'";' from user_constraints
where r_constraint_name is not null
order by owner,table_name
;