如何理解Oracle SYSAUX表空间

如何理解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表空间的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/199395.html

(0)
上一篇 2021年11月20日
下一篇 2021年11月20日

相关推荐

发表回复

登录后才能评论