zoukankan      html  css  js  c++  java
  • oralce清理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: %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;

  • 相关阅读:
    如何使用SAP Intelligent Robotic Process Automation自动操作Excel
    OpenSAML 使用引导 IV: 安全特性
    Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
    微服务架构集大成者—Spring Cloud (转载)
    Spring Cloud Eureka 服务注册列表显示 IP 配置问题
    使用 Notification API 开启浏览器桌面提醒
    SignalR 中使用 MessagePack 序列化提高 WebSocket 通信性能
    配置 Nginx 的目录浏览功能
    关于 Nginx 配置 WebSocket 400 问题
    Migrate from ASP.NET Core 2.0 to 2.1
  • 原文地址:https://www.cnblogs.com/ikei/p/7404731.html
Copyright © 2011-2022 走看看