擦除一组 Oracle 模式的简单方法

擦除一组 Oracle 模式的简单方法

如何擦除一组 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
;

相关内容