Oracle OCP(48):UNDO TABLESPACE

一个人想着一个人 提交于 2019-11-28 21:54:52

一、基本语法

CREATE [BIGFILE|SMALLFILE] UNDO TABLESPACE
[数据文件语句]
[范围管理语句]
[一致性保护]

二、数据文件大小

  1. 数据文件的路径名:DATAFILE datefile_spec1 [,datefile_spec2] …
  2. 文件的初始大小:[SIZE INTEGER [K|M|G|T|P|E]]
  3. 重用:[REUSE]
  4. 表明是否自动扩展:[AUTOEXTEND]
    • 不自动扩展:OFF
    • 自动扩展:ON
      • 表示数据文件满了以后,扩展的大小:[NEXT INTEGER [K|M|G|T|P|E]]
      • 最大扩展到:[MAXSIZE ]
        • 表示无限的表空间:[UNLIMITED]
        • 表示数据文件的最大大小:INTEGER [K|M|G|T|P|E]]

三、范围管理语句

说明了表空间如何管理范围。一旦你声明了这个子句,只能通过移植的方式改变这些参数。

  • 如果希望表空间本地管理的话,声明local选项,本地管理表空间是通过位图管理的
    EXTENT MANAGEMENT LOCAL
    • 说明表空间自动分配范围,用户不能指定范围的大小。只有9.0以上的版本具有这个功能。
      AUTOALLOCATE
    • uniform说明表空间的范围的固定大小,缺省是1m。
      UNIFORM [SIZE INTEGER [K|M|G|T|P|E]]
  • 如果没有设置extent_management_clause,oracle会给他设置一个默认值。
    • compatible小于9.0.0:如果初始化参数,那么系统创建字典管理表空间。
    • compatible大于9.0.0:
      那么按照如下设置
      • 如果没有指定 default storage_clause,oracle创建一个自动分配的本地管理表空间。
      • 如果指定 default storage_clause
        • 如果指定了 mininum extent,那么 oracle 判断 mininum extent、initial、next 是否相等,以及pctincrease是否=0.
          • 如果满足以上的条件,oracle创建一个本地管理表空间,extent size是initial。
          • 如果不满足以上条件,那么oracle将创建一个自动分配的本地管理表空间。
        • 如果没有指定mininum extent。initial、那么oracle判断next是否相等,以及pctincrease是否=0。
          • 如果满足oracle创建一个本地管理表空间并指定uniform。
          • 否则oracle将创建一个自动分配的本地管理表空间。

注意:本地管理表空间只能存储永久对象。如果你声明了local,将不能声明default storage_clause,mininum extent、temporary.

四、一致性保护

如果你倾向于保证数据一致性,也就是专注于查询,那么你有必要通过ALTER TABLESPACE undotbs1 RETENTION GUARANTEE,来保证一致性,也就是不管你空间够不够用,你都不可以使用inactive状态的区,这样就有可能导致由于没有可用的undo空间而导致数据库hang住,但是这样你可以保证查询语句执行时间在 undo_retention值之内的所有查询的一致性。

  • RETENTION
    • GUARANTEE:
    • NOGUARANTEE:

五、常用语句

CREATE UNDO TABLESPACE UNDOTBS1
DATAFILE '+ARCHDG1' SIZE 30G
EXTENT MANAGEMENT LOCAL;

六、UNDO使用情况

SELECT TABLESPACE_NAME,
       SUM(ACTIVE_MB) ACTIVE_MB,
       SUM(UNEXPIRED_MB) UNEXPIRED_MB,
       SUM(EXPIRED_MB) EXPIRED_MB
  FROM (SELECT TABLESPACE_NAME,
               DECODE(STATUS, 'ACTIVE', SIZE_MB) ACTIVE_MB,
               DECODE(STATUS, 'UNEXPIRED', SIZE_MB) UNEXPIRED_MB,
               DECODE(STATUS, 'EXPIRED', SIZE_MB) EXPIRED_MB
          FROM (SELECT TABLESPACE_NAME,
                       (SUM(BLOCKS) * 8) / 1024 SIZE_MB,
                       STATUS
                  FROM DBA_UNDO_EXTENTS
                 GROUP BY TABLESPACE_NAME, STATUS))
 GROUP BY TABLESPACE_NAME
 ORDER BY TABLESPACE_NAME
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!