存储结构
一个数据库可划分为多个称为表空间的逻辑存储单元。每个表空间可以包含很多Oracle
逻辑数据块。DB_BLOCK_SIZE 参数指定了逻辑块的大小。逻辑块的大小介于2 KB 到
32 KB 之间,默认大小为8 KB。特定数目的相邻逻辑块构成了一个区。为特定逻辑结构分配的一组区构成了一个段。Oracle 数据块是逻辑I/O 的最小单位。
如何存储表数据
创建表时,就会创建段来保存表数据。表空间包含一组段。从逻辑上讲,表包含由列值组
成的行。行最终将以行片段的形式存储在数据库块中。之所以称为行片段,是因为某些情
况下,无法在一个位置存储一整行。当插入行由于太长单个块容纳不下时,或者由于更新
而导致现有行大小超出了行的当前空间时,就会发生这种情况。
数据库块:
Oracle 数据块包含:
• 块头:块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务
处理插槽。每个插槽的大小为23 字节,修改块中的行时会使用这些插槽。块头
按从上向下的方向扩展。
• 行数据:这是块中行的实际数据。行数据空间按从下向上的方向扩展。
• 空闲空间:空闲空间位于块的中间。这样可以根据需要扩展头和行数据空间。
插入了一些新行之后,或者使用较大值更新了现有行的某些列之后,行数据就会
占用空闲空间。如果行目录需要更多的行条目,或者需要的事务处理插槽数多于
最初配置的数目,就会出现头扩展。最初,块中的空闲空间是相邻的。但是,
删除和更新操作可能会导致在块空闲空间中产生碎片。必要时Oracle 服务器会
接合块中的空闲空间。
表空间和数据文件
Oracle 数据库在逻辑上将数据存储在表空间中,在物理上
将数据存储在数据文件中。
表空间和数据文件
数据库、表空间和数据文件彼此密切相关,但也存在不可忽视的差异:
• Oracle 数据库包括一个或多个称为表空间的逻辑存储单元,这些表空间可以作为一个整体存储数据库的所有数据。
• Oracle 数据库中的每个表空间都包括一个或多个称为数据文件的文件,这些数据文件具有与运行Oracle 软件的操作系统一致的物理结构。
• 数据库的数据作为一个整体存储在构成数据库各个表空间的数据文件中。例如,
最简单的Oracle 数据库包括两个表空间(SYSTEM 和SYSAUX 表空间,这两个表
空间是必须存在的),每个表空间包含一个数据文件。另一个数据库可能包括三
表空间,每个表空间包含两个数据文件(共有六个数据文件)。一个数据库最多可以包含65,534 个数据文件。
Oracle Managed Files (OMF)
如果使用Oracle Managed Files (OMF),则不需要直接管理构成Oracle 数据库的操作系统文件。可以根据数据库对象而不是文件名指定操作。对于以下数据库结构,可以按需要在数据库内部使用标准文件系统接口来创建和删除文件:
• 表空间
• 重做日志文件
• 控制文件
• 归档日志
• 块更改跟踪文件
• 闪回日志
• RMAN 备份
数据库可以混合包含Oracle Managed Files 和非Oracle Managed Files。由上面任一参数指定的文件系统目录必须已经存在:数据库不会创建文件系统目录。该目录还必须拥有允许数据库在其中创建文件的权限。
表空间中的空间管理
在表空间中以区为单位分配空间。创建表空间后可使用以下方法之一来跟踪空闲空间和已用空间:
• 本地管理的表空间:在表空间中通过位图管理区。位图中的每一位对应一个块或一组块。分配区或为重新利用空间而释放区后,Oracle 服务器通过更改位图值来显示块的新状态。
• 字典管理的表空间:由数据字典管理区。每当分配或取消分配区后,Oracle 服务器
会更新数据字典中的相应表。这是为了实现向后兼容;建议使用本地管理的表空间。
本地管理表空间的存储
可通过以下两种方式之一分配本地管理表空间中的区:
• Automatic(自动):又称为自动分配,这种方式指定表空间中的区大小由系统管理。
您不能指定区大小。不能为临时表空间指定“Automatic(自动)”。
• Uniform(统一):这种方式指定使用指定的统一区大小管理表空间。默认大小为
1 MB。临时表空间的所有区都是统一的,而且采用默认值。不能为还原表空间指定
“Uniform(统一)”。
可将本地管理表空间中的段空间管理指定为:
• Automatic(自动):Oracle 数据库使用位图管理段中的空闲空间。位图描述了段中各个数据块的状态,该状态与插入行可使用的块中的空间量有关。随着数据块中可用空间的增多或减少,位图会反映数据块的新状态。通过使用位图,Oracle 数据库
可以更自动地管理空闲空间,因此,这种空间管理方式被称为“自动段空间管理
(ASSM)”。
• Manual(手动):此方式指定使用空闲列表来管理段中的空闲空间。空闲列表是由
一些数据块组成的列表,插入行可使用这些数据块中的空间。由于这种管理段空间
的方式需要为在表空间中创建的方案对象指定并优化PCTUSED、FREELISTS 和
FREELIST GROUPS 存储参数,因此这种方式称为“手动段空间管理”。支持此方
式是为了实现向后兼容;建议使用ASSM。
本地管理表空间的优势
与字典管理表空间相比,本地管理表空间具有以下优势:
• 如果使用本地管理,则不需要执行递归空间管理操作。采用字典管理表空间时,
如果使用或释放区中的空间导致另一个操作使用或释放还原段或数据字典表中的
空间,就会发生这种情况。
• 由于采用本地管理表空间时并不记录数据字典表中的空闲空间,因此可以减少对
这些表的争用。
• 在本地管理区,可自动跟踪相邻的空闲空间而无需合并空闲区。
• 系统会自动确定本地管理区的大小。
• 对区位图进行更改不会生成还原信息,因为这些更改并不更新数据字典中的表
(表空间限额信息等特殊情况除外)。
预配置数据库中的表空间
在本课程中,您将在预配置数据库中创建以下表空间:
• SYSTEM:Oracle 服务器使用SYSTEM 表空间管理数据库。包含在这个表空间中的数据字典和表包含关于数据库的管理信息。以上信息均包含在SYS 方案中,只有SYS用户或者拥有所需权限的其它管理用户才能访问这些信息。
• SYSAUX:这是SYSTEM 表空间的辅助表空间。在Oracle 数据库早期版本中使用
SYSTEM 表空间或自己表空间的某些组件和产品,现在改为使用SYSAUX 表空间。
每个Oracle Database 10g 或更高版本都必须拥有SYSAUX 表空间。
• TEMP:如果执行的SQL 语句需要创建临时段(如大规模排序或创建索引),则可以使用临时表空间。如同为每个用户分配默认的表空间以存储创建的数据对象一样,还会向每个用户分配临时表空间。除非另行指定,否则最佳方案是为数据库定义一个默认临时表空间,会为所有新建用户分配此表空间。在预配置数据库中,TEMP表空间被指定为默认临时表空间。这意味着,如果在创建用户帐户时未指定临时表空间,Oracle 数据库会将此表空间分配给用户作为临时表空间。
• UNDOTBS1:这是数据库服务器用于存储还原信息的还原表空间。如果数据库使用“自动还原管理”,那么数据库在任何指定时间必须只具有一个活动的还原表空间。此表空间是在创建数据库时创建的。
• USERS:此表空间用于存储永久用户对象和数据。在预配置数据库中,USERS 表空间是用于存储非系统用户创建的所有对象的默认表空间。对于SYS 和SYSTEM 用户(系统用户),默认的永久表空间依然是SYSTEM。
• EXAMPLE:此表空间包含创建数据库时可以安装的示例方案。这些示例方案为各种示例提供了一个通用平台。Oracle 文档和课件中包含了建立在这些示例方案基础上的示例
变更表空间
更改状态:表空间有三种不同的状态,它可以处于其中任一种状态。由于表空间可用性取决于表空间的类型,所以以下三种状态不一定可用:
• Read Write(读写):表空间已联机,可进行读写。
• Read Only(只读):指定“只读”可使表空间转换到只读模式。此状态下,可以完成(提交或回退)现有的事务处理,但是,不允许对表空间中的对象进一步执行数据操纵语言(DML) 操作。表空间已联机,但处于只读状态。不能使SYSTEM 或SYSAUX 表空间处于只读模式。
• Offline(脱机):可以让联机的表空间脱机,使数据库的这部分暂时不可用于一般
用途。数据库的余下部分是开放的,用户可以访问其中的数据。表空间脱机时,可
以使用以下选项:
- Normal(正常):如果表空间中的所有数据文件都不存在错误状态,则通过正
常方式便可使表空间脱机。当Oracle 数据库使表空间脱机时,通过对表空间中
的所有数据文件设置检查点,可以确保将所有数据写入磁盘。
- Temporary(临时):如果表空间中的一个或多个文件存在错误状态,也可以
使表空间暂时脱机。当Oracle 数据库使(尚未脱机的)数据文件脱机时,会对
这些数据文件设置检查点。如果没有任何文件脱机,但是您使用了临时子句,
则使表空间重新联机时便不需要执行介质恢复。但是,如果因写错误而导致表
空间的一个或多个文件脱机,而此时您让表空间临时脱机,那么表空间需要执
行恢复后才能重新联机。
- Immediate(立即):表空间可以立即脱机,Oracle 数据库不需要对任何数据
文件设置检查点。如果指定了“Immediate(立即)”,则必须先对表空间执行
介质恢复,才能使表空间联机。如果数据库在NOARCHIVELOG 模式下运行,
则无法立即使表空间脱机。
- For Recover(进行恢复):FOR RECOVER 设置已被淘汰。支持此语法的目的
是为了实现向后兼容。
查看表空间信息
• 表空间信息:
- DBA_TABLESPACES
- V$TABLESPACE
• 数据文件信息:
- DBA_DATA_FILES
- V$DATAFILE
• 临时文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE
什么是Automatic Storage Management
ASM 将文件系统与卷管理器纵向集成在一起,这是一项专门为Oracle 数据库文件构建的技术。使用ASM 可管理单个对称多处理(SMP) 计算机,或通过管理集群的多个节点来支持Oracle Real Application Clusters (RAC)。
ASM 在所有可用的资源中分布输入/输出(I/O) 负载,在免除了手动I/O 优化的同时优化了性能。ASM 帮助DBA 管理动态数据库环境,让DBA 在不关闭数据库的情况下,通过增加数据库的大小来调整存储分配。
ASM 通过提供冗余的数据副本来提供容错能力,也可以在供应商提供的存储机制基础上构建此功能。数据管理是通过为数据类选择期望的可靠性和性能特性实现的,而不是对每个文件都使用人工交互。通过自动处理手动存储,ASM 功能节省了DBA 的时间,因此提高了DBA 的能力,使他们可以管理更多和更大的数据库,而且效率也更高。
ASM:主要功能和优点
ASM 将文件划分为区(不同于前面介绍的数据文件区),而且将每个文件的区均匀地分布在所有磁盘上。ASM 使用索引技术跟踪每个区的位置。存储容量发生变化时,ASM 并不重新条带化所有数据,而是根据添加或删除的存储量,按比例移动一定数量的数据,通过重新平均分配文件来保持磁盘间的负载平衡。此操作是在数据库处于活动状态时完成的。
可以提高重新平衡操作的速度以更快地完成操作,也可以降低此速度以减少对I/O 子系统的影响。ASM 还提供了镜像保护,因此不需要购买第三方逻辑卷管理器。ASM 的一个特有优势是可为每个文件创建镜像,而不是为每个卷创建镜像。因此,同一磁盘组可以包含镜像文件或非镜像文件的组合。
ASM 支持数据文件、日志文件、控制文件、归档日志、Recovery Manager (RMAN) 备份集及其它Oracle 数据库文件类型。ASM 还支持RAC,这样就不再需要使用集群逻辑卷管理器或集群文件系统。
表空间管理相关操作
一. 表空间的create /drop /edit扩容 /move /offline /online /read write /read only
alter tablespace tbs read only; alter tablespace tbs offline; |
select tablespace_name ,status from dba_tablespaces; |
SQL> set wrap off SQL> set linesize 200 SQL> select t.* 2 from (SELECT D.TABLESPACE_NAME, 3 SPACE "SUM_SPACE(M)", 4 BLOCKS SUM_BLOCKS, 5 SPACE - NVL(FREE_SPACE, 0) "USED_SPACE(M)", 6 ROUND((1 - NVL(FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)", 7 FREE_SPACE "FREE_SPACE(M)" 8 FROM (SELECT TABLESPACE_NAME, 9 ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, 10 SUM(BLOCKS) BLOCKS 11 FROM DBA_DATA_FILES 12 GROUP BY TABLESPACE_NAME) D, 13 (SELECT TABLESPACE_NAME, 14 ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE 15 FROM DBA_FREE_SPACE 16 GROUP BY TABLESPACE_NAME) F 17 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 18 UNION ALL --if have tempfile 19 SELECT D.TABLESPACE_NAME, 20 SPACE "SUM_SPACE(M)", 21 BLOCKS SUM_BLOCKS, 22 USED_SPACE "USED_SPACE(M)", 23 ROUND(NVL(USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)", 24 SPACE - USED_SPACE "FREE_SPACE(M)" 25 FROM (SELECT TABLESPACE_NAME, 26 ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE, 27 SUM(BLOCKS) BLOCKS 28 FROM DBA_TEMP_FILES 29 GROUP BY TABLESPACE_NAME) D, 30 (SELECT TABLESPACE, 31 ROUND(SUM(BLOCKS * 8192) / (1024 * 1024), 2) USED_SPACE 32 FROM V$SORT_USAGE 33 GROUP BY TABLESPACE) F 34 WHERE D.TABLESPACE_NAME = F.TABLESPACE(+)) t 35 order by "USED_RATE(%)" desc; TABLESPACE_NAME SUM_SPACE(M) SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M) --------------- ------------ ---------- ------------- ------------ ------------- USERS 971.25 124320 970.06 99.88 1.19 SYSTEM 480 61440 477 99.38 3 SYSAUX 270 34560 262.94 97.39 7.06 TBS1 1 128 .62 62 .38 UNDOTBS1 45 5760 9.81 21.8 35.19 TBS1_M 1 128 .19 19 .81 TBS3 1 128 .12 12 .88 TBS4 1 128 .06 6 .94 TEMP 20 2560 0 已选择9行。 |