当前位置: 首页 > 编程笔记 >

Oracle 删除用户和表空间详细介绍

胡鸿志
2023-03-14
本文向大家介绍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;

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍PHP中的命名空间详细介绍,包括了PHP中的命名空间详细介绍的使用技巧和注意事项,需要的朋友参考一下 概述 PHP对于命名空间的支持,经历了一段艰难的旅程。幸运的是,PHP从5.3开始引入了命名空间。自从PHP引入了命名空间,PHP代码的适用结构也得到了大大的改善。许多编程语言早就有了命名空间的概念,相对于其他语言来说,PHP对于命名空间的支持,稍微有点晚了。不管如何,每一种新特性的

  • 主要内容:Oracle DROP TABLE语句简介,Oracle DROP TABLE示例,Oracle DROP TABLE PURGE示例在本教程中,将学习如何使用Oracle 语句删除现有的表。 Oracle DROP TABLE语句简介 要将表移动到回收站或将其从数据库中完全删除,请使用语句: 在这个语句中: 首先,指出要在子句之后删除的表及其模式。如果不明确指定模式名称,则该语句假定将从模式中删除该表。 其次,指定子句删除引用表中主键和唯一键的所有参照完整性约束。 如果存在这种引用完

  • 本文向大家介绍linux 用户和组命令整理及详细介绍,包括了linux 用户和组命令整理及详细介绍的使用技巧和注意事项,需要的朋友参考一下 1、列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录当前系统的用户的相关信息。 3、取出当前系统上被用户当作起默认shell的最多的那个shell 4、将/etc/passwd中第三个字段数值最大的后10个用户

  • 问题内容: 我正在使用Oracle数据库,但对Drop和Purge命令有些困惑。实际上,对于我来说,两者都做同样的事情。从数据库中删除带有模式的表。两者的主要区别是什么? 删除表表名; 删除表表名清除; 问题答案: 通常,如果表被删除,则将其移入回收站(从Oracle 10g开始)。但是,如果还指定了purge修饰符,则无法从数据库中删除(完全)删除该表。

  • 本文向大家介绍oracle 存储过程详细介绍(创建,删除存储过程,参数传递等),包括了oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)的使用技巧和注意事项,需要的朋友参考一下 oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于

  • 本文向大家介绍详解Linux添加/删除用户和用户组,包括了详解Linux添加/删除用户和用户组的使用技巧和注意事项,需要的朋友参考一下 本文总结了Linux添加或者删除用户和用户组时常用的一些命令和参数。废话不多说,下面我们来看一下。 1、建用户: adduser phpq                             //新建phpq用户 passwd phpq