Oracle使用者預設表空間的問題

dbinsight發表於2013-09-20
偶爾發現的,後續變更的時候需要注意下。
一個使用者預設的表空間被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表空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29154652/viewspace-772932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章