漂亮蓝影 发表于 2018-9-12 12:04:49

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_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
  *
  ERROR at line 1:
  ORA-13502: Cannot rename SYSAUX tablespace
  2.3 不能将SYSAUX 改成只读

  SQL>>  alter tablesapce SYSAUX read only
  *
  ERROR at line 1:

  ORA-00940: invalid>
页: [1]
查看完整版本: Oracle SYSAUX 表空间说明