删除Oracle 10g中创建的所有内容

0 sql oracle

是否有一个命令可以删除在Oracle 10g中创建的所有内容,以便我可以重新开始?

APC*_*APC 5

清除模式的最简单方法是以DBA身份登录并删除用户:

drop user apc cascade
/
Run Code Online (Sandbox Code Playgroud)

但是,如果您真的想要删除对象,则需要部署一些动态SQL.

declare
    stmt varchar2(2000);
begin
    for r in ( select object_type, object_name
               from user_objects
               where object_type in 
                   ( 'TYPE', 'PACKAGE', 'FUNCTION', 'PROCEDURE', 
                      'SEQUENCE', 'VIEW', 'TABLE', 'MATERIALIZED VIEW')
              _
    loop
         stmt :=  'drop '||r.object_type||' '||r.object_name;
         -- to avoid failures due to foreign keys
         if r.object_type = 'TABLE' then
             stmt := stmt || ' cascade constraints';
         end if;
         execute immediate stmt;
     end loop;
end;
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这应该强制删除模式中的每个对象.但是它有可能会失败(比如说某个其他会话是否锁定了某个对象).此外,由于TYPE继承,它不处理依赖性.因此,有明显的方法可以改进:自动重新运行,重复处理等.但它提供十个启动器.


在现实世界中,与学术界的象牙塔相对,不应该有这样的程序.每个数据库构建脚本都应该具有相同且相反的回归脚本.可悲的是,情况往往并非如此.


"我不知道架构是什么"

模式是用户拥有的所有对象.它与用户无法区分,因为它们共享相同的名称,并且在创建用户时隐式创建空模式.但是,严格来说,它们是两回事. 了解更多.