一. 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/,如需轉載,請註明出處,否則將追究法律責任。