偶尔发现的,后续变更的时候需要注意下。
一个用户默认的表空间被Drop掉之后,通过DBA_USERS查询, 用户默认的表空间依然是先前的表空间,虽然相关的表空间已经不存在了。需要手工进行相关用户默认表空间的修改。
现网环境是9i的,存在这样的问题,刚刚在10g/11g/12c都测试了,也存在类似的问题。
具体过程如下:
应用搬迁扩容后,需要删除旧的表空间。
-- 删除前首先确认相关表空间中是否还有segment存在,防止误删
SQL> select owner,segment_name,segment_type from dba_segments where tablespace_name='XX_D02_D30_B';
no rows selected
SQL> select owner,segment_name,segment_type from dba_segments where tablespace_name='XX_D02_I30_B';
no rows selected
-- 删除相关表空间。使用“INCLUDING CONTENTS AND DATAFILES”的选项(具体原因见上一篇文章:Oracle Standby环境ORA-01274 01119 27038报错处理
。
SQL> DROP TABLESPACE XX_D02_D30_B INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> DROP TABLESPACE XX_D02_I30_B INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
--查询发现其中个别用户的默认表空间有问题,需要更改。
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYS SYSTEM
SYSTEM SYSTEM
DBSNMP SYSTEM
CXX038 XX_D03_D30_B
OSS XX_D02_D30_B
PERFSTAT PERFSTAT
IDIP XX_D02_D30_B
DBSRVT XX_D02_D30_B
WEB XX_D02_D30_B
OUTLN SYSTEM
WMSYS SYSTEM
11 rows selected.
SQL> alter user & 1 default tablespace XX_D03_D30_B;
Enter value for 1: OSS
old 1: alter user & 1 default tablespace XX_D03_D30_B
new 1: alter user OSS default tablespace XX_D03_D30_B
User altered.
.....
引申讨论下Oracle不同版本用户默认表空间的变迁
Oracle 8i:如果创建用户的时候没有指定DEFAULT TABLESPACE,则用户的默认表空间是SYSTEM表空间。
Oracle 9i:同8i,同样是SYSTEM表空间;增加DEFAULT_TEMP_TABLESPACE设置,具体信息可查询DATABASE_PROPERTIES。
Oracle 10g/11g/12c:DB 创建时增加DEFAULT TABLESPACE设置,可以用于设置DB级别用户的默认表空间,如果未设置,则默认还是SYSTEM表空间。