目的
描述块中表行数据的存储
创建和管理表空间
获取表空间信息
表数据的存储方式
创建表时,还会创建一个用于保存其数据的段。
表空间包含一个段集合。
从逻辑上表包含许多行列值。行最终以行片段的形式存储在数据库块中。之所以称为行片段,是因为在某些情况下可能会在一个位置存储不完整的行。
-当插入的行太大而无法装入单块时,链接行
-当更新导致现有行超出当前块的可用空闲空间时,迁移行
-当表中的列多于255列时,也使用行片段。这种情况下,这些行片段可能位于同一个块(块内链)中,也可能位于多个块中。
数据库块
块头:块头包含段类型(如表或索引)/数据块地址/表目录/行目录和事务处理插槽。每个插槽的大小约23字节,修改块中的行时会使用这些插槽。块头自上而下进行增长。
行数据:这是块中行的实际数据。行数据空间自下而上进行增长。
空闲空间:空闲空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入新行或更大的值更新现有行的列时,行数据会占用空闲空间。
导致块头增长的事件:
-行目录需要更多的行条目
-需要的事务处理插槽数多于最初配置的数目
起初,块中的空闲空间是相邻的。但是,删除和更新操作可能会导致块中的空闲空间变成碎片。需要时Oracle服务器会接合块中的空闲空间。
表空间的存储
区分配:可通过以下两种方法之一分配本地管理表空间中的区:
-自动,“自动分配”,这种方法指定表空间中的区的大小是由系统管理的。不能对临时表空间指定“Automatic自动”。
-统一,这种方法规定使用指定的统一区大小来管理表空间。默认大小为1MB.临时表空间的所有区都是统一的。不能对还原表空间(UNDO)指定“Uniform(统一)”
段空间管理
-自动,Oracle DB使用位图管理段中的空闲空间。位图描述了段中每个数据块的状态。该状态与可插入行的块中的空间量有关。当数据块中可用空间增多或减少时,位图中会反映数据块的新状态。通过使用位图,Oracle DB可以提高管理空闲空间的自动化程度。因此,这种空间管理方式称为“自动段空间管理(ASSM)”
-手动,使用空闲列表来管理段中的空闲空间。空闲列表是由一些数据块组成的列表,这些数据块中有可插入行的空间。由于这种管理段空间的方式需要为表空间中创建的方案对象指定并优化PCTUSED/FREELISTS和FREELIST GROUPS存储参数,因此这种方式称为‘手动段空间管理’。支持使用此方法是为向后兼容,建议使用ASSM自动段管理。
压缩选项:默认情况下,数据段压缩功能处于禁用状态。启用数据段压缩功能可以节省磁盘空间使用量,减少缓冲区高速缓存中的内存使用量,还可以加快读取执行查询的效率。但是,在数据加载和DML过程中会产生CPU开销。本功能在联机分析处理(OLAP)系统中尤其有用,在这些系统中存在长时间的只读运算;但也可用在联机事务处理(OLTP)系统中。
事件记录:事件记录子句为表空间中创建的所有段设置默认的事件记录值。对表空间中的对象所做的更改会写入重做日志。如果未启用事件记录,则使用SQL*loader和直接加载Insert操作进行的任何直接加载都不会写入重做日志,因此,如果发生数据丢失的情况,这些对象将不可恢复。如果在未启用事件记录的情况下创建了对象,则只有备份这些对象才能进行恢复。选择不启用事件记录会对日后恢复对象的能力造成巨大影响。《Oracle Database SQL Reference》Reference
注意:如果对数据库启用了force logging模式,该默认优先级高于表空间事件记录设置。可以在创建数据库时将数据库置于FORCE LOGGING模式,也可以在创建数据库后使用alter database force logging命令将数据库置于该模式。
块信息:此区域显示所创建的表空间使用的块大小。此处显示的值为只读值。如果设置了任何其它块大小初始化参数(db_nK_cache_size),则会在此处列出其它值作为选项。
预配置的数据库中的表空间
SYSTEM
Oracle服务器使用SYSTEM表空间管理数据库。这个表空间包含的数据字典和表中包含关于数据库的管理信息。上述信息均包含SYS用户中,只有SYS用户或拥有者所需权限的其它管理用户才可访问这些信息。
SYSAUX
SYSTEM表空间的辅助表空间。Oracle DB早期版本中某些使用SYSTEM表空间或其本身表空间的组件和产品现改为使用SYSAUX表空间。每个Oracle Database 10g(或更高版本)数据库都必须拥有SYSAUX表空间。
USERS
此表空间用于存储用户对象和数据。如果在创建用户时未指定默认的表空间,则USERS表空间将成为该用户创建的所有对象的默认表空间。对于SYS和SYSTEM用户,默认的永久表空间是SYSTEM。
UNDOTBS1
数据库服务器用于存储还原信息的还原表空间。如果数据库使用“自动还原管理”,那么数据库在任何指定时间只能使用一个还原表空间。此表空间是创建数据库时创建的。
TEMP
如果执行的SQL语句需要创建临时段(如大规模排序或创建索引),则需要使用临时表空间。创建用户时向用户分配一个默认的临时表空间。最好的做法是为数据库定义一个默认临时表空间,并且将此表空间分配给所有新建用户(除非另行指定)。
是
EXAMPLE(可选)
此表空间包含创建数据库时可以安装的示例方案。这些示例方案为各种示例提供了一个通用平台。
注意:为简化管理,通常为索引使用单独的表空间。
变更表空间
重命名
更改状态:
-读写,表空间已联机,可进行读写。
-只读,指定‘只读’可将表空间置于只读模式。此状态下,可以完成(提交或回退)现有的事务处理,但是,不允许对表空间中的对象进一步执行数据操纵语言(DML)操作。表空间已联机,但处于只读状态。不能使SYSTEM和SYSAUX表空间处于只读模式。
注:无法使还原表空间和临时表空间成为只读表空间。
-脱机,可以让联机的表空间脱机,使数据库的这部分暂时不可用于一般用途。数据库的余下部分是开放的,可让用户访问其中的数据。表空间脱机时,可以使用以下选项:
Normal(正常),如果表空间中的任一数据文件都不存在任何错误状态,通过正常方式便可使表空间脱机。当Oracle DB使表空间脱机时,通过为表空间的所有数据文件设置检查点,来确保所有数据写入磁盘。
Temporary(临时),如果表空间中的一个或多个文件存在错误状态,也可以使表空间临时脱机。当Oracle DB使数据文件(尚未脱机的)脱机时,将为这些数据文件设置检查点。如果没有任何文件脱机,但是您使用了临时子句,则在使表空间重新联机时不需要执行介质恢复。但是,如果因写错误而导致表空间的一个或个文件脱机,而且设置了表空间临时脱机,那么表空间需要执行恢复后才能重新联机。
Immediate(立即),Oracle DB可以使表空间立即脱机,而不需要为任何数据文件设置检查点。如果指定了“Immediate(立即)”,则必须先对表空间执行介质恢复,才能使表空间联机。如果数据库在NOARCHIVELOG模式下运行,则无法立即使表空间脱机。
For Recover(用于恢复),FOR Recover设置已被废弃。支持此语法是为了向后兼容。
注:不能使系统表空间脱机。
更改大小:通过向表空间添加数据文件/或更改现有数据文件的大小,可增加现有表空间的空间。
-ADD
ALTER TABLESPACE <tablespace_name> ADD DATAFILE <data file path> SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 8192M;
注:无法向大文件表空间中继续添加其它数据文件。
-RESIZE
ALTER DATABASE DATAFILE <data file path> RESIZE <change_size>;
可以扩大或缩小表空间。但是,不能使数据文件小于该文件中已使用的空间。ORA-03297:flie contains used data beyond requested resize value.
存储选项
阀值:Thresholds(阀值),可更改表空间的空间使用到达警告或严重级别时的值。
-Use Database Default Thresholds(使用数据库默认阀值)
-Specify Thresholds(指定阀值)
-Disable Thresholds(禁用阀值)
注:默认情况下,每隔10分钟才检查一次空间使用率,因此,可能要花费数分钟时间才会注册一条阀值预警。
表空间操作
-Add Datafile(添加数据文件):将数据文件添加到表空间
-Create Like(类似创建):将表空间作模板,创建另一个表空间。
-Generate DDL(生成DDL):生成用于创建表空间的数据定义语言(DDL)语句。随后,此语句可复制并粘贴到文本文件,以用作脚本或文档。
-Make Locally Managed(进行本地管理):如果表空间当前是字典管理的表空间,则可将该表空间转换为本地管理的表空间。这种转换只能单向进行;不能将表空间重新转换到字典管理的表空间。如果需要,可以使用PL\SQL程序包。DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL来转换到字典管理的表空间。
-Make Readonly(只读):停止对表空间的所有写操作。允许完成当前的事务处理,但是,不允许对表空间启动新的DML活动或其他写活动。只有表空间的当前状态不是只读时,才显示此选项。
-Make Writable(可写):允许对表空间中的对象启动DML活动和其它写活动。只有表空间的当前状态不可写时,才显示此选项。
-Place Online(联机):使当前脱机的表空间联机。
-Reorganize(重组):表空间中各处移动对象以回收空间,使其变为可用。重组时请在表空间对象处于非使用/非高峰时执行。
-Run Segment Advisor(运行段指导):使用该指导可根据对象中空间碎片的级别来确定对象是否拥有可回收的空间。会在表空间级别上针对表空间中的每个段生成建议。
-Show Dependencies(显示依赖性):显示此表空间依赖的对象,或依赖于此表空间的对象。
-Show Tablespace Contents(显示表空间内容):显示关于表空间中所有段的信息,包括所有区的图形。
-Take Offline(脱机):使当前联机的表空间不可用。此时不会删除表空间,只是表空间不可用。
删除表空间
不再需要表空间及其内容(表空间中包含的段),可以从数据库中删除表空间及其内容。必须具有DROP TABLESPACE系统权限才可以删除表空间。
删除表空间时,会删除关联数据库控制文件中的文件指针。如果在使用Oracle管理的文件(OMF),则还会删除基础操作系统文件。如果未使用OMF,则可以根据需要指示Oracle服务器其删除包含在已删除表空间中的操作系统文件。如果不指示,Oracle服务器只会删除表空间的数据文件指针,后续还要在操作系统删除这些数据文件。
查看表空间信息
表空间信息:
DBA_TABLESPACES
V$TABLESPACE
数据文件信息:
DBA_DATA_FILES
V$DATAFILE
V$DBFILE视图显示数据库中的所有数据文件,保留此视图是为了向后兼容。
临时文件信息
DBA_TEMP_FILES
V$TEMPFILE
Oracle管理的文件(OMF)
按照数据库对象而不是文件名指定文件操作.
DB_CREATE_FILE_DEST 定义数据文件和临时文件默认文件系统目录的位置
DB_CREATE_ONLINE_LOG_DEST_n 定义重做日志文件和控制文件的创建位置
DB_RECOVERY_FILE_DEST 快速恢复区的默认位置
ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘+DATA‘;
CREATE TABLESPACE TBS_1;
OMF根据内部使用标准文件系统接口创建或删除下列数据库结构的文件:
-表空间
-重做日志文件
-控制文件
-归档日志
-块更改跟踪文件
-闪回日志
-RMAN备份
数据库既可以包含Oracle管理的文件,也可以包含非Oracle管理的文件。由这两个参数之一指定的文件系统目录必须都已存在;数据库不会创建该目录。该目录还必须具有相应的权限,以便数据库在其中创建文件。
Oracle管理的文件具有特定的命名格式。例如,基于Linux和Unix的系统中使用以下格式:
<destination_prefix>/o1_mf_%t_%u_.dbf
请勿重命名Oracle管理的文件。数据库通过名称来识别Oracle管理的文件。重命名文件会导致数据库无法将其识别为Oracle管理的文件,从而无法正确地管理该文件。
默认情况下,Oracle管理的数据文件(包括SYSTEM和SYSAUX表空间中Oracle管理的数据文件)为100MB大小且可以自动扩展。
注:默认情况下,ASM使用OMF文件,但是,如果在创建表空间时或向现有表空间中添加ASM数据文件时为ASM数据文件指定了别名,则该ASM数据文件不会为OMF格式。
扩大数据库
创建新的表空间
将数据文件添加到现有的小文件表空间
增加数据文件的大小
动态扩展数据文件