drop user和drop user cascade的區別

1.oracle數據庫中刪除用戶有兩種命令,一種是 drop user xxx;另外一個種是drop user xxx cascade;

2.官方的說明如下:

Dropping a Database User: Example If user Sidney's schema contains no objects, then you can drop sidney by issuing the statement:

DROP USER sidney;

If Sidney's schema contains objects, then you must use the CASCADE clause to drop sidney and the objects:

DROP USER sidney CASCADE;

大概就是說drop user xxx必須是這個用戶下面沒有任何對象;這樣纔可以使用這個命令,否則就會報錯;如果用戶下面有對象,就得用drop user xxx cascade來刪除這個用戶以及這個用戶下的所有對象了;

3.測試實驗;

環境:我的DELL筆記本電腦,系統是XP,oracle10g 32位

腳本如下:


C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 12月 26 22:46:12 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba;
已連接。
SQL> show user;
USER 爲 "SYS"
SQL> create user mary identified by mary;

用戶已創建。

SQL> grant dba to mary;

授權成功。

SQL> --創建好用戶mary後,查看這個用戶下面是否有對象;
SQL> select object_type,count(*) from all_objects where owner='MARRY' group by object_type

未選定行

SQL> --發現沒有任何對象,那我們試着來刪除用戶mary;
SQL> drop user mary;

用戶已刪除。

SQL> --現在我們再重新創建一個用戶jack;
SQL> create user jack identified by jack;

用戶已創建。

SQL> grant dba to jack;

授權成功。

SQL> --以jack用戶連接到數據庫,並創建一個表;
SQL> conn jack/jack;
已連接。
SQL> show user;
USER 爲 "JACK"
SQL> create table test (id number(2),
  2  name varchar2(10));

表已創建。

SQL> --再以sys用戶連接來查看jack下面是否有對象;
SQL> conn / as sysdba
已連接。
SQL> show user;
USER 爲 "SYS"
SQL> select object_type,count(*) from all_objects where owner='JACK' group by object_type;

OBJECT_TYPE           COUNT(*)
------------------- ----------
TABLE                        1

SQL> --發現下面有一個表,然後我們嘗試用drop user命令來刪除用jack;
SQL> drop user jack;
drop user jack
*
第 1 行出現錯誤:
ORA-01922: 必須指定 CASCADE 以刪除 'JACK'


SQL> --發現報錯了,無法刪除,因爲用戶jack下面有對象;然後我們用drop user cascade來刪除jack;
SQL> drop user jack cascade;

用戶已刪除。

SQL> --測試成功;


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