逻辑存储结构是指 Oracle 数据库的逻辑构成形式,它的组成部分按层次等级划分为表空间、端、区以及数据块
表空间
表空间是 Oracle 数据库逻辑结构最大的逻辑划分,一个数据库可以包含多个表空间,但一个表空间只能属于一个数据库。一个表空间可以包含多个数据文件,一个数据文件只能属于一个表空间。Oracle 数据库中的表空间主要分为
-
系统表空间
在 Oracle 数据库创建时自动创建,包括system和sysaux 两个表空间。system是系统默认表空间,专门用于存放数据字典以及各种数据对象的定义。sysaux是system 的辅助表空间,主要用于存放数据库组件、表统计以及数据库审计等信息
-
非系统表空间
非系统表空间主要包括:
用户表空间(users),用于存放用户创建的各种数据库对象的应用数据
临时表空间(temp),用于存放各类系统产生的临时数据
撤销表空间(undotabs),存放数据库回滚信息,支持数据库的事务回滚操作
用户自定义普通表空间,为各类应用系统数据划分存放位置
创建表空间
create [smallfile|bigfile|temporary|undo] tablespace tablespace_name
datafile datafile1,[datafile2]...
[autoextend [on|off] next num[K|M]]
[maxsize num[K|M]|unlimited]
[online|offline]
[logging|nologging]
[extent management dictionary|local[autoallocate|uniform size num[K|M]] segment space management auto|manual]
各参数分别解释如下
- smallfile|bigfile|temporary|undo:分别表示创建表空间类型,默认值是小文件表空间
- tablespace_name:表空间名称
- datafile:设置表空间包含的一个或者多个数据文件名称以及存储路径
- autoextend [on|off]:指定数据文件自动扩展或非自动扩展,如果指定为 on 则需设置next 后的扩展数量 num
- maxsize num[K|M]|unlimited:指定数据文件可以增长的最大值,如不限制选择unlimited
- online|offline:指定表空间创建后是处于在线或是离线状态
- logging|nologging:指定是否产生日志文件,默认是logging
- extent management:指定表空间管理方式,dictionary 为数据字典管理方式,local 为本地管理方式,默认值为 local
- autoallocate|uniform size num[K|M]:设定区的分配方式,autoallocate 为系统自动分配,uniform 为按照指定size大小统一分配
- segment space management:指定段的管理方式,auto为自动管理,manual 为手动管理,默认值为auto
创建小文件表空间
//为数据创建小文件表空间orclstbs1,数据文件初始大小为20MB,可以自动扩展,每次扩展5MB,段采用自动管理方式
create tablespace orclstbs1 datafile 'D:\test1.dbf' size 20M autoextend on next 5M;
创建大文件表空间
//创建大文件表空间orclbtbs1,数据文件大小为2GB
create bigfile tablespace orclbtbs1 'D:\test1.dbf' size 2G;
创建临时表空间
//创建临时表空间orclbtbs1,数据文件初始大小为10M
create temporary tablespace orclbtbs1 tempfile 'D:\test.dbf' size 10M
创建撤销表空间
//创建撤销表空间orclbtbs1,数据文件初始大小为10M
create undo tablespace orclbtbs1 datafile 'D:\test.dbf' size 10M;
修改表空间
//表空间扩展,三种方式对表空间进行扩展
//第一种,添加新的数据文件
alter tablespace orclstbs1 add datafile 'D:\test.dbf' size 20M
//第二种,增加数据文件大小
alter database datafile 'D:\test.dbf' resize 30M;
//第三种,设置数据文件自动扩展
alter database datafile 'D:\test.dbf' autoextend on next 10M maxsize 100M;
//状态转换
//联机与脱机转换
alter tablespace orclstbs1 offline;
alter tablespace orclstbs1 online;
//只读与读写状态转换
alter tablespace orclstbs1 read only;
alter tablespace orclstbs1 read write;
//重命名
//该操作不能对system 和 sysaux 表空间进行重命名
alter tablespace orclstbs1 rename to new_orclstbs1;
删除表空间
Oracle 数据库中除了 system 和sysaux 表空间,其他表空间都可以删除,并且提供了三种方案
//第一种,只删除表空间在数据字典的定义
drop tablespace orclstbs1;
//第二种,删除表空间在数据字典中定义以及表空间包含的内容
drop tablespace orclstbs1 including contents;
//第三种,在第二种基础上再删除其数据文件
drop tablespace orclstbs1 including contents and datafiles;
查询表空间信息
Oracle 数据库提供了多个数据字典视图和动态性能视图可以查询表空间的相关信息,其中包括:
- dba_tablespace:包含数据库中所有表空间的信息
- dba_data_files:包含数据文件及其所属表空间信息
- dba_temp_files:包含临时文件及其所属表空间信息
- v$tablespace:包含控制文件中表空间名称和编号信息
- v$datafile:包含数据及其所属表空间信息
- v$tempfile:包含临时文件及其所属表空间信息
段
段是表空间的组成单位,表空间可以有多个段,但一个段只能属于一个表空间,段用于存储各类数据库对象如表、索引等,根据存储对象不同又分数据段、索引段、临时段和回滚段等四种类型
- 数据段:用于存储表数据,所有未分区的表都使用一个段来保存数据,而分区表为每一个分区建立一个独立的数据段
- 索引段:用于存储索引数据
- 临时段:存储执行SQL语句产生的大量中间数据,当用户会话结束时系统自动释放临时段
- 回滚段:存储用户数据修改前的值,因而可以支持事务回滚
查询段信息
Oracle 数据库提供了多个数据字典视图和动态性能视图可以查询段的相关信息,其中包括
- dba_segments:包含数据库所有段的信息
- dba_rollback_segs:包含所有回归段信息
- v$transaction:包含事务使用回滚段的信息
区
存储空间分配和回收的最小单位,一个或多个连续的区可以构成一个段。存储数据库对象数据时,Oracle 数据库首先分配若干分区构成一个段作为初始存储空间,当段空间写满时,再为段分配新区。在进行存储数据信息的时候,Oracle 将分配数据块进行存储,但是不能保证所有分配的数据块都是连续的结构。区表示一系列连续的数据块集合
Oracle 数据库提供了多个数据字典视图和动态性能视图可以查询区的相关信息,其中包括
- dba_tablespace:包含表空间区的分配设置信息
- dba_extents:包含区的基本信息
数据块
数据块是Oracle数据库中最小的数据组织单位与管理单位,也是数据库 I/O 的最小单位,其大小一般是操作系统数据库大小的整数倍