您的位置:首页 > 数据库 > Oracle

Oracle SYSAUX 表空间 说明

2011-09-28 11:53 369 查看
一. 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_name schema_name move_procedure

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

logmnr system sys.dbms_logmnr_d.set_tablespace

logstdby system sys.dbms_logstdby.set_tablespace

streams sys

xdb xdb xdb.dbms_xdb.movexdb_tablespace

ao sys dbms_aw.move_awmeta

xsoqhist sys dbms_xsoq.olapimoveproc

xsamd olapsys dbms_amd.move_olap_catalog

sm/awr sys

sm/advisor sys

sm/optstat sys

sm/other sys

statspack perfstat

odm dmsys move_odm

sdo mdsys mdsys.move_sdo

wm wmsys dbms_wm.move_proc

ordim ordsys

ordim/plugins ordplugins

ordim/sqlmm si_informtn_schema

em sysman emd_maintenance.move_em_tblspc

text ctxsys dri_move_ctxsys

ultrasearch wksys move_wk

ultrasearch_demo_user wk_test move_wk

expression_filter exfsys

em_monitoring_user dbsnmp

tsm tsmsys

job_scheduler sys



26 rows selected.



这些组件占据这SYSAUX 表空间,所以这些组件的大小也就决定SYSAUX 表空间的大小。 根据这些组件创建时的初始化大小,SYSAUX 至少需要400M的空间。



还有一点要注意,就是这里的schema_name 对应的是用户名。



SQL> desc dba_users;

Name Null? Type

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

USERNAME NOT NULL VARCHAR2(30)

USER_ID NOT NULL NUMBER

PASSWORD VARCHAR2(30)

ACCOUNT_STATUS NOT NULL VARCHAR2(32)

LOCK_DATE DATE

EXPIRY_DATE DATE

DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)

TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)

CREATED NOT NULL DATE

PROFILE NOT NULL VARCHAR2(30)

INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)

EXTERNAL_NAME VARCHAR2(4000)



SQL> select username,account_status,default_tablespace from dba_users;



USERNAME ACCOUNT_STATUS DEFAULT_TABLESPA

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

MDDATA EXPIRED & LOCKED USERS

MDSYS EXPIRED & LOCKED SYSAUX

ORDSYS EXPIRED & LOCKED SYSAUX

CTXSYS EXPIRED & LOCKED SYSAUX

ANONYMOUS EXPIRED & LOCKED SYSAUX

EXFSYS EXPIRED & LOCKED SYSAUX

OUTLN EXPIRED & LOCKED SYSTEM

DIP EXPIRED & LOCKED USERS

DMSYS EXPIRED & LOCKED SYSAUX

DBSNMP OPEN SYSAUX

SCOTT EXPIRED & LOCKED USERS

WMSYS EXPIRED & LOCKED SYSAUX

SYSMAN OPEN SYSAUX

XDB EXPIRED & LOCKED SYSAUX

TSMSYS EXPIRED & LOCKED USERS

ORDPLUGINS EXPIRED & LOCKED SYSAUX

MGMT_VIEW OPEN SYSTEM

SI_INFORMTN_SCHEMA EXPIRED & LOCKED SYSAUX

OLAPSYS EXPIRED & LOCKED SYSAUX

SYS OPEN SYSTEM

SYSTEM OPEN SYSTEM



21 rows selected.



这里没有显示这些组件的描述信息,因为显示不全。 感兴趣的,可以自己查看一下。

SQL> desc v$sysaux_occupants

Name Null? Type

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

OCCUPANT_NAME VARCHAR2(64)

OCCUPANT_DESC VARCHAR2(64)

SCHEMA_NAME VARCHAR2(64)

MOVE_PROCEDURE VARCHAR2(64)

MOVE_PROCEDURE_DESC VARCHAR2(64)

SPACE_USAGE_KBYTES NUMBER



在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_NAME OCCUPANT_DESC SCHEMA_NAME MOVE_PROCEDURE SPACE_USAGE_KBYTES

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

LOGMNR LogMiner SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE 6080



(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_NAME OCCUPANT_DESC SCHEMA_NAME MOVE_PROCEDURE SPACE_USAGE_KBYTES

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

LOGMNR LogMiner SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE 0

--注意,这里占空的空间变成了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_NAME OCCUPANT_DESC SCHEMA_NAME MOVE_PROCEDURE SPACE_USAGE_KBYTES

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

LOGMNR LogMiner SYSTEM SYS.DBMS_LOGMNR_D.SET_TABLESPACE 6080

--大小又变回来了。



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 D***E;

alter tablespace SYSAUX rename to D***E

*

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









---------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: