> 文章列表 > Oracle 逻辑结构体系

Oracle 逻辑结构体系

Oracle 逻辑结构体系

  • 逻辑结构
    • 数据库(DATABASE)是由若干表空间组成,表空间是由若干段组成,段是由若干区组成,区是由Oracle最小单元的若干块组成。
    • 表空间(TABLESPACE)
      • 创建表空间
        • create tablespace 表空间名称
          • 表空间大小
            • select sum(bytes)/1024/1024 from dba_data_files where tablespace_name='TBS_LJB';
          • 表空间剩余大小查询
            • select sum(bytes)/1024/1024 from dba_free_space where tablespace_name='TBS_LJB';
          • 表空间不足需要扩大空间
            • alter tablespace TBS_LJB add Datafile 位置 100M;
            • 将表空间设置为自动扩大
              • 将数据字典dba_data_files的AUTOEXTENSIABLE的属性设置为Yes,No为不自动扩大
              • alter database datafile 位置 autoextensiable on;
      • 普通数据表空间
        • create tablespace TBS_LJB
        • select file_name,tablespace_name,autoextensible,bytes from DBA_DATA_FILES where tablespace_name='TBS_LJB' order by substr(filename,-12);
      • 系统表空间
        • 属于永久保留内容的表空间
        • select file_name,tablespace_name,autoextensible,bytes/1024/1024 from DBA_DATA_FILES where tablespace_name like 'SYS%' order by substr(file_name,-12);
      • 回滚段表空间
        • 语法有些特殊,有UNDO关键字
        • 创建
          • create undo tablespace undotbs2 datafile 位置 size 100M;
        • 查询
          • select file_name,tablespace_name,autoextensible,bytes/1024/1024 from DBA_DATA_FILES where tablespace_name='UNDOTBS2' order by substr(file_name,-12);
        • 查询当前在用的回滚段
          • show parameter undo
        • 查询数据库有几个回滚段
          • select tablespace_name,status from dba_tablespaces where contents='UNDO';
        • 切换回滚段
          • alter system set undo_tablespace=undotbs2 scope=both;
        • 删除回滚表空间(必须不在当前回滚表空间删除当前表空间)
          • drop tablespace undotbs1 including contents and datafiles;
      • 临时表空间
        • 创建
          • create TEMPORARY tablespace TEMP_LJB
        • 查询
          • select file_name,bytes,autoextensible from DBA_TEMP_FILES where tablespace_name='TEMP_LJB';
        • 用户时指定表空间和临时表空间
          • create user ljb
          • identified by ljb
          • default tablespace tbs_ljb
          • temporary tablespace temp_ljb;
        • 临时表空间组
          • 临时表空间组的推出,可以让我们往表空间组时不断新增临时表空间,让数据库在运行时自动从临时表空间组中选择各个临时表空间,不只是用户层面,而且是在SESSION层面进行IO均衡负载,极大地提升了数据库的性能。
          • 查询
            • select * from dba_tablespace_groups;
      • 用户表空间
        • 属于永久保留内容的表空间
        • 指定用户的默认表空间
          • sysdba用户登录,假如ljb用户存在,先删除
            • sqlplus "/ as sysdba"
            • drop user ljb cascade;
          • 建用户,并将先前建的表空间tbs_ljb和临时表空间temp_ljb作为ljb用户的默认使用空间
            • create user ljb
            • identified by ljb
            • default tablespace tbs_ljb
            • temporary tablespace temp_ljb;
          • 授权,暂且将最大权限给ljb用户(切记只能在非生产环境做实验)
            • grant dba to ljb;
          • 登录ljb用户
            • connect ljb/ljb
    • 段(SEGMENT)
      • 在Oracle数据库中,只要segment创建成功,数据库就一定为其分配了若干数据块(data block)的初始数据扩展(initial extent),即使没有数据
      • 查询用户的数据字典segment相关信息
        • select * from user_segments
    • 区(EXTENT)
      • Oracle数据库分配空间最小的扩展单位
      • 查询用户的数据字典extent相关信息
        • select * from user_extents
    • 块(BLOCK)
      • 是Oracle数据库最小的逻辑单位
        • 查询大小
          • show parameter db_block_size
          • select block_size from dba_tablespace where tablespace_name='SYSTEM';
      • 补充OS
        • 大多数的操作系统OS的块容量为512字节或其整数倍而数据库块默认为8KB。数据库的Block一般设置为操作系统OS块容量的整数倍,这样可以减少IO的操作,否则会浪费空间
      • 数据块结构
        • 数据块头(common and variable header)
          • 包括标准内容和可变内容
          • 包含了此数据块的概要内容,例如块的地址(block address),及此数据块所处的段(segment)的类型(比如说到底是表还是索引)
        • 表目录区(table directory)
          • 只要有一行数据插入到数据块中,该行数据所在的表的信息将被存储在这个区域
        • 行目录区(row diretory)
          • 存放你插入的行的地址
        • 可用空间区(free space)
          • 空余空间,空余多少是由Oracle的PCTFREE参数设置,如果是10,则该块会空余10%左右的表空间
        • 行数据区(row data)
          • 存储具体的行的信息或索引的信息,这部分占用了数据块绝大部分的空间
      • 优化数据块空间的属性
        • Pctfree
          • 块中保留用于UPDATE操作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能插入此块中
        • Pctused
          • 制定块中数据使用空间的最低百分比

此文章为个人的笔记,如有写的不对或你对这方面还有什么高见,评论区见。