Oracle中删除用户下所有对象的多种方法

时间:2022-09-24 18:00:54
 
Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助。 方法1: drop user XXXX cascade; drop tablespace XXXX INCLUDING CONTENTS; 方法2: 写存储过程实现
 

Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助。

方法1:

drop user XXXX cascade;

drop tablespace XXXX INCLUDING CONTENTS;

最省心的方法是级联删除

drop user XXXX cascade; 最后这个级联特别有用(删除用户以及所有关联的数据库对象)

麻烦一点的办法,把删除语句做成存储过程

注释:

1、删除用户 然后重建,这样最快:

1、在cmd中输入
sqlplus / as sysdba
2、删除用户A,级所有和用户A关联的数据
drop user a cascade;
3、重建用户A
create user A identified by 密码;
grant connect,resource to A;
4、登入A用户,就ok了
conn A/密码
这个方法挺快的,还方便啊。

drop
user xxx cascade这样有些数据库对象好像也删除不了

有时候某些用户被授予很复杂的权限和角色,(若删除用户再创建用户的方法会很繁琐),所以还是衡量哪种方法更快,根据实际情况选择

我常做db換版,
所以寫了上百個腳本, 附上8個.

01_clear_recyclebin_plsql.sql
02_del_mviews_plsql.sql 有時確保 mview 避免刪除, 這個可以不執行
03_del_table_plsql.sql
04_del_function_plsql.sql  這個可以*調整
05_del_scheduler_plsql.sql
06_del_program_plsql.sql
07_del_program_plsql.sql
08_del_synonyms_plsql.sql

Oracle中删除用户下所有对象的多种方法 08_del_synonyms_plsql.sql (597
Bytes, 下载次数: 0) 
Oracle中删除用户下所有对象的多种方法 07_del_program_plsql.sql (802
Bytes, 下载次数: 0) 
Oracle中删除用户下所有对象的多种方法 06_del_program_plsql.sql (797
Bytes, 下载次数: 1) 
Oracle中删除用户下所有对象的多种方法 05_del_scheduler_plsql.sql (777
Bytes, 下载次数: 0) 
Oracle中删除用户下所有对象的多种方法 04_del_function_plsql.sql (1.4
KB, 下载次数: 0) 
Oracle中删除用户下所有对象的多种方法 03_del_table_plsql.sql (806
Bytes, 下载次数: 2) 
Oracle中删除用户下所有对象的多种方法 02_del_mviews_plsql.sql (601
Bytes, 下载次数: 1) 
Oracle中删除用户下所有对象的多种方法 01_clear_recyclebin_plsql.sql (1.01
KB, 下载次数: 0)

希望對你有幫助, 祝你好運.

删除表时要先删除其外键再删除表本身,其他数据库对象貌似可以直接删除自己:

begin
  -- 1、删除外键
  for s in (select 'alter table ' || c.TABLE_NAME || ' drop constraint ' ||
                   c.CONSTRAINT_NAME text
              from user_constraints c
             where constraint_type = 'R') loop
    execute immediate s.text;
  end loop;
  -- 2、删除对象(表等数据库对象)
  for s in (select 'drop ' || o.OBJECT_TYPE || ' ' || o.OBJECT_NAME text
              from user_objects o
             where o.OBJECT_TYPE in
                   ('FUNCTION', 'PROCEDURE', 'PACKAGE', 'SEQUENCE', 'TABLE')) loop
    execute immediate s.text;
  end loop;
end;
/

--这个简单点儿,可能不全面

http://www.itpub.NET/thread-849733-2-1.html

2、

删除指定表空间是这样:
drop tablespace test1 including contents cascade constraints;
之后还要手动删除数据文件,因为上述操作只是删除了控制文件和数据字典中的记录。如果想简单可以使用OEM来删除,但我并不推荐。
删除指定表空间下的表使用select table_name,tablespace_name from user_talbes;然后把这些表做删除,可能会比较麻烦。
——————————————————
因为我手上没有oracle,所以看不到数据字典,我记得desc

user_tables应该可以看到一个owner之类的,总之就是可以确定表格的归属,然后删除。楼上说删除用户的方法也不是很好。如果不是很清楚依然可以使用oem操作,然后选择显示SQL,就可以看到了。

方法2:

写存储过程实现

DECLARE
TYPE name_list IS TABLE OF VARCHAR2(40);
TYPE type_list IS TABLE OF VARCHAR2(20);

Tab_name name_list:=name_list();
Tab_type type_list:=type_list();

sql_str VARCHAR2(500);
BEGIN
sql_str := 'select uo.object_name,uo.object_type from user_objects uo
where uo.object_type not in(''INDEX'',''LOB'') order by uo.object_type
desc';
EXECUTE IMMEDIATE sql_str BULK COLLECT INTO tab_name,tab_type;

FOR i IN Tab_name.FIRST.. Tab_name.LAST LOOP
sql_str := 'DROP ' || Tab_type(i) || ' ' || Tab_name(i);
EXECUTE IMMEDIATE sql_str;
END LOOP;
END;

http://www.php100.com/html/webkaifa/database/oracle/2010/1117/6832.html

*******************************************************************

ORACLE下删除当前用户下所有对象
  1. --删除某个用户下的对象
  2. set heading off;
  3. set feedback off;
  4. spool c:\dropobj.sql;
  5. prompt --Drop constraint
  6. select 'alter table '||table_name||' drop constraint '||constraint_name||' ;' from user_constraints where constraint_type='R';
  7. prompt --Drop tables
  8. select 'drop table '||table_name ||';' from user_tables;
  9. prompt --Drop view
  10. select 'drop view ' ||view_name||';' from user_views;
  11. prompt --Drop sequence
  12. select 'drop sequence ' ||sequence_name||';' from user_sequences;
  13. prompt --Drop function
  14. select 'drop function ' ||object_name||';'  from user_objects  where object_type='FUNCTION';
  15. prompt --Drop procedure
  16. select 'drop procedure '||object_name||';' from user_objects  where object_type='PROCEDURE';
  17. prompt --Drop package
  18. prompt --Drop package body
  19. select 'drop package '|| object_name||';' from user_objects  where object_type='PACKAGE';
  20. prompt --Drop database link
  21. select 'drop database link '|| object_name||';' from user_objects  where object_type='DATABASE LINK';
  22. spool off;
  23. set heading on;
  24. set feedback on;
  25. @@c:\dropobj.sql;
  26. host del c:\dropobj.sql;

注释: 
1.上面这个语句,在pl/sql里面是放在命令里面执行的。 
2.set heading off; 意思就是关闭表头。如果不关闭,写入dropobj.sql文件中就会带有结果集的表头如: 
'DROPTABLE'||TABLE_NAME||';' 
------------------------------------------ 
drop table TEACHER; 
实际上我们需要的是“drop table TEACHER;”,“'DROPTABLE'||TABLE_NAME||';' 
”就是表头。 
3.set feedback off; 意思就是关闭回显。如果不关闭,写入dropobj.sql文件中就会带有返回结果集的大小等信息,如:"137 rows selected" 
4.spool c:\dropobj.sql; 把结果集写入这个文件。spool off; 结束写入。 
5.@@c:\dropobj.sql; 执行这个sql 
6.host del c:\dropobj.sql; 删除主机上这文件。 
7.CONSTRAINT_TYPE 就是键的类型:

  1. C (check constraint on a table)
  2. P (primary key)
  3. U (unique key)
  4. R (referential integrity)
  5. V (with check option, on a view)
  6. O (with read only, on a view)

8.当执行'drop package ………… '这句时,package body会被同时删除。

声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。

http://www.iteye.com/topic/260823

http://blog.csdn.Net/xiaol_zhong/article/details/13094373

******************************************************

--delete tables 
Sql代码  
select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;

select 'drop table ' || table_name ||';'||chr(13)||chr(10) from user_tables;

--delete views 
Sql代码  
select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;

select 'drop view ' || view_name||';'||chr(13)||chr(10) from user_views;

--delete seqs 
Sql代码  
select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;

select 'drop sequence ' || sequence_name||';'||chr(13)||chr(10) from user_sequences;

--delete functions 
Sql代码  
select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';

select 'drop function ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='FUNCTION';

--delete procedure 
Sql代码  
select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';

select 'drop procedure ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PROCEDURE';

--delete package 
Sql代码  
select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';

select 'drop package ' || object_name||';'||chr(13)||chr(10) from user_objects where object_type='PACKAGE';

 
 

因为ORACLE等中大型数据库一般不推荐采用批量删除,因为效率会很慢,还是逐行删除比较好。

http://zhidao.baidu.com/question/43963217.html?qbl=relate_question_0&word=oracle%C9%BE%B3%FD%D3%C3%BB%A7%CF%C2%CB%F9%D3%D0%B6%D4%CF%F3&optimi=4

==================================================================

ORACLE删除当前用户下所有的表的方法

1、如果有删除用户的权限,则可以:

drop user user_name cascade;

加了cascade就可以把用户连带的数据全部删掉。

删除后再创建该用户。
--创建管理员用户
create user 用户名 identified by 密码 default tablespace space_data(表空间名称) temporary tablespace space_temp(临时表空间名称);
--授权
grant connect,dba to 用户名;
--修改限额
ALTER USER "用户名" QUOTA UNLIMITED ON SPACE_DATA(表空间名称);

--查看所有用户对象
select uo.object_name,uo.object_type from user_objects uo where uo.object_type<>'LOB' order by uo.object_type desc

2、如果没有删除用户的权限,则可以执行:

select 'drop table '||table_name||';' 
from cat 
where table_type='TABLE'

将会输出一批删除表的sql语句,这些SQL语句执行一下就可以了。(需要有drop table的权限)

http://www.cnblogs.com/chshnan/archive/2012/02/07/2341694.html

如何删除oracle中指定用户下的所有表

在该用户下写一个存储过程(要保证该用户并不是以dba身份登录的,不然会把系统表都删掉哦)
create or replace procedure pro_droptable is
cursor cur is select table_name from user_tables;
drop_sql varchar2(1000);
begin
for tbname in cur loop
begin
drop_sql:='drop table '||tbname.table_name;
execute immediate drop_sql;
end;
end loop;
end pro_droptable;

然后执行就OK啦
执行语句:call pro_droptable()
注释:

在Oracle中如何删除当前用户下所有的表?

前提条件:我没有删除该用户的权限,不用能drop user user_name cascade;
只能用drop table XXX 一个个个删很麻烦;

Oracle中删除用户下所有对象的多种方法的更多相关文章

  1. Oracle中scott用户下基本表练习SQL语句

    --选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...

  2. oracle中scott用户下四个基本表SQL语句练习

    --选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...

  3. ORACLE删除某用户下所有对象

    ORACLE删除某用户下所有对象 2013-10-26 15:50 4996人阅读 评论(1) 收藏 举报   --.sql脚本 --唯一注意的是下面的D:\dropobj.sql 为操作的.sql; ...

  4. oracle中删除某个用户下的所有表

    一般的方法:先使用sql查询: SELECT 'DELETE FROM '|| table_name || ';' FROM USER_TABLES ORDER BY TABLE_NAME; 将查询结 ...

  5. Oracle 删除用户和表空间&sol;&sol;&sol;&sol;Oracle创建删除用户、角色、表空间、导入导出、&period;&period;&period;命令总结&sol;&sol;&sol;&sol;&sol;Oracle数据库创建表空间及为用户指定表空间

    Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下 对于单个user和tablespace 来说, 可以使用如下命令来完成. 步骤一:  删除user drop ...

  6. 查询oracle中所有用户信息 禁用用户

    ----查询oracle中所有用户信息 ----1.查询数据库中的表空间名称 ----1)查询所有表空间 select tablespace_name from dba_tablespaces; se ...

  7. 创建表空间、新增用户、给用户赋予DBA权限 、删除用户下的上有数据表

    正文原创 一:查询数据库实例有多少用户: [oracle@localhost ~]$ sqlplus / as sysdba; SQL*Plus: Release 11.2.0.3.0 Product ...

  8. oracle中的用户详解 【转】

      oracle中的用户很多,也很令初学者费解.oracle中的帐户分为两类:一类是必需的帐户,一类是存储各种应用的帐户 用户名 密码 描述 ANONYMOUS ANONYMOUS 访问http的匿名 ...

  9. oracle查询当前用户下所有的表,包括所有的字段

    oracle查询当前用户下所有的表,包括所有的字段 背景: ​ 前两天接到一个需求,做一个展示所有表名,表备注,表数据,表字段数,点击查看按钮查看字段名和注释,支持导出. 在Oracle中,可用使用视 ...

随机推荐

  1. vtkBoxWidget2Example

    This example uses a vtkBoxWidget2 to manipulate an actor. The widget only contains the interaction l ...

  2. 利用JS提交表单的几种方法和验证

    第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 <script type="text/javascript"> function ...

  3. sql server 2012 5120错误

    把放置放置数据库的文件夹的权限更改为完全控制即可解决这个问题.

  4. JPA简单知识

    ,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...

  5. sublime text 3 中 SFTP插件 的 配置

    SFTP 插件.主要功能就是通过 FTP/SFTP 连接远程服务器并获取文件列表,可以选择下载编辑.重命名.删除等等操作,点下载编辑之后,可以打开这个文件进行修改.修改完成之后,保存一下会自动上传到远 ...

  6. cf E&period; Valera and Queries

    http://codeforces.com/contest/369/problem/E 题意:输入n,m; n 代表有多少个线段,m代表有多少个询问点集.每一个询问输出这些点的集合所占的线段的个数. ...

  7. 怎样在Github参与一个开源项目

    转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热 ...

  8. DBProxy 入门到精通系列&lpar;二&rpar;&colon;DBProxy快速入门教程

    这里主要用来了解有关DBProxy方面的部署及基本的配置,以及模拟架构 1 DBProxy方面的安装部署 1)基础环境的部署 # .x86_64 Percona-Server-client-.x86_ ...

  9. asp&period;net core webapi文件上传

    最近开发一个新项目,使用了asp.net core 2.0,采用webapi开发后台,postgresql为数据库.最先来的问题就是上传文件的问题. POST文件的一些坑 使用默认模板创建webapi ...

  10. java 查看线程死锁

    那我们怎么确定一定是死锁呢?有两种方法. 1>使用JDK给我们的的工具JConsole,可以通过打开cmd然后输入jconsole打开. 1)连接到需要查看的进程.