这里有新鲜出炉的精品教程,程序狗速度看过来!
Oracle Database,又名 Oracle RDBMS,或简称 Oracle。是甲骨文公司的一款关系数据库管理系统。到目前仍在数据库市场上占有主要份额。
这篇文章主要介绍了 Oracle 删除用户和表空间详细介绍的相关资料, 需要的朋友可以参考下
Oracle 删除用户和表空间
Oracle 使用时间长了, 新增了许多 user 和 tablespace. 需要清理一下
对于单个 user 和 tablespace 来说, 可以使用如下命令来完成。
步骤一: 删除 user
- drop user××cascade
说明: 删除了 user,只是删除了该 user 下的 schema objects,是不会删除相应的 tablespace 的。
步骤二: 删除 tablespace
- DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
但是,因为是供开发环境来使用的 db, 需要清理的 user 和 table space 很多。
思路:
Export 出 DB 中所有的 user 和 tablespace, 筛选出系统的和有用的 tablespace, 把有用的信息 load 到一张表中去。然后写例程循环,把不在有用表的 tablespace 删掉
1. select username,default_tablespace from dba_users;
2.
- create table MTUSEFULSPACE
- (
- ID Number(4) NOT NULL PRIMARY KEY,
- USERNAME varchar2(30),
- TABLESPACENAME varchar2(60),
- OWNERNAME varchar2(30)
- );
3.
- declare icount number(2);
- tempspace varchar2(60);
- begin
- for curTable in (select username as allusr,default_tablespace as alltblspace from dba_users)
- loop
- tempspace :=curTable.alltblspace;
- dbms_output.put_line(tempspace);
- select count(TABLESPACENAME) into icount from MTUSEFULSPACE where TABLESPACENAME = tempspace;
- if icount=0 then
- DROP TABLESPACE tempspace INCLUDING CONTENTS AND DATAFILES;
- end if;
- commit;
- end loop;
- end;
执行后会报如下错误
- ORA-06550: 第 10 行, 第 5 列:
- PLS-00103: 出现符号 "DROP"在需要下列之一时:
- begin case declare exit
- for goto if loop mod null pragma raise return select update
- while with <an identifier>
- <a double-quoted delimited-identifier> <a bind variable> <<
- close current delete fetch lock insert open rollback
- savepoint set sql execute commit forall merge pipe
- 06550. 00000 - "line %s, column %s:\n%s"
- *Cause: Usually a PL/SQL compilation error.
- *Action:
好像是被锁了。。
没办法,例程不能写,就只能组出语句执行了。
把需要删除的 user, tablespace 导出到 Excel. 使用 CONCATENATE 组出 SQL.
贴到 SQLdevelop 批量执行。
整个删除会比较耗时间, 100 多个 user. 用了 12 个小时左右。
如要找 datafile 的具体位置,可以使用
- select t1.name,t2.name from v$tablespace t1, v$datafile t2 where t1.ts# = t2.ts#;
SQL code
-- 删除空的表空间,但是不包含物理文件
- drop tablespace tablespace_name;
-- 删除非空表空间,但是不包含物理文件
- drop tablespace tablespace_name including contents;
-- 删除空表空间,包含物理文件
- drop tablespace tablespace_name including datafiles;
-- 删除非空表空间,包含物理文件
- drop tablespace tablespace_name including contents and datafiles;
-- 如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上 CASCADE CONSTRAINTS
- drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
来源: http://www.phperz.com/article/17/0817/339188.html