zoukankan      html  css  js  c++  java
  • Oracle中删除用户下所有对象的多种方法

     

     
    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


     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. --删除某个用户下的对象  
    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.    
    10.  prompt --Drop view  
    11.  select 'drop view ' ||view_name||';' from user_views;  
    12.    
    13.  prompt --Drop sequence  
    14.  select 'drop sequence ' ||sequence_name||';' from user_sequences;   
    15.    
    16.  prompt --Drop function  
    17.  select 'drop function ' ||object_name||';'  from user_objects  where object_type='FUNCTION';  
    18.   
    19.  prompt --Drop procedure  
    20.  select 'drop procedure '||object_name||';' from user_objects  where object_type='PROCEDURE';  
    21.    
    22.  prompt --Drop package  
    23.  prompt --Drop package body  
    24.  select 'drop package '|| object_name||';' from user_objects  where object_type='PACKAGE';  
    25.   
    26.  prompt --Drop database link  
    27.  select 'drop database link '|| object_name||';' from user_objects  where object_type='DATABASE LINK';  
    28.    
    29. spool off;  
    30. set heading on;  
    31. set feedback on;  
    32.   
    33. @@c:dropobj.sql;  
    34. 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 就是键的类型: 
    Sql代码  收藏代码
    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会被同时删除。
    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 一个个个删很麻烦;
  • 相关阅读:
    体验极佳的程序
    如何修改文档等系统文件的位置
    Demo
    Spring Boot与检索/ElasticSearch
    Java NIO:NIO概述
    Centos7 配置静态IP并使用xshell远程连接
    宏定义能否被赋值
    Centos7没有ETH0网卡
    Bringing up interface eth0: Device eth0 does not seem to be presen
    Git 常用命令
  • 原文地址:https://www.cnblogs.com/lcword/p/9798075.html
Copyright © 2011-2022 走看看