1. 程式人生 > >Oracle中刪除使用者下所有物件的多種方法

Oracle中刪除使用者下所有物件的多種方法

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


 
 
 
 
 
 
 
 

希望對你有幫助, 祝你好運.

刪除表時要先刪除其外來鍵再刪除表本身,其他資料庫物件貌似可以直接刪除自己:

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.  prompt --Drop view  
  10.  select 'drop view ' ||view_name||';' from user_views;  
  11.  prompt --Drop sequence  
  12.  select 'drop sequence ' ||sequence_name||';' from user_sequences;   
  13.  prompt --Drop function  
  14.  select 'drop function ' ||object_name||';'  from user_objects  where object_type='FUNCTION';  
  15.  prompt --Drop procedure  
  16.  select 'drop procedure '||object_name||';' from user_objects  where object_type='PROCEDURE';  
  17.  prompt --Drop package  
  18.  prompt --Drop package body  
  19.  select 'drop package '|| object_name||';' from user_objects  where object_type='PACKAGE';  
  20.  prompt --Drop database link  
  21.  select 'drop database link '|| object_name||';' from user_objects  where object_type='DATABASE LINK';  
  22. spool off;  
  23. set heading on;  
  24. set feedback on;  
  25. @@c:\dropobj.sql;  
  26. 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; 結束寫入。 
[email protected]@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 optionon a view)  
  6. O (with read onlyon 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

==================================================================

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 一個個個刪很麻煩;
不行,刪不了

相關推薦

(轉)Oracle刪除使用者所有物件多種方法

方法1: drop user XXXX cascade; drop tablespace XXXX INCLUDING CONTENTS; 最省心的方法是級聯刪除 drop user XXXX cascade; 最後這個級聯特別有用(刪除使用者以及所有關聯的資料

Oracle刪除使用者所有物件多種方法

Oracle刪除使用者下所有物件的方法未必人人都會,下面就為您介紹兩種常用的Oracle刪除使用者下所有物件的方法,希望對您學習Oracle刪除使用者方面能有所幫助。 方法1: drop user XXXX cascade; drop tablespace XXXX INCLUDING CONT

Oracle刪除某個使用者所有資料呢

//刪除表空間 DROP TABLESPACE tablespacename INCLUDING CONTENTS AND DATAFILES; //刪除使用者 drop user username cascade;

db2 9.7刪除一個schema所有物件

例如刪除schema db2 -x "select 'drop sequence '||seqschema||'.'||seqname||';'from syscat.sequences where seqschema = 'XXSCHEMA'" > drop.sql db2 -tf dr

oracle刪除空間表

先刪除主表,然後刪除相關空間系統表的與主表相關的記錄 drop table GEO_TABLE delete from sde.table_registry where table_name ='GEO_TABLE' delete from sde.column_registry t whe

Oracle查詢User其他使用者表資訊

對於外包的人員來說,對於資料庫中的開放都是設定了許可權的,最近我就遇到了問題,比如說想要查詢使用者下面的某個使用者的表資訊,一開始不知道,後來進行了排查有所瞭解。 select * from使用者名稱。表名即可查詢出表的內容了 想要查詢當前登入使用者下的某個使用者

java遞迴刪除目錄所有內容

java遞迴刪除目錄下所有內容  private static boolean deleteDir(File dir) {if (dir.isDirectory()) {        String[] children = dir.list

oracle刪除和截斷表

1.truncate table命令       -ddl語句       -無法回退       -能夠刪除表的所有行,同時保持表的定義不變       -比delete語句速度快       -truncate table 表名 2.delete語句      -dml

oracle刪除語句delete,truncate,drop的幾種方式區別

我們都知道oracle中經常用到的刪除語句主要有三種,分別是delete,truncate,drop三種。這裡總結下它們的區別:相同點:1、truncate和不帶where字句的delete以及drop都會刪除表內資料2、truncate和drop都是ddl語句(資料定義語句

oracle sql like劃線 _ 查詢

select t.*, t.rowid from tb_user t where t.name like '%\_' escape '\'; 這樣就能查出tb_user表中所有name以 _ 結尾的記

Unity編輯器獲取資料夾所有物件

有一次需要在Editor模式下獲取任意資料夾下的所有資源物件,包括子資料夾,我嘗試了AssetDatabase.LoadAllAssetsAtPath(string assetPath),理想中的Object[]沒有返回,而是給我返回了null;查閱google得知這個方法

刪除Oracle奇怪的表名稱BIN$…的方法

從Oracle10g開始刪除資料庫表的時候並不是真正刪除表,而是把表放到了recyclebin中,這個過程類似於windows裡面刪除的檔案會被臨時放到回收站中。   刪除的表系統會自動給他重新命名就是大家看到的【BIN$】開頭的名字。   通過show recycl

用rm遞迴刪除子目錄所有.o字尾檔案

-name  按照檔名查詢檔案。 -perm  按照檔案許可權來查詢檔案。 -prune  使用這一選項可以使find命令不在當前指定的目錄中查詢,如果同時使用-depth選項,那麼-prune將被find命令忽略。 -user  按照檔案屬主來查詢檔案。 -group  按照檔案所屬的組來查詢檔案。 -mt

oracle—將指定使用者所有表的查詢許可權賦給另一個使用者

一、建立新使用者user2。 二、在指定使用者(user1)下執行以下語句: select   'grant select on user1.' || t.table_name  || ' to user2;'  from user_tables t 輸出指令碼,複製指令碼

java從一個物件陣列刪除元素和判斷物件陣列存了幾個元素的方法

//從陣列中刪除元素方法 private int arrayTotal=0; Pet[] pets=new Pet[10]; pets[1]=dog; pets[2]=cat; pets[3]=pig

Oracle刪除表操作trunc delete和drop的說明

相同點: 1.truncate和不帶where子句的delete, 以及drop都會刪除表內的資料。 2.drop,truncate都是DDL語句,執行後會自動提交。 不同點: 1. truncate和 delete只刪除資料不刪除表的結構(定義)     drop語句將

linux遞歸刪除目錄所有exe文件---從刪庫到跑路篇

com .exe strong 文件 文件目錄 刪庫 color bsp exe linux下遞歸刪除目錄下所有exe文件 find . -name ‘*.exe‘ -type f -print -exec rm -rf {} \; (1) "." 表示從

oracle 刪除表 drop delete truncate

區別 使用 const 所有 不生效 生效 qq群 過程 https 獲取更多測試幹貨,請加QQ群66719336、或者我QQ號168632201、或者我微信獲取,微信二維碼:https://files-cdn.cnblogs.com/files/UncleYong/wei

以雙劃線開始的方法

tin data .py docs track new 屬性 enc attr *參考:https://docs.python.org/2/reference/datamodel.html#special-method-names 一 經常使用: (1)__init

如何統計應用各個包有多少個方法

ont ins fail generate nat classes ini them ise https://github.com/KeepSafe/dexcount-gradle-plugin A Gradle plugin to report the number of