Oracle数据库逻辑结构

在这里插入图片描述
逻辑上:8K数据块——>区——>段——>表空间——>数据库(多对一)

1.block 数据块

oracle数据库将数据存储在Block 数据块,⼀个数据块对应于磁盘上物理数据库空间的特定字节数。(默认8KB)
标准块大小由DB_BLOCK_SIZE初始化参数指定
查看初始化参数:
【show parameter 参数】
在这里插入图片描述
数据块(8K)大小应该是操作系统块(2K)大小的倍数

  • 数据块的结构
    在这里插入图片描述
    Header 通用和变量:记录块的信息,例如块地址和段的类型(数据或索引)
    table dir:数据块的这一部分包含关于在该块中表的信息。
    row dir:数据块的这一部分包含rowid和行的信息。
    在数据块使用的行目录中分配了空间之后,删除该行时不会回收该空间,产生数据碎片,即delete操作不会释放空间只会产生空闲空间。
    delete语句和update语句(将现有的值更新为较小的值)都会产生数据碎片,增加了空闲空间:
    INSERT语句可能可以放在后面使用空闲空间(取决于pctused参数)。
  • 行连接和行迁移
    1)行连接:(insert)第⼀次插入该行时,该行太大,无法装入一个数据块。
    在这种情况下,Oracle数据库将写不下的数据存储别的数据块中并在原来的块留下一个指针。
    行连接通常发生在大型行中,例如包含数据类型为LONG或LONG RAW的列的行。在这些情况下,行连接是不可避免的。
    2)行迁移:(update)最初适合于一个数据块的行被更新,使整个行长度增加,而块的空闲空间已经完全被填满。
    在这种情况下,Oracle数据库将整个行数据迁移到⼀个新的数据块。原来的数据块有update前的数据和一个指针,迁移后的行rowid不会更改。
    当一行被连接或迁移时,与该行关联的I/O性能会降低,因为oracle数据库必须扫描多个数据块才能检索该行的信息。
  • 行连接和行迁移的避免:
    行连接的避免:更改块的大小,设置为16K或更大
    行迁移的避免:
    PCTFREE参数:设置一个百分比为该块中已经存在的行可能的更新保留的空闲空间
    【pctfree 20】设置20%的空闲空间留给update操作使用
    PCTUSED参数:设置一个已使用百分比作为块可以被重用的标准
    【pctused 40】当delete操作后已有数据占40%以下时,可以使用insert操作往数据块中添加数据
    过程:添加数据直到剩下20%,就不能再继续添加只能update。delete操作增加空闲空间,直到数据只剩40%,才可以再次使用insert操作。
2.extents区

数据字典:dba_extentsextents
区由同类型连续数据块组成
extent是oracle进行存储空间分配的基本单位,数据块是数据库使用的最小数据单元
段中第一个区叫初始区,随后分配的区叫后续区,创建表并插入内容后系统才开始创建初始区。
管理方式:1. 字典管理:在数据字典中管理表空间的区空间分配。(已经淘汰)
2. 本地管理:在每个数据文件中使用位图管理空间的分配。表空间中所有区(extent) 的分配 信息都保存在该表空间对应的数据文件的头部。 每个区的大小:autoallocate 自动调整 /uniformsize 固定大小优点:速度快,无碎片,更易于维护

3.segment段

数据字典:dba_segmentssegment
段是由一个或多个extent区组成

  • 段的类型
    表段、索引段、undo 段、临时段
  • 一个segment段就是一个table或者index
    但是,创建⼀个表,oracle可以为表创建⼀个或多个段,数据量非常大的时候,可以对表进行分区以方便查询。所以,一个段还可以是一个表分区
  • 创建一个按时间分区的分区表
    【create table p_test(ename varchar2(20),hdate date)
    partition by range(hdate)
    (partition p81 values less than (to_date(‘1981-01-01’,‘yyyy-mm-dd’),
    partition p82 values less than (to_date(‘1982-01-01’,‘yyyy-mm-dd’),
    partition p83 values less than (to_date(‘1983-01-01’,‘yyyy-mm-dd’),
    partition pmax values less than (maxvalue))】
    查看表分区里的数据【select * from p_test partition(p81)】
    从数据字典中查询segment信息:
    【select owner,segment_name,segment_type,partition_name,tablespace_name,bytes/1024/1024from dba_segments
    where owner=‘SCOTT’】
    通常段中至少有⼀个初始区。当这个段数据增加使得区(extent)不够时,将为这个段分配新的后续区。(11g 段空间延时分配)
    延时分配:如果仅仅建立分区表但是未往表中添加数据,就不会创建初始区,在数据字典中也查询不到。
  • 空闲空间free space
    free space: 空闲空间可以自动管理,也可以手动管理
    段内的空闲空间可以在数据库段内自动管理。
    自动分段空间管理提供了以下好处:
  1. 易用性
  2. 更好的空间利用率,特别是对于行大小差异很大的对象
  3. 更好地对并发访问中的变化进行运行时调整
  4. 在性能/空间利用率方面,更好的多实例行为 在创建本地管理的表空间时,指定自动分段空间管理。然后,该规范应⽤于随后在这个表空 间中创建的所有段32G,或指定maxsize
4.表空间

数据字典:dba_tablespacess
v$tablespace(动态性能视图)
dba_free_space 空闲空间
数据库由一个或多个表空间组成,每个表空间由⼀个或多个data files数据文件或临时文件组成
表空间在逻辑上可以存在多个段,物理上可以对应多个数据⽂件,⼀个段比较大时可以跨多个数据文件。(表可以跨数据文件)
1).表空间类型

  • permanent永久表空间,比如system,sysaux
    system表空间
    oracle数据库在创建数据库时自动创建system表空间,当数据库打开时,system表空间总是online状态
    system表空间包含以下信息:
    数据字典:系统表空间总是包含整个数据库的数据字典表
    PL/SQL程序单元描述:比如函数max的定义和计算过程
    sysaux表空间
    是system表空间的⼀个辅助表空间。许多数据库组件使用 sysaux表空间作为它们存储数据的默认位置。因此,sysaux表空间总是在数据库创建或数据库升级期间创建的, 在正常的数据库操作期间,Oracle数据库不允许删除或重命名sysaux表空间
    oracle数据库至少由两个表空间组成,system和sysaux它们共同存储数据库的所有数据。
  • temporary临时表空间
    主要作用是缓存排序的数据(中间结果) 可以建立多个临时表空间,但默认的临时表空间只能有⼀个且不能 offline 和 drop。比如temp,数据文件属性为临时数据文件tempfile
    【select * from dba_temp_files】
  • undo表空间:回滚表空间
    对某表的数据执行DML操作,在commit前,其他用户查看时依旧是以前的数据,这是依靠undo表空间实现的。一个数据库可以包含多个undo表空间,但在任何时候只能使用一个。比如:使用update修改,前进项被存储到undo表空间,用户查看时读取的是undo表空间的数据,若rollback撤销,则把数据从undo表空间读取再次写入users表空间。
    2).表空间管理方式
    管理方式重点是段和区的管理方式,是在建立表空间时确定的。
    段管理方式有 AUTO 和 MANUAL 两种
    区管理方式有本地管理和字典管理(已淘汰)两种。
    【select tablespace_name,contents,segment_space_management,extent_management
    from dba_tablespaces;】查看管理方式
    在这里插入图片描述
    【select * from v$tablespace】
    在这里插入图片描述
    【 select file_id,file_name,tablespace_name,bytes/1024/1024 M,status,AUTOEXTENSIBLE
    from dba_data_files 】查看是否为自动扩展
    【 select tablespace_name,sum(bytes)/1024/1024
    from dba_free_space
    group by tablespace_name; 】查看表空间的空闲空间
    3).扩大数据库
    表空间的大小就是数据文件的大小
    所有表空间的集合大小,就是数据库的大小
    扩大数据库的方法:
  • 向表空间添加数据文件
    【alter tablespace 表空间名
    add datafile ‘数据文件名’size 10G】
  • 扩大数据文件大小
    【alter database datafile ‘数据文件名’
    autoextend on next 20M maxsize 100M】
    修改成可以自动扩展的模式,下一次分配20M,最大分配100M
    【alter database datafile ‘数据文件名’
    resize 100M】
    直接改变初始大小
  • 创建新的表空间
    【create tablespace 表空间名
    datafile ‘数据文件名’size 10G】
    【create table 表名(id number)tablespace 表空间名】在表空间下建表
    删除表空间及其数据文件
    【drop tablespace prod】;(默认数据文件还存在,需要到操作系统层去rm删除文件)
    【drop tablespace prod including contents and datafies】;
    4).查看表空间缺省选项dbms_metadata.get_ddl
    SELECT DBMS_METADATA.GET_DDL(‘TABLE’,‘DEPT’,‘SCOTT’) FROM DUAL;

5).表空间状态
更改表空间状态:
【alter tablespace 表空间名 read only】只读
【alter tablespace 表空间名 read write】读写
自己创建的表空间和users可以更改为离线状态
【alter tablespace readonly offline 】
【alter tablespace readwrite offline 】
查看状态:
【select name,file#,checkpoint_change# from v$datafile ;】
只读和离线的表空间checkpoint号不会变换
【alter system checkpoint;】发起checkpoint命令

5.data files数据文件

命名:tbs_user01.dbf
tbs_user02.dbf
每个表空间由⼀个或多个data files数据文件或临时文件组成,这些文件是Oracle数据库运行的操作系统上的物理结构文件, 数据库的数据是集中存储在组成数据库的每个表空间的数据文件中
数据字典:dba_data_files
1).数据文件的属性
* 操作系统上的物理文件
* 具有初始大小,或resize改变初始大小
* 是否为自动扩展
* 默认最大为32G,或指定maxsize

数据字典:dba_data_files
从数据字典中查看数据文件信息
【select file_name,file_id,tablespace_name,bytes/1024/1024 size_MB
from dba_data_files;】
2).临时数据文件
本地管理的临时表空间具有临时数据⽂件(tempfile),与普通数据文件类似,但有以下例外:
Tempfiles总是设置为NOLOGGING模式。
不能设置tempfile为只读状态。
不能使用ALTER DATABASE语句创建tempfile。
数据恢复时不识别tempfiles:
备份控制文件不会为tempfile生成任何信息。
创建控件文件不能指定关于tempfile的任何信息

  • 建立临时表空间、添加或删除tempfile
    【create temporary tablespace 临时表空间名
    tempfile ‘临时文件名’ size 10m 】
  • 为临时表空间添加⼀个tempfile
    【alter tablespace 临时表空间名
    add tempfile ‘临时文件名’ size 10m】
  • 删除temp2中⼀个tempfile
    【alter tablespace 临时表空间 drop tempfile ‘临时文件名’;】
  • 查看默认的临时表空间
    【select PROPERTY_NAME,PROPERTY_VALUE from database_properties
    where property_name like ‘DEFAULT%’;】
  • 切换数据库默认临时表空间
    【alter database default temporary tablespace temp2;】
  • 指定用户使用临时表空间
    【alter user scott temporary tablespace temp2;】
    3).大文件和小文件
    small file:在一个表空间可以建立1-1024个数据文件(默认),单个文件最大32G
    big file:在一个表空间只能建立一个数据文件(8K的block时最大可达31T),不能添加数据文件
    创建Small file的表空间
    【create tablespace test datafile ‘/u01/app/oracle/oradata/PROD/PROD/PROD/PROD/ PROD/test01.dbf’ size 32G】
    创建Big file的表空间
    【create bigfile tablespace big_tbs datafile ‘/u01/app/oracle/oradata/PROD/PROD/PROD/PROD/PROD/bigtbs01.dbf’ size 32G;】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值