1、 Oracle 的逻辑结构
数据库的物理结构是由数据库的操作系统文件所决定,每一个 Oracle 数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储。
Oracle 的逻辑结构包括表空间( tablespace ),段( segment ),数据块( data block )以及模式对象( schema object )。
⑴、表空间( tablespace )
表空间是数据库中最大的逻辑单位,每一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。每一个数据库都有一个 SYSTEM 表空间,该表空间是在数据库创建或数据库安装时自动创建的,用于存储系统的数据字典表,程序系统单元,过程函数,包和触发器等,也可用于存储用户数据表,索引对象。表空间具有在线( online )和离线( offline )属性,可以将除 SYSTME 以外的其他任何表空间置为离线。
⑵、段( segment )
段是指占用数据文件空间的通称,或数据库对象使用的空间的集合,数据库的段可以分为四类:数据段、索引段、回退段和临时段。
⑶、区( Extent )
区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储与段中,它由连续的数据块组成。 区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象 .
⑷、数据块
数据块是数据库中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库 I/O 的最小单位,数据块大小由 DB_BLOCK_SIZE 参数决定,不同的 Oracle 版本 DB_BLOCK_SIZE 的默认值是不同的。
2 、表空间及数据文件的关系
一个 Oracle 数据库由一个或多个逻辑存储单元——表空间( tablespace )构成,表空间存储着数据库中所有的数据 即: 表空间是数据文件的逻辑集合 ,这些表空间在逻辑的层面上共同来存储数据库的数据;
Oracle 数据库中的 每个表空间由一个或多个文件组成 ,这些文件就是数据文件( datafile ),它们是 Oracle 所在操作系统上的 物理结构 ,,这些文件由 Oracle 所在的操作系统管理。 Oracle 数据库中的所有数据在物理的层面上是存储在数据文件中。
3 、表空间及数据文件的概念
我们知道 oarcle 数据库真正存放数据的是数据文件( data files ), Oarcle 表空间( tablespaces )实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组数据文件放在一起就成为一个表空间。
表空间属性:
( 1 )一个数据库可以包含多个表空间,一个表空间只能属于一个数据库
( 2 )一个表空间包含多个数据文件,一个数据文件只能属于一个表空间
( 2 )表这空间可以划分成更细的逻辑存储单元
( 3 )数据文件通常为 *.dbf 格式,一旦建立,数据文件只增不减
下图是 Oracle 数据库的存储结构的示例图:
从逻辑的角度来看,一个数据库( database )下面可以分多个表空间( tablespace );一个表空间下面又可以分多个段( segment );一个数据表要占一个段( segment ),一个索引也要占一个段( segment )。 一个段( segment )由多个 区间( extent )组成,那么一个区间又由一组连续的数据块( data block )组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。那么从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由 oracle 数据库操作系统的 block 组成的。
4 、一些特殊的表空间
除了普通表空间外, Oracle 还有几种特殊的表空间。系统表空间( SYSTEM 表空间)、 UNDO 表空间( 9i 以前的回滚表空间)、临时表空间。
系统表空间中除了保存数据字典外还保存所有的存储过程、函数、包、触发器和对象。此表空间必不可少,且在安装数据库时系统会自动创建。
UNDO 表空间用于保存被 DML 语句影响的记录的原始状态,以便在事务失败的时候可以进行回滚。
当大的排序,分组,索引等操作发生时,操作无法在内存中完成,这是会使用临时表空间。
Oracle 推荐使用多个表空间,使用多个表空间的优点:
( 1 )控制数据库的磁盘空间分配;
( 2 )为数据库用户指定不同的配额( QUOTA );
( 3 )通过设置单独的表空间 ONLINE 或 OFFLINE 来控制数据的可用性;
( 4 )执行部分数据库的备份和恢复操作;
( 5 )将数据存储分布到多个物理设备来提高性能。
5 、表空间的属性和管理方式
5.1 表空间的管理方式
1 . 字典管理方式:使用数据字典来管理存储空间的分配,当表空间分配新的区、或者回收已分配的区时, ORACLE 会对数据字典对应的表进行查询、更新。且使用单线程,速度慢,并且回产生回退和重做信息。
(注意:在字典管理方式下,如果对某个表进行更新,这是会产生存储操作,而该操作又回产生回滚和重做操作,导致对回滚段和重做日志文件进行读写,从而又产生存储管理操作,因此形成递归现象)
2 . 本地管理方式: ORACLE 9i 默认方式,表空间中区分配和区回收的管理信息都被存储在表空间的数据文件中,而与数据字典无关。表空间为每个数据文件维护一个位图结构,用于记录表空间的区分配情况。当表空间分配新的区、或者回收已分配的区时, ORACLE 会对文件中的位图进行更新,所以不会产生回滚和重做信息。
优点:
( 1 )提高存储管理的速度和并发性。
( 2 )产生磁盘碎片
( 3 )不产生递归管理
( 4 )没有系统回滚段。
查看区段管理方式:
5.2 表空间的状态
1 . 读写状态
只读( READ-ONLY ):任何人无法写入数据,无法修改数据。
读写( READ-WRITE ):任何有权限的用户都可以读写。
修改读写状态:
ALTER TABLESPACE TABLESPACE_NAME READ ONLY( 此 TABLESPACE 在下次启动时候依然为只读 );
如上图,就是只读状态,此时若往此表空间的表中插入数据,会报错:
2 .脱机状态
DBA 可以在数据库处于开启( open )状态时令除 SYSTEM 表空间( tablespace )之外的任何表空间联机( online ) ( 可访问 ) 或脱机( offline )(不可访问)。 SYSTEM 表空间在数据库处于开启( open )状态时总是处于联机状态,因为 Oracle 需要使用其中的数据字典( data dictionary )。
脱机操作有四种模式:
正常模式( NORMAL ):进入脱机时,必须保证该表空间的数据文件处于联机, ORACLE 会执行一个 CHECKPOINT ,以便 SGA 区中的脏数据都能写入数据文件中。然后在关闭表空间的所有文件。下一次启动时候就不用进行数据库恢复了。
临时模式( TEMPORARY ):不须保证该表空间的数据文件处于联机,如果某个数据文件不可用,则回忽略错误,进入 TEMPORARY 模式, ORACLE 会执行一个 CHECKPOINT ,下一次启动时候可能需要进行数据库恢复
立即模式( IMMEDIATE ): ORACLE 会执行一个 CHECKPOINT ,直接将该表空间的所有数据文件都设置为脱机状态,恢复为联机时必须进行数据库恢复
用于恢复模式( FOR RECOVER ):如果要对表空间进行基于时间的恢复,可以使用这模式,
然后 DBA 就可以进行备份的数据文件来覆盖原有的数据文件,而后根据这些数据文件上,利用归档日志,就可以将表空间恢复为某个时间点的状态。
演示将表空间脱机:
ALTER TABLESPACE USERS OFFLINE NORMAL (默认)
NORMAL 方式脱机,必须在表空间处于联机状态下,如我们对上面脱机后的表空间再使用 NORMAL 脱机,会报错:
但是使用 IMMEDIATE 模式可以在脱机下执行脱机,不会报错。
当表空间脱机时,再往其中执行会分配空间的操作,会报错:
6 、创建表空间
表空间的几种创建方式
使用 autoallocate 分配方式:自动给存放对象分配相应大小的区的方式,可能造成磁盘空间的浪费。
CREATE TABLESPACE TEST_AUTOALLOCATE1
DATAFILE 'F:APPADMINORADATAORCLTEST_AUTOALLOCATE101.DBF' SIZE 1M,
'F:APPADMINORADATAORCLTEST_AUTOALLOCATE102.DBF' SIZE 1M AUTOALLOCATE;
使用 uniform 方式:给所有对象分配相同的大小的区,最小 1K 。
CREATE TABLESPACE TEST_UNIFORM
DATAFILE 'F:APPADMINORADATAORCLTEST_UNIFORM01.DBF' SIZE 1M
UNIFORM SIZE 128K;
指定数据文件的的扩展方式
使用此方式时候,一般需要指定数据文件的最大 SIZE ,以免数据文件无限制扩展。
CREATE TABLESPACE TEST_AUTOEXTEND
DATAFILE 'F:APPADMINORADATAORCLTEST_AUTOEXTEND01.DBF' SIZE 10M
AUTOEXTEND ON NEXT 20M MAXSIZE 1000M;
创建临时表空间 ( 区分配无法指定为 AUTOALLOCATE)
如果数据库经常有大量排序操作,则为了提高性能就需要创建多个临时表空间。
CREATE TEMPORARY TABLESPACE TEMP_WORKDATA01
TEMPFILE ' D:ORACLEORADATAWORKTEMP_WORKDATA01_01.DBF ' SIZE 1M
UNIFORM SIZE 64K;
创建撤消表空间(只能使用本地管理方式而不是数据字典管理方式,无法指定统一区的大小的选项):
正在使用的 UNDO 表空间无法删除。当 UNDO 表空间没有未提交的事务时候才能删除。 CREATE UNDO TABLESPACE TEST_UNDO
DATAFILE 'F:APPADMINORADATAORCLTEST_UNDO01.DBF' SIZE 1M
AUTOEXTEND OFF;
7 、扩展表空间
表空间有下面几种扩展方式:
修改数据文件的大小:
ALTER DATABASE
'D:ORACLEORADATAWORKWORKDATA01_02.DBF'
RESIZE 4M
为表空间增加数据文件:
ALTER TABLESPACE WORKDATA01
ADD DATAFILE 'D:ORACLEORADATAWORKWORKDATA01_02.DBF' SIZE 1m
8 、删除表空间
-- 删除表空间下的数据文件
ALTER TABLESPACE TABLESPACE_NAME
DROP DATAFILE 'F:APPADMINORADATAORCLC.DBF';
-- 只删除表空间,保留数据文件
必须在表空间为空的时候使用,否则报错。
DROP TABLESPACE TEST_AUTOEXTEND;
-- 删除表空间及其数据文件
DROP TABLESPACE TEST_AUTOALLOCATE INCLUDING CONTENTS AND DATAFILES;
9 、移动数据文件
有时,如果你的数据文件所在的磁盘损坏时,该数据文件将不能在使用,为了能够重新使用,需要将这些文件的副本移动到其他的磁盘,然后恢复。
下面以移动数据文件 TEST_UNIFORM01.DBF 为例来说明:
确定数据文件所在的表空间
SELECT TABLESPACE_NAME
FROM DBA_DATA_FILES
WHERE FILE_NAME = 'F:APPADMINORADATAORCLTEST_UNIFORM01.DBF';
使表空间脱机
确保数据文件的一致性,将表空间转变为 offline 的状态。
ALTER TABLESPACE TEST_UNIFORM OFFLINE;
移动数据文件到指定的目标位置
执行 alter tablespace 命令
在物理上移动了数据之后,还必须执行 alter tablespace 命令对数据库文件进行逻辑修改
ALTER TABLESPACE TEST_UNIFORM RENAME DATAFILE 'F:APPADMINORADATAORCLTEST_UNIFORM01.DBF'
TO 'F:APPADMINORADATATESTTEST_UNIFORM01.DBF';
使表空间联机
ALTER TABLESPACE TEST_UNIFORM ONLINE;