zoukankan      html  css  js  c++  java
  • 表空间基本概念

    数据库的运行需要依赖于操作系统,而数据库本身也保存在操作系统的磁盘上,所以当用户向数据表中保存数据时,最终数据是被保存在了磁盘上,只是这些数据是按照固定的格式进行保存,就像这样:

    通过上图可发现,在数据库数据和磁盘数据之间存在下面两种结构:

    逻辑结构:Oracle中所引入的结构,开发人员所操作的都只针对Oracle的逻辑
    物理结构:操作系统所拥有的存储结构,逻辑结构到物理结构的转换由Oracle数据库管理系统来完成;

    Oracle引入两个操作结构的目的:

    系统数据库具有很强的可移植性,即只要数据文件按照规定的标准进行数据的存储,那不同的厂商就可以定义属于自己的逻辑结构,实现逻辑结构的关键就是表空间;

    表空间是Oracle最大的逻辑结构,每一个Oracle数据库都会由若干表空间组成,每个表空间由多个数据文件组成。

    用户创建的表也统一被表空间管理;

    表空间与磁盘上的数据文件对应,所以直接与物理存储结构关联;

    用户在数据库中创建的数据表,索引,视图,子程序等,都被表空间保存到了不同的区域内;

    数据库,表空间,表的理解:可见整个数据库理解为图书馆,每一个表空间相当于书架,每张表相当于书架上的书。为了方便用户查阅,图书的分类依靠书架上的标签(表受表空间管理),而书架必须放在图书馆(表空间受到数据库管理)里;

    表空间分类

    系统表空间:是在数据库创建时与数据库一起建立起来的,例如用户用于撤销的事务处理,或者使用的数据字典就保存在系统表空间中,例如system或sysaux表空间;

    非系统表空间:由具备指定管理员权限的数据库用户创建,主要用于保存用户数据,索引等数据库对象,例如USERS,TEMP,UNDOTBSI等表空间;

    实际上,一般用户使用的都是非系统表空间;

    创建表空间

    定义非系统表空间的基本语法:

    create [TEMPORARY] tablespace 表空间名称  
    [DATAFILE | TEMPFILE 表空间文件保存路径 ....] [SIZE 数字[K|M]]  
    [AUTOEXTEND ON|OFF] [NEXT 数字 [K|M]]  
    [LOGGING | NOLOGGING];本语法各个创建子句的相关说明: 
    1. datafile:保存表空间的磁盘路径,可以设置多个保存路径;
    2. tempfile:保存临时表空间的磁盘路径;
    3. size:开辟的空间大小,其单位有K(字节)和M(兆);
    4. autoextend:是否为自动扩展表空间,如果为ON表示可以自动扩展表空间大小,反之为OFF;
    5. next:可以定义表空间的增长量;
    6. logging|nologging:是否需要对DML进行日志记录,记录下的日志可以用于数据恢复;

    永久性表空间是为了保存用户的对象数据,例如,当使用create语句创建对象,或者使用insert语句进行数据保存,实际上这些信息都保存在了永存表空间中。

    临时表空间的是用于排序操作使用,如果用户在sql中order by或group by子句时,Oracle需要对所选的数据进行排序,如果排序量较大,就需要把一些中间的排序结果保存在磁盘上,即保存在临时表空间中;

    示例:创建一个mldn_data的数据表空间:此实例可使用sys账号来做,使用其它账号可能会出现权限不足的问题;

    CREATE TABLESPACE mldn_data  
      
    DATAFILE  'd:mldndsmldn_data01.dbf' SIZE 50M ,  
      
     'e:mldndsmldn_data02.dbf' SIZE 50M  
      
    AUTOEXTEND on NEXT 2M  
      
    LOGGING ; 
    此sql会创建一个mldndata的数据表空间,而此表空间对应两个数据文件,data01,data02。同时这两个数据文件的初始化大小均为50m。当空间不足时,可以自动进行容量的扩容,每次扩充2M大小;
    注意:此sql不会自动创建跟目录,要人工手动创建;

    示例2:创建一个mldn_temp的临时表空间,创建临时表空间的关键字是tempfile

    CREATETEMPORARY TABLESPACE mldn_temp  
      
    TEMPFILE'd:mldndsmldn_temp01.dbf' SIZE 50M ,  
      
     'e:mldndsmldn_temp02.dbf' SIZE 50M  
      
    AUTOEXTENDon NEXT 2M ; 

    示例3:创建完表空间后,可以利用dba_tablespaces这个数据字典查看表空间信息

      利用dba_tablespaces查看表空间信息
    SELECTtablespace_name,block_size,extent_management,status,contents FROMdba_tablespaces ;  

    通过此数据字典的查询结果可以发现,此表空间为本地磁盘管理(LOCAL),mldn_data表空间为永久表空间(permanent),而mldn_temp为临时表空间;

    示例4:利用dba_temp_files数据字典查看数据文件信息

    SELECTtablespace_name,file_name,bytes,autoextensible FROM dba_temp_files ;  

    示例5:利用dba_data_files数据字典查看数据文件信息

    SELECTtablespace_name,file_name,bytes,autoextensible,online_status FROMdba_data_files ; 

    使用表空间

    用户在默认情况下所创建的数据表都会保存在默认表空间中(可由用户定义,默认为users表空间)。如果需要将数据表保存在不同的表空间下,可使用如下的语法:

    语法:创建数据表并使用特定表空间

    create table 用户名.表名称(  
      
    字段名称 字段类型 default 默认值,  
      
    字段名称 字段类型 default 默认值,  
      
    ....  
      
    ) tablespace 表空间名称;

    示例1:用户在定义表时直接使用tablespace就可以指定要操作的表空间

    创建数据表,指定表空间,此sql执行完毕之后,创建mytab会保存在mldn_data表空间中保存;
    CREATE TABLE mytab(  
      
    id        NUMBER ,  
      
    title        VARCHAR2(50)  
      
    ) TABLESPACE mldn_data ; 

    附录:Oracle中的默认表空间

    Oracle默认提供的表空间,作用如下:

    system表空间:在一个数据库中至少有一个表空间,即system表空间,创建数据库时必须指明表空间数据文件的特征,如数据文件名称,大小,system主要是存储数据库的数据字典,在Oracle系统表空间中存储全部的PL/SQL程序的源代码和编译后的代码。例如存储过程,函数,包,数据库触发器。如果要大量PL/SQL,就应该设置足够大的system表空间;
    sysaux表空间:是system表空间的辅助表空间,许多数据库的工具和可选组件将其对象存储sysaux表空间内,它是许多数据库工具和可选组件的默认表空间;
    users表空间:用于存储用户的数据;
    undo表空间(undotbsi)表空间:用于事务的回滚,撤销;
    temp临时表空间:用于存放Oracle运行中需要临时存放的数据,如排序的中间结果等;
  • 相关阅读:
    MPI 学习
    关于谱聚类
    线程调度的学习例子
    [转] Linux的IO复用
    网络编程socket
    关于python机器学习常用算法的例子
    [转](阿里笔试)使用多线程和sleep函数生成字符串的伪随机排列
    Single Number II
    阿里面试题,N个士兵的通话问题
    凸优化算法之牛顿法
  • 原文地址:https://www.cnblogs.com/dravenz/p/7818620.html
Copyright © 2011-2022 走看看