SYSAUX 說明

531968912發表於2016-01-12

. SYSAUX 說明

Oracle 10g 版本中,引入了SYSTEM表空間的一個輔助表空間: SYSAUX表空間。

SYSAUX 表空間存放一些其他的metadata元件,如OEM,Streams 等會預設存放在SYSAUX表空間裡。這樣也能降低SYSTEM表空間的負載。因此SYSAUX 表空間也是在在DB 建立或者升級時自動建立的。如果在手工使用SQL建立DB時沒有指定SYSAUX tablespace,那麼建立語句會報錯。無法執行。

在正常操作下,不能drop rename SYSAUX 表空間。如果SYSAUX 表空間不可用時,資料庫的核心功能還是可以繼續執行的。只是一些存放在SYSAUX表空間裡的功能收到限制,就如我們之前說的OEM

DB 建立時指定SYSAUX 表空間,必須指定如下4個屬性:

(1).PERMANENT

(2).READ WRITE

(3).EXTENT MANAGMENT LOCAL

(4).SEGMENT SPACE MANAGMENT AUTO

我們不能使用alter tablespace 來修改這4個屬性,同樣也不能drop rename SYSAUX 表空間。

我們可以使用v$sysaux_occupants 檢視來檢視SYSAUX 表空間裡的元件資訊,如:

SQL> select occupant_name,schema_name,move_procedure from v$sysaux_occupants;

occupant_nameschema_namemove_procedure

------------------------- -------------------- ----------------------------------------

logmnrsystemsys.dbms_logmnr_d.set_tablespace

logstdbysystemsys.dbms_logstdby.set_tablespace

streamssys

xdbxdbxdb.dbms_xdb.movexdb_tablespace

aosysdbms_aw.move_awmeta

xsoqhistsysdbms_xsoq.olapimoveproc

xsamdolapsysdbms_amd.move_olap_catalog

sm/awrsys

sm/advisorsys

sm/optstatsys

sm/othersys

statspackperfstat

odmdmsysmove_odm

sdomdsysmdsys.move_sdo

wmwmsysdbms_wm.move_proc

ordimordsys

ordim/pluginsordplugins

ordim/sqlmmsi_informtn_schema

emsysmanemd_maintenance.move_em_tblspc

textctxsysdri_move_ctxsys

ultrasearchwksysmove_wk

ultrasearch_demo_userwk_testmove_wk

expression_filterexfsys

em_monitoring_userdbsnmp

tsmtsmsys

job_schedulersys

26 rows selected.

這些元件佔據這SYSAUX 表空間,所以這些元件的大小也就決定SYSAUX 表空間的大小。根據這些元件建立時的初始化大小,SYSAUX 至少需要400M的空間。

還有一點要注意,就是這裡的schema_name 對應的是使用者名稱。

SQL> desc dba_users;

NameNull?Type

----------------------------------------- -------- ----------------------------

USERNAMENOT NULL VARCHAR2(30)

USER_IDNOT NULL NUMBER

PASSWORDVARCHAR2(30)

ACCOUNT_STATUSNOT NULL VARCHAR2(32)

LOCK_DATEDATE

EXPIRY_DATEDATE

DEFAULT_TABLESPACENOT NULL VARCHAR2(30)

TEMPORARY_TABLESPACENOT NULL VARCHAR2(30)

CREATEDNOT NULL DATE

PROFILENOT NULL VARCHAR2(30)

INITIAL_RSRC_CONSUMER_GROUPVARCHAR2(30)

EXTERNAL_NAMEVARCHAR2(4000)

SQL> select username,account_status,default_tablespace from dba_users;

USERNAME ACCOUNT_STATUSDEFAULT_TABLESPA

------------------------------ -------------------------------- ----------------

MDDATAEXPIRED & LOCKEDUSERS

MDSYSEXPIRED & LOCKEDSYSAUX

ORDSYSEXPIRED & LOCKEDSYSAUX

CTXSYSEXPIRED & LOCKEDSYSAUX

ANONYMOUSEXPIRED & LOCKEDSYSAUX

EXFSYSEXPIRED & LOCKEDSYSAUX

OUTLNEXPIRED & LOCKEDSYSTEM

DIPEXPIRED & LOCKEDUSERS

DMSYSEXPIRED & LOCKEDSYSAUX

DBSNMPOPENSYSAUX

SCOTTEXPIRED & LOCKEDUSERS

WMSYSEXPIRED & LOCKEDSYSAUX

SYSMANOPENSYSAUX

XDBEXPIRED & LOCKEDSYSAUX

TSMSYSEXPIRED & LOCKEDUSERS

ORDPLUGINSEXPIRED & LOCKEDSYSAUX

MGMT_VIEWOPENSYSTEM

SI_INFORMTN_SCHEMAEXPIRED & LOCKEDSYSAUX

OLAPSYSEXPIRED & LOCKEDSYSAUX

SYSOPENSYSTEM

SYSTEMOPENSYSTEM

21 rows selected.

這裡沒有顯示這些元件的描述資訊,因為顯示不全。感興趣的,可以自己檢視一下。

SQL> desc v$sysaux_occupants

NameNull?Type

----------------------------------------- -------- ----------------------------

OCCUPANT_NAMEVARCHAR2(64)

OCCUPANT_DESC VARCHAR2(64)

SCHEMA_NAMEVARCHAR2(64)

MOVE_PROCEDUREVARCHAR2(64)

MOVE_PROCEDURE_DESCVARCHAR2(64)

SPACE_USAGE_KBYTESNUMBER

v$sysaux_occupants 檢視裡有個move_procudure的過程。這個過程就是用遷移元件資訊的。就是對於已經安裝好的元件,如果我們想把這些元件放到其他的空間,就可以使用這個儲存過程。如果沒有對應的過程,就不可移動。

這樣做可以控制SYSAUX表空間的大小。比如我們的AWR AWR SYSAUX 中佔用空間最多的元件。對於一個有10個併發session的系統,就需要200M 的空間。當然,也可以修改AWR的儲存策略來控制AWR所佔用空間的大小。

示例:

2.1. Logminer SYSAUX 表空間,遷移到users表空間,在還原回來

1)檢視之前的資訊:

SQL> select OCCUPANT_NAME,OCCUPANT_DESC,SCHEMA_NAME,MOVE_PROCEDURE,SPACE_USAGE_KBYTES from v$sysaux_occupants where occupant_name='LOGMNR';

OCCUPANT_NAMEOCCUPANT_DESCSCHEMA_NAMEMOVE_PROCEDURESPACE_USAGE_KBYTES

--------------- --------------- -------------------- ---------------------------------------- ------------------

LOGMNRLogMinerSYSTEMSYS.DBMS_LOGMNR_D.SET_TABLESPACE6080

2)移動

SQL> exec SYS.DBMS_LOGMNR_D.SET_TABLESPACE('USERS');

PL/SQL procedure successfully completed.

3)驗證

SQL>select OCCUPANT_NAME,OCCUPANT_DESC,SCHEMA_NAME,MOVE_PROCEDURE,SPACE_USAGE_KBYTES from v$sysaux_occupants where occupant_name='LOGMNR';

OCCUPANT_NAMEOCCUPANT_DESCSCHEMA_NAMEMOVE_PROCEDURESPACE_USAGE_KBYTES

--------------- --------------- -------------------- ---------------------------------------- ------------------

LOGMNRLogMinerSYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE0

--注意,這裡佔空的空間變成了0. 資料遷移到了USERS 表空間

4)還原到SYSAUX 表空間

SQL>exec SYS.DBMS_LOGMNR_D.SET_TABLESPACE('SYSAUX');

PL/SQL procedure successfully completed.

5)驗證

SQL> select OCCUPANT_NAME,OCCUPANT_DESC,SCHEMA_NAME,MOVE_PROCEDURE,SPACE_USAGE_KBYTES from v$sysaux_occupants where occupant_name='LOGMNR';

OCCUPANT_NAMEOCCUPANT_DESCSCHEMA_NAMEMOVE_PROCEDURESPACE_USAGE_KBYTES

--------------- --------------- -------------------- ---------------------------------------- ------------------

LOGMNRLogMinerSYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE6080

--大小又變回來了。

2.2 SYSAUX不能drop

SQL> drop tablespace SYSAUX including contents and datafiles;

drop tablespace SYSAUX including contents and datafiles

*

ERROR at line 1:

ORA-13501: Cannot drop SYSAUX tablespace

2.3 SYSAUX 不能重新命名

SQL> alter tablespace SYSAUX rename to DAVE;

alter tablespace SYSAUX rename to DAVE

*

ERROR at line 1:

ORA-13502: Cannot rename SYSAUX tablespace

2.3 不能將SYSAUX 改成只讀

SQL> alter tablesapce SYSAUX read only;

alter tablesapce SYSAUX read only

*

ERROR at line 1:

ORA-00940: invalid ALTER command

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