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
08_del_synonyms_plsql.sql (597 Bytes, 下载次数: 0)
07_del_program_plsql.sql (802 Bytes, 下载次数: 0)
06_del_program_plsql.sql (797 Bytes, 下载次数: 1)
05_del_scheduler_plsql.sql (777 Bytes, 下载次数: 0)
04_del_function_plsql.sql (1.4 KB, 下载次数: 0)
03_del_table_plsql.sql (806 Bytes, 下载次数: 2)
02_del_mviews_plsql.sql (601 Bytes, 下载次数: 1)
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下删除当前用户下所有对象
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 就是键的类型:
Sql代码
8.当执行'drop package ………… '这句时,package body会被同时删除。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
http://www.iteye.com/topic/260823
http://blog.csdn.Net/xiaol_zhong/article/details/13094373
******************************************************
博客分类: oracle
--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
==================================================================
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