创建表时,还会创建一个用于保存其数据的段。表空间包含一个段集合。
从逻辑上来说,表包含许多行列值。行最终以行片段的形式存储在数据库块中。之所以称其为行片段,是因为在某些情况下可能不会在一个位置存储完整的行。当插入的行太大而无法装入单个块时(链接行),或当更新导致现有行超出当前块的可用空闲空间时(迁移行),就会发生这种情况。当表中的列多于255
列时,也会使用行片段。在这种情况下,这些行片段可能位于同一个块(块内链)中,也可能位于多个块中。
? 块头:块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务处理插槽。每个插槽的大小约为23
字节,修改块中的行时会使用这些插槽。块头自上
而下进行增长。
? 行数据:这是块中行的实际数据。行数据空间自下而上进行增长。
? 空闲空间:空闲空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入新行或用更大的值更新现有行的列时,行数据会占用空闲空间。
导致块头增长的事件的示例包括:
- 行目录需要更多的行条目
- 需要的事务处理插槽数多于最初配置的数目
起初,块中的空闲空间是相邻的。但是,删除和更新操作可能会使块中的空闲空间变成碎片。需要时Oracle 服务器会接合块中的空闲空间。
逻辑数据结构存储在数据库的物理文件中。通过Enterprise Manager (EM) 可方便地查看数据库的逻辑结构。
通过单击“Server(服务器)”页的“Storage(存储)”区域中的链接,可以获得关于每一种结构的详细信息。
1. 单击“Server(服务器)”选项卡,然后单击“Storage(存储)”标题下的“Tablespaces(表空间)”。
2. 单击“Create(创建)”。
注:如果要创建与现有表空间类似的表空间,请选择一个现有表空间,然后从“Actions(操作)”菜单中选择“Create
Like(类似创建)”。单击“Go(执行)”。
此时会出现“Create Tablespace(创建表空间)”页。
3. 输入表空间的名称。
4. 在“Extent Management(区管理)”标题下,选择“Locally Managed(本地管理的)”。
Oracle DB
服务器可以在表空间中有效地管理本地管理的表空间的区。对于字典管理的表空间,必须更主动地管理区,而且需要数据字典访问权限才能跟踪这些区。
提供“Dictionary-managed(字典管理的)”选项只是为了向后兼容;Oracle 不建议使用此选项。
5. 在“Type(类型)”标题下,选择“Permanent(永久)”。永久表空间用于存储系统或用户创建的永久数据库对象。
6. 在“Status(状态)”标题下,选择“Read
Write(读写)”。读写状态表示,在创建表空间后用户可以对表空间进行读写操作。这是默认设置。
7. 在该页的“Datafiles(数据文件)”区域中,单击“Add(添加)”将数据文件添加到该表空间。
一个表空间必须至少有一个文件。根据环境,选择适当的存储类型。大文件表空间用于超大型数据库,在这些数据库中,ASM
或其它逻辑卷管理器支持条带化或独立磁盘
冗余阵列(RAID),并且支持可动态扩展的逻辑卷。
8. 在“Add Datafiles(添加数据文件)”页上选择所需的存储类型,并输入必需的信息。
对于ASM,选择所需的磁盘组。对于“File System(文件系统)”,为数据文件输入文件名和文件目录。
9. 输入所需的文件大小。
10.在“Storage(存储)”区域中,选择“Automatically extenddatafile when full
(AUTOEXTEND)(数据文件满后自动扩展(AUTOEXTEND))”,然后在“Increment(增量)”字段中指定一个数量。这样,每次数据文件超出空间后都会自动扩展。当然,数据文件受限于它所驻留的物理介质。将“Maximum
File Size(最大文件大小)”保留为“Unlimited(无限制)”或为其输入一个最大值。单击
“Continue(继续)”,返回到“Create Tablespace(创建表空间)”页。
返回后再数据文件可看见刚创建的数据文件。
11.返回到“Create
Tablespace(创建表空间)”页后,单击“Storage(存储)”选项卡,根据需要修改该表空间的存储选项。大多数情况下,接受“Storage(存储)”页上的所有默认值即可。单击“OK(确定)”创建表空间。
注:这些步骤介绍了大多数情况下快速创建表空间的方法。可能需要根据具体需求更改某些选项。
区分配:可通过以下两种方法之一分配本地管理表空间中的区:
?
自动:也称为“自动分配”,这种方法指定表空间中的区的大小是由系统管理的。不能对临时表空间指定“Automatic(自动)”。
? 统一:这种方法规定使用你指定的统一区大小来管理表空间。默认大小为1 MB。
临时表空间的所有区都是统一的。不能对还原表空间指定“Uniform(统一)”。
段空间管理:本地管理的表空间中的段空间管理方式可指定为:
? 自动:Oracle DB
使用位图管理段中的空闲空间。位图描述了段中每个数据块的状态,该状态与可插入行的块中的空间量有关。当数据块中可用空间增多或减少时,位图中会反映数据块的新状态。通过使用位图,Oracle
DB 可以提高管理空闲空间的自动化程度。因此,这种空间管理方式称为“自动段空间管理(ASSM)”。
?
手动:此方法指定要使用空闲列表来管理段中的空闲空间。空闲列表是由一些数据块组成的列表,这些数据块中有可插入行的空间。由于这种管理段空间的方式需要为在表空间中创建的方案对象指定并优化PCTUSED、FREELISTS和FREELIST
GROUPS存储参数,因此这种方式称为“手动段空间管理”。支持使用此方法是为了向后兼容,建议使用ASSM。
压缩选项:默认情况下,数据段压缩功能处于禁用状态。启用数据段压缩功能可以节省磁盘空间使用量、减少缓冲区高速缓存中的内存使用量,还可以加快读取时执行查询的效率。
但是,在数据加载和DML 过程中会产生CPU 开销。本功能在联机分析处理(OLAP)
系统中尤其有用,在这些系统中存在长时间的只读运算;但也可用在联机事务处理(OLTP) 系统中。
事件记录:事件记录子句为表空间中创建的所有段设置默认的事件记录值。对表空间中的对象所做的更改会写入重做日志。如果未启用事件记录,则使用SQL*Loader
和直接加载
INSERT操作进行的任何直接加载都不会写入重做日志,因此,如果发生数据丢失的情况,这些对象将不可恢复。如果在未启用事件记录的情况下创建了对象,则只有备份这些对象
才能进行恢复。选择不启用事件记录会对日后恢复对象的能力造成巨大影响。请谨慎使用。
注:如果对数据库启用了FORCE
LOGGING模式,该模式的优先级高于表空间事件记录设置。可以在创建数据库时将数据库置于FORCE
LOGGING模式,也可以在创建数据库后使用alter database force
logging命令将数据库置于该模式。
块信息:此区域显示所创建的表空间使用的块大小。此处显示的值为只读值。如果设置了任何其它块大小初始化参数(DB_nK_CACHE_SIZE),则会在此处列出其它值作为选项。
? SYSTEM
? SYSAUX
? TEMP
? UNDOTBS1
? USERS
? EXAMPLE(可选)
在预配置的数据库中创建了以下表空间:
? SYSTEM:Oracle
服务器使用SYSTEM表空间管理数据库。这个表空间包含的数据字典和表中包含关于数据库的管理信息。上述信息均包含在SYS方案中,只有SYS用户或者拥有所需权限的其它管理用户才可访问这些信息。
? SYSAUX:这是SYSTEM表空间的辅助表空间。Oracle DB
早期版本中某些使用SYSTEM表空间或其本身表空间的组件和产品现在改为使用SYSAUX表空间。每个Oracle Database
10g(或更高版本)数据库都必须拥有SYSAUX表空间。
在Enterprise Manager (EM)
中,可以查看这个表空间中内容的饼图。为此,请单击“Administration(管理)”页上的“Tablespaces(表空间)”。选择“SYSAUX”,单击“Edit(编辑)”。然后单击“Occupants(占有者)”选项卡。完成创建后,可以使用EM
来监视SYSAUX表空间中的每个占有者的空间使用情况。如果检测到某个组件占用了SYSAUX表空间中过多的空间,或者如果预计该组件会占用过多的空间,则可以通过选择其中一个占有者,然后单击“Change
Tablespace(更改表空间)”,将选择的占有者移到另外的表空间。
? TEMP:如果执行的SQL
语句需要创建临时段(如大规模排序或创建索引),则需要使用临时表空间。如同为了存储所创建的数据对象而向每一用户分配默认表空间一样,还会向每一用户分配一个临时表空间。最好的做法是为数据库定义一个默认临时表空间,并且将此表空间分配给所有新建用户(除非另行指定)。在预配置的数据库中,TEMP表空间被指定为默认临时表空间。这表示,如果在创建用户帐户时未指定临时表空间,则Oracle
DB 会将此表空间分配给用户作为临时表空间。
?
UNDOTBS1:这是数据库服务器用于存储还原信息的还原表空间。如果数据库使用“自动还原管理”,那么数据库在任何指定时间只能使用一个还原表空间。此表空间是在创建数据库时创建的。
?
USERS:此表空间用于存储用户对象和数据。如果在创建用户时未指定默认的表空间,则USERS表空间将成为该用户创建的所有对象的默认表空间。对于SYS和SYSTEM用户,默认的永久表空间是SYSTEM。
? EXAMPLE:此表空间包含创建数据库时可以安装的示例方案。这些示例方案为各种示例提供了一个通用平台。在Oracle
文档和课件中包含了建立在这些示例方案基础上的示例。
注:为简化管理,通常为索引使用单独的表空间。
创建表空间后,可以根据系统更改的需要,采用若干种方法来变更表空间。
重命名:输入表空间的新名称,然后单击“Apply(应用)”。
ALTERTABLESPACE"USERS"RENAMETO"USER"
更改状态:表空间有三种不同状态,它可以处于其中一种状态。由于表空间的可用性取决于表空间的类型,因此以下三种状态不一定可用:
? 读写:表空间已联机,可进行读写。
?
只读:指定“只读”可将表空间置于只读模式。此状态下,可以完成(提交或回退)现有的事务处理,但是,不允许对表空间中的对象进一步执行数据操纵语言(DML)
操作。表空间已联机,但处于只读状态。不能使SYSTEM或SYSAUX表空间处于只读模式。
ALTER TABLESPACE"USERS"READONLY
注:无法使还原表空间和临时表空间成为只读表空间。
?
脱机:可以让联机的表空间脱机,使数据库的这部分暂时不可用于一般用途。数据库的余下部分是开放的,可让用户访问其中的数据。表空间脱机时,可以使用以下选项:
-
Normal(正常):ALTERTABLESPACE"USERS"OFFLINENORMAL
如果表空间中的任一数据文件都不存在任何错误状态,通过正常方式便可使表空间脱机。当Oracle
DB 使表空间脱机时,通过为表空间的所有数据文件设置检查点,来确保将所有数据写入磁盘。
-
Temporary(临时):ALTERTABLESPACE"USERS"OFFLINETEMPORARY
如果表空间中的一个或多个文件存在错误状态,也可以使表空间暂时脱机。当Oracle DB
使数据文件(尚未脱机的)脱机时,将为这些数据文件设置检查点。如果没有任何文件脱机,但是使用了临时子句,则在使表空间重新联机时不需要执行介质恢复。但是,如果因写错误而导致表空间的一个或多个文件脱机,而且设置了表空间临时脱机,那么表空间需要执行恢复后才能重新联机。
-
Immediate(立即):ALTERTABLESPACE"USERS"OFFLINEIMMEDIATE
Oracle
DB
可以使表空间立即脱机,而不需要为任何数据文件设置检查点。如果指定了“Immediate(立即)”,则必须先对表空间执行介质恢复,才能使表空间联机。如果数据库在NOARCHIVELOG模式下运行,则无法立即使表空间脱机。
- For
Recover(用于恢复):ALTERTABLESPACE"USERS"OFFLINEFORRECOVER
FOR
RECOVER设置已被废弃。支持此语法是为了向后兼容。
注:不能使系统表空间脱机。
更改大小:通过向表空间添加数据文件,或者更改现有数据文件的大小,可增加现有表空间的空间。
? 要向表空间添加新的数据文件,请单击“Add(添加)”,然后在“Add
Datafile(添加数据文件)”页中输入有关数据文件的信息。
ALTERTABLESPACE"USERS"ADDDATAFILE‘/u01/app/oracle/oradata/test0924/user02.dbf‘SIZE20MAUTOEXTENDONNEXT1024KMAXSIZEUNLIMITED
ALTER TABLESPACE"USERS"OFFLINEFORRECOVER
注:无法向大文件表空间中继续添加其它数据文件。
? 要更改现有数据文件的大小,单击数据文件的名称,在“Edit
Tablespace(编辑表空间)”页的“Datafiles(数据文件)”区域中选择数据文件;或者选择数据文件,然后单击“Edit(编辑)”。接下来,在“Edit
Datafile(编辑数据文件)”页上,可更改数据文件的大小。可以扩大或缩小表空间。但是,不能使数据文件小于该文件中已使用的空间;如果尝试这样做,则会出现以下错误:
ORA-03297:file contains used data beyond requested RESIZE value
ALTERDATABASEDATAFILE‘/u01/app/oracle/oradata/test0924/users01.dbf‘RESIZE30M
存储选项:单击“Storage(存储)”可更改表空间的事件记录行为。
阈值:单击“Thresholds(阈值)”可更改表空间的空间使用到达警告或严重级别时的值。
共有三个选项:
? Use Database Default
Thresholds(使用数据库默认阈值):使用预设的默认值,而且提供用于设置这些默认值的选项。
? Specify Thresholds(指定阈值):可以设置这个特定表空间的阈值。
? Disable Thresholds(禁用阈值):关闭这个表空间的空间使用预警。
注:默认情况下,每隔10 分钟才检查一次空间使用率,因此,可能要花费数分钟时间才会注册一条阈值预警。
使用“Actions(操作)”菜单,可以对表空间执行各种任务。选择一个表空间,然后选择要执行的操作。
? 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(重组):启动“Reorganization
Wizard(重组向导)”,使用此向导可在表空间中各处移动对象以回收空间,使其变为可用。这个任务应当在表空间中的对象处于非使用高峰时执行。
? Run Segment Advisor(运行段指导):启动“Segment
Advisor(段指导)”,使用该指导可根据对象中空间碎片的级别来确定对象是否拥有可回收的空间。会在表空间级别上针对表空间中的每个段生成建议。
? Show Dependencies(显示依赖性):显示此表空间依赖的对象,或依赖于此表空间的对象。
? Show Tablespace Contents(显示表空间内容):显示关于表空间中所有段的信息,包括所有区的图形。
? Take Offline(脱机):使当前联机的表空间不可用。此时不会删除表空间,只是表空间不可用。
如果不再需要表空间及其内容(表空间中包含的段),可以从数据库中删除表空间及其内容。必须具有DROP
TABLESPACE系统权限才可以删除表空间。
删除表空间时,会删除关联数据库控制文件中的文件指针。如果在使用Oracle
管理的文件(OMF),则还会删除基础操作系统文件。如果未使用OMF,则可以根据需要指示Oracle
服务器删除包含在已删除表空间中的操作系统文件(数据文件)。如果不指示Oracle
服务器在删除表空间的同时删除数据文件,那么,当以后要删除这些文件时,必须使用操作系统的相应命令。
不能删除包含活动段的表空间。例如,如果某个表空间中的某个表当前正在使用中,或者该表空间包含回退未提交事务处理所需的还原数据,则不能删除该表空间。表空间的状态可以是联机的也可以是脱机的,但是在删除表空间之前,最好使其处于脱机状态。
单击“View(查看)”可查看关于选定表空间的信息。在“View
Tablespace(查看表空间)”页上,还可通过单击“Edit(编辑)”来变更表空间。
通过查询以下项也可以获取表空间和数据文件信息:
? 表空间信息:
- DBA_TABLESPACES
- V$TABLESPACE
? 数据文件信息:
- DBA_DATA_FILES
- V$DATAFILE
注:V$DBFILE视图显示数据库中的所有数据文件。保留此视图是为了向后兼容。建议改用V$DATAFILE。
? 临时文件信息:
- DBA_TEMP_FILES
- V$TEMPFILE
在“Tablespaces(表空间)”主页或特定表空间页上,从“Actions(操作)”下拉列表中选择“Show Tablespace
Contents(显示表空间内容)”,然后单击“Go(执行)”。
“Show Tablespace
Contents(显示表空间内容)”页中显示了关于表空间的详细信息,其中包括表空间中段的列表、每个段的类型、段大小以及每个段中的区数。使用这四个值中的任何一个值,通过单击列标题可对列表进行排序,或者通过在“Search(搜索)”区域中输入值对列表进行过滤。对于字典管理的表空间,将显示以下额外的列:
?Max Extents(最大区数)
?Next(下一个)
? Percent Increase(增加百分比)
要查看区列表,请单击“Extents(区)”列中的链接。
要以图形方式查看区,请展开“Extent map(区映射)”,然后在各个区上移动光标。
此时会显示以下信息:
? 区所属的段的名称
? 区ID
? 块ID
? 区大小(以块数计)
? 用来存储区的数据文件
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘+DATA‘;
SQL> CREATE TABLESPACE tbs_1;
Oracle 管理的文件(OMF)
如果使用Oracle 管理的文件,则不需要直接管理Oracle DB
中的操作系统文件。可按照数据库对象而不是文件名指定操作。数据库将根据需要,在内部使用标准文件系统接口创建或删除下列数据库结构的文件:
? 表空间
? 重做日志文件
? 控制文件
? 归档日志
? 块更改跟踪文件
? 闪回日志
? RMAN 备份
数据库既可以包含Oracle 管理的文件,也可以包含非Oracle
管理的文件。由这两个参数之一指定的文件系统目录必须都已存在;数据库不会创建该目录。该目录还必须具有相应的权限,以便数据库在其中创建文件。
示例说明在设置DB_CREATE_FILE_DEST后,可以省略CREATE
TABLESPACE语句中的DATAFILE子句。将在DB_CREATE_FILE_DEST指定的位置创建数据文件。按所示方式创建表空间时,会为所有参数分配默认值。
Oracle 管理的文件具有特定的命名格式。例如,在基于Linux 和UNIX 的系统中使用以下格式:
<destination_prefix>/o1_mf_%t_%u_.dbf
请勿重命名Oracle 管理的文件。数据库通过名称来识别Oracle 管理的文件。重命名文件会导致数据库无法将其识别为Oracle
管理的文件,从而无法正确地管理该文件。
以下示例将创建数据文件的默认位置设置为/u01/oradata,然后创建了一个在该位置存储数据文件的表空间tbs_1。
SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘/u01/oradata‘;
SQL> CREATE TABLESPACE tbs_1;
默认情况下,Oracle 管理的数据文件(包括SYSTEM和SYSAUX表空间中Oracle 管理的数据文件)为100MB
大小且可以自动扩展。
注:默认情况下,ASM 使用OMF 文件,但是,如果在创建表空间时或向现有表空间中添加ASM 数据文件时为ASM 数据文件指定了别名,则该ASM
数据文件不会为OMF 格式。
可以按以下方式扩大数据库:
? 创建新的表空间
? 将数据文件添加到现有的小文件表空间
? 增加数据文件的大小
? 动态扩展数据文件
扩大数据库
可以使用Enterprise Manager 或SQL
语句执行这些活动。可以将数据库大小描述为数据库的所有表空间的大小之和。