• Oracle表空间


    表空间属性:

    一个数据库可以包含多个表空间,一个表空间只能属于一个数据库;

    一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。

    表这空间可以划分成更细的逻辑存储单元

    Oracle 数据库的存储结构:

    从逻辑的角度来看, 一个数据库( database )下面可以分多个表空间( tablespace );一个表空间下面又可以分多个段( segment ),一个数据表要占一个段( segment );一个索引也要占一个段( segment )。

    一个段(segment)由多个区间(extent)组成,那么一个区间由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。

    那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是存在磁盘上的文件。这些文件是由 oracle 数据库操作系统的 block 组成的。

    Segment (段):段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

    Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象。

    查看表空间:

    SQL> select * from v$tablespace;
    
           TS# NAME                           INC BIG FLA ENC
    ---------- ------------------------------ --- --- --- ---
             0 SYSTEM                         YES NO  YES
             1 SYSAUX                         YES NO  YES
             2 UNDOTBS1                       YES NO  YES
             4 USERS                          YES NO  YES
             3 TEMP                           NO  NO  YES
             6 EXAMPLE                        YES NO  YES
             7 TEST                           YES NO  YES
    
    7 rows selected.
    

      

    查看每个表空间有哪些数据文件

    SQL> select file_name,tablespace_name from dba_data_files;
    
    FILE_NAME                                          TABLESPACE_NAME
    -------------------------------------------------- ------------------------------
    /oracle/app/oracle/oradata/orcl/users01.dbf        USERS
    /oracle/app/oracle/oradata/orcl/undotbs01.dbf      UNDOTBS1
    /oracle/app/oracle/oradata/orcl/sysaux01.dbf       SYSAUX
    /oracle/app/oracle/oradata/orcl/system01.dbf       SYSTEM
    /oracle/app/oracle/oradata/orcl/example01.dbf      EXAMPLE
    /oracle/app/oracle/oradata/orcl/test.dbf           TEST
    
    6 rows selected.
    

      

    创建一个表空间:

    SQL> create tablespace test 
        datafile '/oracle/app/oracle/oradata/orcl/test.dbf' 
        size 20m;
    

      

    表空间根据对区间(extents)的管理分为两种类型

    字典管理表空间(Dictionary-managed tablespaces)

    在表空间里,有的区间被占用了,有的没被占用,这些数据是放在数据字典里的。当你对这个表空间进行分配或释放的时候,数据文件里相关的表就会做修改。

    本地管理表空间(locally managed tablespace)

    本地管理表空间不是在数据词典里存储表空间的,由自由区管理的表空间。用位图来自由的管理区间。一个区间对一个位,如果这个位是 1 表示已经被占用,0 表示未被占用。词典管理空间表示“中央集权治”,本地管理表空间表示“省市自治区”,一个 databases 表示中国,tablespaces 表示一个省或直辖市。词典管理统一由中央调配。而本地管理表示有高度的自治权利,自已各种资源的分配不用上报中央。

    本地管理优点

    1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。

    2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲空间、已使用空间的信息,从而减少了数据字典表的竞争,提高了空间管理的并发性。

    3. 区的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。

    4. 表空间里的区的大小可以选择由 Oracle 系统来决定,或者由数据库管理员指定一个统一的大小,避免了字典表空间一直头疼的碎片问题。

    5. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。

    由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。

    数据库中预配置的表空间

    01、SYSTEM 表空间

    Oracle 服务器使用 SYSTEM 表空间管理数据库。这个表空间包含的数据字典和表中包含关于数据库的管理信息。上述信息均包含在 SYS 方案中,只有 SYS 用户或者拥有所需权限的其它管理用户才可访问这些信息。

    02、SYSAUX 表空间

    这是 SYSTEM 表空间的辅助表空间。Oracle DB 早期版本中某些使用 SYSTEM 表空间保存系统表空间的组件和产品,现在改为使用 SYSAUX 表空间。每个 Oracle Database 10g(或更高版本)数据库都必须拥有 SYSAUX 表空间。

    如果 SYSAUX 表空间不可用时, 数据库的核心功能还是可以继续运行的,只是一些存放在 SYSAUX 表空间里的功能会有限制

    我们不能使用 alter tablespace 来修改这个表空间的属性,同样也不能 drop 和 rename SYSAUX 表空间。

    03、TEMP:如果执行的 SQL 语句需要创建临时段(如大规模排序或创建索引),则需要使用临时表空间,临时表空间主要用途是在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理。Oracle 的临时表空间创建之后基本不占用表空间。

    正常来说,在完成 Select 语句、 create index 等一些使用 TEMP 表空间的排序操作后, Oracle 是会自动释放掉临时段的。

    注意这里的释放,仅仅是将这些空间标记为空闲,并可重用,真正占用的磁盘空间并没有释放。 所以 Temp 表空间可能会越来越大。排序是很耗资源的, Temp 表空间满了,关键是优化你的语句,尽量使排序减少才是上策.

    创建临时表空间:

    SQL>create temporary tablespace temp 
        datafile '/oracle/product/oradata/itpuxdb/temp02.dbf' 
        size 20m 
        extent management 
        local uniform size 4m;
    

      

    04、UNDOTBS1:这是数据库服务器用于存储还原信息的还原表空间。如果数据库使用“自动还原管理”,那么数据库在任何指定时间只能使用一个还原表空间。此表空间是在创建数据库时创建的。

    Undo 类型的表空间,当你对一张表或一条记录进行修改的时候,它会对修改之前的信息进行保存,这样可以保证数据的回滚。Undo 只包含 undo 类型的对象,不能包含任何其他对象,只适合于数据文件和区间管理。

    创建 undo 类型的表空间:

    SQL>create undo tablespace undo1 
        datafile '/oracle/product/oradata/itpuxdb/undo1.dbf' 
        size 20m;
    

    05、USERS:此表空间用于存储用户对象和数据。如果在创建用户时未指定默认的表空间,则 USERS 表空间将成为该用户创建的所有对象的默认表空间。对于 SYS 和 SYSTEM 用户,默认的永久表空间是 SYSTEM。

    06、EXAMPLE:此表空间包含创建数据库时可以安装的示例方案。这些示例方案为各种示例提供了一个通用平台。在 Oracle 文档和课件中包含了建立在这些示例方案基础上的示例。

    注:为简化管理,通常为索引使用单独的表空间。

    删除表空间:

    删除表空间,使用命令 drop tablespace ‘表空间名’ 但是有 3 个选项需要注意:

    INCLUDING CONTENTS:指删除表空间中的 segments;

    INCLUDING CONTENTS AND DATAFILES:指删除 segments 和 datafiles;

    CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。

    例:

    DROP TABLESPACE ITPUX ‘表空间名’ CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
    
  • 相关阅读:
    MySQL补充
    不同操作系统下虚拟环境的搭建
    Python导学基础(二)变量与基础数据类型
    Python导学基础(一)介绍
    KM 算法
    题解-CF1065E Side Transmutations
    题解-CF1140E Palindrome-less Arrays
    题解-CF677D Vanya and Treasure
    splay文艺平衡树
    splay区间操作(bzoj1500)
  • 原文地址:https://www.cnblogs.com/black-start/p/11001782.html
Copyright © 2020-2023  润新知