如何理解Oracle SYSAUX表空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一. 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 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
看完上述内容,你们掌握如何理解Oracle SYSAUX表空间的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。