在oracle9i中,若是未用 DEFAULT TABLESPACE 子句建立的全部用户将以SYSTEM表空间做为它们的默认表空间。同时也不能为数据库指定一个默认的表空间。sql
在Oracle 10g中定义了数据库级别的默认表空间USERS,在建立用户时没有定义默认表空间,就会把数据库级别的默认表空间看成本身的默认表空间。数据库
在10g之前,是把系统表空间(SYSTEMS)看成默认表空间。这样很不合理。oracle
能够使用以下命令查看默认表空间:ide
ALTER DATABASE DEFAULT TABLESPACE users;测试
这里有几个注意事项:spa
1. 若是咱们在建立用户时指定了默认表空间,那么在修改默认表空间后,以前用户的默认表空间也会发生改变。.net
2. 若是咱们在建立用户时没有指定用户表空间,那么默认也会使用DB的默认表空间,这时候若是咱们修改了DB的默认表空间,用户的表空间也会发生改变。orm
3. 若是咱们在建立用户指定用户的表空间是其余的表空间,那么咱们修改DB的默认表空间不会影响用户的表空间。blog
4. DB的默认表空间不能删除,除非将默认表空间指向其余表空间以后才能够删除。it
5. 若是用户的默认表空间指向其余的表空间,当这个表空间被drop 以后,用户的默认表空间会自动指向DB的默认表空间。
SQL> select * from v$version;
BANNER
-----------------------------------------------------------------------
Oracle Database 11g Enterprise EditionRelease 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0- Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> SELECT PROPERTY_VALUE
2 FROM database_properties
3 WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE';
PROPERTY_VALUE
-------------------------------------------------------------
USERS
SQL> create user dave1 identified bydave1;
User created.
SQL> select default_tablespace from dba_users where username ='DAVE1';
DEFAULT_TABLESPACE
------------------------------
USERS
--默认表空间为users。
SQL> create user dave2 identified by dave2 default tablespace users;
User created.
SQL> select default_tablespace fromdba_users where username ='DAVE2';
DEFAULT_TABLESPACE
------------------------------
USERS
--建立表空间:
SQL> create tablespace dave3 datafile'D:\APP\ADMINISTRATOR\ORADATA\NEWCCS\dave3.dbf' size 10M;
Tablespace created.
--建立用户:
SQL> create user dave3 identified by dave3 default tablespace dave3;
User created.
SQL> select default_tablespace from dba_users where username ='DAVE3';
DEFAULT_TABLESPACE
------------------------------
DAVE3
SQL> ALTER DATABASE DEFAULT TABLESPACEdave3;
Database altered.
SQL> select default_tablespace from dba_users where username ='DAVE3';
DEFAULT_TABLESPACE
------------------------------
DAVE3
SQL> select default_tablespace fromdba_users where username ='DAVE2';
DEFAULT_TABLESPACE
------------------------------
DAVE3
SQL> select default_tablespace fromdba_users where username ='DAVE1';
DEFAULT_TABLESPACE
------------------------------
DAVE3
--注意这里Dave1,dave2用户的默认表空间都变成了dave3.
--如今dave3是咱们的默认表空间
SQL> SELECT PROPERTY_VALUE
2 FROM database_properties
3 WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE'
4 ;
PROPERTY_VALUE
----------------------------------------------------------
DAVE3
--drop dave3 看看:
SQL> drop tablespace dave3 includingcontents and datafiles;
drop tablespace dave3 including contentsand datafiles
*
ERROR at line 1:
ORA-12919: Can not drop the defaultpermanent tablespace
这里报错ORA-12919.
咱们把默认表空间改为USERS,在测试:
SQL> ALTER DATABASE DEFAULT TABLESPACEUSERS;
Database altered.
SQL> drop tablespace dave3 including contents and datafiles;
Tablespace dropped.
Dave3表空间成功drop。 注意,咱们的dave3用户的表空间之间是指向dave3的,如今咱们把dave3表空间drop了,咱们看一下dave3 如今默认表空间:
SQL> select default_tablespace from dba_users where username ='DAVE3';
DEFAULT_TABLESPACE
------------------------------
USERS
--这里自动变成了咱们的DB 默认的表空间。