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


 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會被同時刪除。

聲明:ITeye文章版權屬於作者,受法律保護。沒有作者書面許可不得轉載。

http://www.iteye.com/topic/260823

 

http://blog.csdn.Net/xiaol_zhong/article/details/13094373

******************************************************

 

Oracle刪除當前用戶下的所有表、視圖、序列、函數、存儲過程、包

博客分類:   oracle

 

--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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章