DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间。导致系统表空间迅速被用户数据占满,直至宕机。 7 O+ @! w" D- i/ f( I3 n) v! C
在10G中,DBA有办法避免这种问题了——在线指定系统默认表空间:
r& F1 r7 v2 u( v2 V$ r. A P ALTER DATABASE DEFAULT TABLESPACE ;
! A/ r0 C9 `7 I' l/ y) g+ z 通过执行以上命令,可以设定系统的默认表空间。这样的话,在创建新用户时,如果不指定他的默认表空间,就会采用上面指定的系统默认表空间作为这个用的默认表空间。
& S: F X$ R/ r( _, O( Q SQL>conn /as sysdba
$ V! q, c) e5 `+ v3 j SQL> create user test1 identified by test1 default tablespace ringidx;
- u- z- p6 |( P, J! l8 A; w o4 H/ W 用户已创建。
\& V2 A9 ?7 P M7 Y4 k- q SQL> alter database default tablespace ring; + H+ e% z0 a% H* B. T) e
数据库已更改。 6 g8 K& l- I; @3 s
SQL> create user test identified by test; 4 ]0 `' f' S. {$ v
用户已创建。
. A" }$ S1 ~1 ^& U$ e2 C SQL> select username, default_tablespace defspace from dba_users where ! V4 d. h' T Q6 V
username=’TEST’;
% n! L# L$ T- B; G5 h USERNAME DEFSPACE
: F$ Q* [! r2 Q9 H; ? |. n' F ————– —————- - J" Q3 [% l F, Y: q5 O
TEST RING ' M; c1 [+ y& w' y
但是要注意的是,一旦将系统默认表空间修改了以后,原有的所有普通用户的默认表空间都会被指定为这个表空间,如上例中test1,创建时指定了他的默认表空间为ringidx,执行了’alter database default tablespace ring’后,他的默认表空间也被改为了ring。 : k4 X0 ?% `/ W) i( S$ Q* y, ?
SQL> select username, default_tablespace defspace from dba_users where 8 M' A% g5 h- m, i/ S- ]
username=’TEST1′;
/ i, e# H* X; D USERNAME DEFSPACE
( f3 F. b# C' C2 M ————– —————- |