1、表空间,数据文件,控制文件:
为数据库分配更多的空间:
a 为表空间添加新的数据文件:alter tablespace system add datafile ‘data2.dbf 'size 10m; 这个命令很重要哦。
b 创建新的表空间(相当于至少向数据库中添加了一个数据文件):create tablespace users datafile ‘data3.ora’;创建了一个名字为users的表空间,并插入了一个新的数据文件data3.ora。(其实此句会报错,因为没有指定文件的大小)
c 通过增大数据文件增大数据库空间:
alter database datafile ‘data3.ora’autoextend on next 20mmaxsize 1000m;
2、关于大文件表空间(bigfile tablespace),system表空间,sysaux表空间,和撤销表空间(undo tablespace):
a 大文件表空间:数据库默认情况下创建的是小文件表空间(small file tablespace),使用大文件表空间,oracle把表空间看做一个对象直接管理,不用数据库管理员去手动创建数据文件,管理各个数据文件是由表空间自己管理的。只有本地管理的(locally managed),且段空间自动管理(automatic segment-space
management)的表空间(tablespace)才能使用大文件表空间(bigfile tablespace)。但是有两个例外:本地管理的撤销表空间(undo tablespace)和临时表空间(temporary tablespace),即使其段(segment)为手工管理(manually managed),也可以使用大文件表空间。管理员可以创建一组临时表空间(temporary tablespace),用户在需要时可以利用组内各个表空间(tablespace)提供的临时空间。管理员还可以指定表空间组(tablespace
group)为数据库默认的临时表空间。当用户需要大量临时空间进行排序操作时,就可以利用大文件表空间及表空间组。
-
- 使用大文件表空间(bigfile tablespace)可以显著地增强Oracle数据库的存储能力。一个小文件表空间(smallfile tablespace)最多可以包含1024个数据文件(datafile),而一个大文件表空间中只包含一个文件,这个数据文件的最大容量是小数据文件的1024倍。这样看来,大文件表空间和小文件表空间的最大容量是相同的。但是由于每个数据库最多使用64K个数据文件,因此使用大文件表空间时数据库中表空间的极限个数是使用小文件表空间时的1024倍,使用大文件表空间时的总数据库容量比使用小文件表空间时高出三个数量级。换言之,当一个Oracle数据库使用大文件表空间,且使用最大的数据块容量时(32K),其总容量可以达到8EB。
- 在超大型数据库中使用大文件表空间减少了数据文件的数量,因此也简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件(control file)的容量也得以减小。
- 由于数据文件对用户透明,由此简化了数据库管理工作。
-
- 大文件表空间(bigfile tablespace)应该和自动存储管理(Automatic Storage Management)或其他逻辑卷管理工具(logical volume manager)配合使用,这些工具应该能够支持动态扩展逻辑卷,也能支持striping(数据跨磁盘分布)或RAID。
- 应该避免在不支持striping的系统上使用大文件表空间,因为这将不利于并行执行(parallel execution)及 RMAN 的并行备份(backup parallelization)。
- 当表空间正在使用的磁盘组(disk group)可能没有足够的空间,且扩展表空间的唯一办法是向另一个磁盘组加入数据文件时,应避免使用大文件表空间。
- 不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间(tablespace)的容量。参考相关的操作系统文档了解其支持的最大文件容量。
- 如果使用大文件表空间替代传统的表空间,数据库开启(open),checkpoints,以及 DBWR 进程的性能会得到提高。但是增大数据文件(datafile)容量可能会增加备份与恢复的时间。
b system表空间:管理员可以创建本地管理的system表空间,也可以把数据字典管理的systen表空间转换成本地管理的,但是这个转换是单向的,也就是说你不能把一个本地管理的system表空间转换成数据字典管理的。如果数据库中的 SYSTEM 表空间(tablespace)为本地管理的(locally
managed),那么此数据库中就不能创建数据字典管理的(dictionary managed)表空间。虽然用户可以通过可移动表空间(transportable tablespace)功能向其中添加数据字典管理的表空间,但这个表空间只能是只读的。
所有和pl/sql相关的程序结构(包括过程(procedure),函数(function),包(package),及触发器(trigger))都会在system表空间中。
c sysaux表空间:这是一个system的辅助表空间,oracle的很多组件数据都存在于这个表空间中,那么如果出现sysaux这个表空间因为介质故障而失效时,oracle的一些特性就不能用了。
d 撤销表空间(undo tablespace):这是一个特殊的表空间,他专门用来存储撤销信息(undo information)的,不能由用户创建。一个数据库中可以有多个撤销表空间,也可以没有撤销表空间。每个Oracle实例(instance)有(且仅有)一个撤销表空间。Oracle在撤销表空间内自动地创建和维护撤销段(undo
segment),对撤销数据(undo data)进行管理。当事务(transaction)内第一条 DML 语句运行时,系统就为期其在当前撤销表空间(undo tablespace)中分配一个撤销段(undo segment),同时也分配一个事务表(transaction table)。在极少数情况下,如果实例(instance)中没有指定撤销表空间,那么事务将使用系统的撤销段。
用户可以创建大文件撤销表空间(bigfile undo tablespace)。
创建撤销表空间的语句:create undo tablespace。也可以在create database 的同时创建撤销表空间。删除修改和普通表空间一样用:drop tablespace,alter
tablespace(这句可以向undo表空间插入数据文件,以增大undo tablespace的容量)。
在一个数据库实例初始化的时候有两种方法创建撤销表空间:
- 在实例启动时。用户可以在实例的初始化文件(initialization file)中指定一个撤销表空间,或指定由系统自动选择一个可用的撤销表空间。
- 当实例运行时。使用 ALTER SYSTEM SET UNDO_TABLESPACE 将当前活动的撤销表空间替换为另一个。这种方式很少使用。
用户可以创建多个undo tablespace 用于切换使用,用户也可以控制undo表空间内的撤销(undo)信息的生存周期。
e 默认临时表空间:如果system表空间是本地管理表空间,那么创建数据库的时候必须定义一个默认临时表空间(temporary tablespace),因为本地管理的system表空间不能作为临时表空间;如果system表空间是数据字典管理的,且创建数据库的时候没有指定默认的临时表空间,那么system表空间就会被当做临时表空间。此时用户在 ALERT.LOG 文件中会发现一条警告:建议创建默认的临时表空间,以后的Oracle版本将会需要。用户在使用 CREATE
DATABASE 语句创建数据库时,可以通过 DEFAULT TEMPORARY TABLESPACE 子句指定默认的临时表空间(temporary tablespace)。如果用户移除(drop)了所有默认的临时表空间(temporary tablespace),Oracle将使用 SYSTEM 表空间(tablespace)作为默认的临时表空间。
3、
一个小型数据库可能只需要使用 SYSTEM 表空间(tablespace);但是Oracle建议用户至少创建一个额外的表空间来存储用户数据,使之与系统的数据字典信息(data dictionary information)分离。这使用户在进行数据库管理操作时更灵活,并减少了由于数据字典对象(dictionary object)与用户方案对象(schema
object)处于同一数据文件(datafile)而导致的竞争。
用户可以利用多个表空间(multiple tablespace)完成以下任务:
-
-
-
- 控制数据库内的磁盘空间分配
- 为数据库用户设定空间使用配额(quota)
- 通过将某个表空间置于联机/脱机(online/offline)状态来控制数据的可访问性(availability)
- 执行对数据库的某部分的备份与恢复
- 使数据存储可以跨多个设备,提升系统性能
-
-
数据库管理员可以对表空间(tablespace)进行以下操作:
-
-
-
- 创建一个新的表空间
- 为一个表空间添加数据文件(datafile)
- 设置或修改表空间内某段(segment)的默认段存储参数(default segment storage setting)
- 使一个表空间为只读(read only)或可读写(read/write)
- 将表空间设置为临时(temporary)或永久(permanent)
- 重命名表空间
- 移除(drop)表空间
-
-
3、表空间的管理:
表空间的管理就是监控管理表空间内已用和可用的数据扩展,有两种方式管理:本地管理表空间和数据字典管理表空间。
本地管理表空间:用位图的方式记录已用和未用的数据扩展,在每个数据文件中维护一个位图,记录此数据文件内的数据块的可用和占用情况,位图中的一位代表一个或者一组数据块,当一个数据扩展被分配或者释放,oracle就会将对应的数据块用位图做好标记(文档中说这种修改不会产生回滚信息,因为它不修改数据字典中的表。我的理解是他只是在添加或者删除数据,而数据字典只是记录了表的结构和统计信息,数据字典里没有数据所以不会修改数据字典里的表)。
数据字典管理表空间:就是通过数据字典来记录已用和未用的数据扩展如果表空间(tablespace)使用数据字典(data dictionary)管理其数据扩展(extent),当发生数据扩展的分配与回收时,Oracle会更新数据字典内相应的表。Oracle也会在更新数据字典表时存储相应的回滚信息(rollback
information)。因为数据字典表与回滚段(rollback segment)都是数据库的一部分,她们使用的空间如同其他数据库对象一样也必须进行空间管理操作。
用户创建表空间的时候需要选择管理方式(一般建议用本地管理,数据字典管理估计快淘汰了),也可以在创建以后用DBMS_SPACE_ADMIN包来改变管理方式。
本地管理表空间下的段空间管理:
用户使用 CREATE TABLESPACE 语句创建一个本地管理的表空间(locally managed tablespace)时,可以用 SEGMENT SPACE MANAGEMENT 子句来设定段(segment)内的可用/已用空间如何管理。可选的方式有:
*AUTO在这种设置下,Oracle使用位图(bitmap)管理段内的可用空间。[注意此处的位图与本地管理的表空间使用的位图不一样]此处的位图用于描述段内每个数据块(data
block)是否有足够的可用空间来插入(insert)新数据。随着一个数据块中可用空间的变化,她的状态也被及时地反映到位图中。Oracle使用位图可以更自动化地管理段内的可用空间。这种空间管理形式被称为自动段空间管理(automatic segment-space management)一个本地管理的(locally managed),且使用自动段空间管理的表空间,既可以被创建为小文件表空间(传统的)(smallfile
tablespace),也可以被创建为大文件表空间(bigfile tablespaces)。在创建本地管理的表空间时,自动段空间管理是默认值。
*MANUAL在这种设置下,Oracle使用可用块列表(free list)来管理段内的可用空间。可用块列表记录了所有可以被用于插入新数据的数据块。
4、联机脱机表空间:
SYSTEM 表空间在数据库处于开启(open)状态时总是处于联机状态,因为Oracle需要使用其中的数
表空间资料库
表空间资料库(tablespace repository)是一个表空间的集合。表空间资料库基于文件组资料库(file group repository),但其中只包含在数据库间复制或移动表空间(tablespace)所需的文件。多个表空间集(tablespace set)可以存储在同一个表空间资料库中,同一个表空间集的不同版本也可以存储在同一个表空间资料库中。在一个表空间资料库中,同一版本的表空间集由以下文件组成:
- 由 Data Pump 为表空间集导出的文件
- Data Pump 的导出日志文件
- 组成表空间集的数据文件(datafile)
如何在数据库间移动或复制表空间
在复制或移动表空间前,用户首先将表空间置于只读状态,再复制表空间的数据文件(datafile),最后使用export/import工具迁移位于数据字典(data dictionary)中的数据库元数据信息(database metadata information)。数据文件以及元数据导出文件必须全部复制到目标数据库上。移动这些文件时可以使用任何用于文件复制的工具,例如操作系统的复制功能,FTP,或者发布到CD中。复制数据文件(datafile)并导入元数据(metadata)之后,用户可以选择是否将表空间(tablespace)置为可读写状态。在一个将 COMPATIBLE 初始化参数(initialization
parameter)设置为10或更高的Oracle数据库中首次打开一个表空间(tablespace)的各个数据文件(datafile)时,每个文件将识别她所处的平台,之后将识别出的磁盘格式(disk format)记录在文件头区域(file header block),用于以后的文件格式识别(identification)与验证(verification)。只读(read only)的文件在被置为可读写,或脱机(offline)文件被联机(online)后,Oracle都会将其兼容性提升到与当前数据库相同。这意味着
Oracle 10g 之前版本的只读表空间如果想使用跨平台移动特性(cross platform transportable feature),至少要在10g数据库中置为可读写状态一次。
4、数据文件,控制文件:
临时数据文件
本地管理的(locally managed)临时表空间(temporary tablespace)使用临时的数据文件(datafile)(临时文件),这样的文件与普通数据文件类似,但有以下区别:
- 临时文件总是被设置为 NOLOGGING 模式。
- 用户不能将临时文件设为之读
- 用户不能使用 ALTER DATABASE 语句创建临时文件
- 介质恢复(media recovery)不能识别临时文件:
- BACKUP CONTROLFILE 不会产生与临时文件有关的信息
- CREATE CONTROLFILE 不能设定与临时文件有关的信息
- 当用户创建临时文件或改变其容量时,Oracle并不保证按照用户指定的文件容量为其分配磁盘空间。在某些文件系统(file systems)中(例如UNIX)磁盘块(disk block)并不会在文件创建或改变容量时分配,而是在其被使用之前 才分配。
临时文件(tempfile)信息可以从 DBA_TEMP_FILES 数据字典表及 V$TEMPFILE 动态性能视图(dynamic performance view)中查询,但是不存在于 DBA_DATA_FILES 或V$DATAFILE 视图中。
控制文件
控制文件(control file)中包含了其所属数据库的信息,实例(instance)在启动,及正常工作期间都需要存取这些信息。控制文件的内容只能由Oracle修改,数据库管理员或用户都不应编辑控制文件。
控制文件(control file)中主要包含以下内容:
-
-
-
- 数据库名(database name)
- 数据库创建时的时间戳(timestamp)
- 属于此数据库的数据文件(datafile)及重做日志文件(redo log file)的名称与存储位置
- 表空间(tablespace)信息
- 脱机(offline)的数据文件
- 日志历史信息
- 归档日志(archived log)信息
- 备份集(backup set)与备份块(backup piece)信息
- 数据文件与重做日志的备份信息
- 数据文件复制信息
- 当前的日志序列号(log sequence number)
- 检查点(checkpoint)信息
-
-
控制文件(control file)还被用于保存检查点(checkpoint)信息。每隔三秒钟,检查点进程(checkpoint process,CKPT)将会在控制文件中记录重做日志(redo log)检查点位置(checkpoint position)信息。当数据库恢复时,重做日志中此点之前的重做条目(redo entry)都无需恢复,因为这些数据已经被写入数据文件(datafile)中了。
oracle使用多重控制文件机制,也就是说会在不同的的磁盘上存储多个同步的相同内容的控制文件,这类似与重做日志文件(redo log file)。
如果一个数据库的所有控制文件永久丢失了,那么实例将中止且需要进行介质恢复(media recovery)。如果没有当前控制文件(control file)的副本而必须使用较早的备份,那么介质恢复过程将会比较复杂。因此Oracle强烈建议用户遵循以下规则:
- 在每个数据库中使用多重控制文件(multiple control file)
- 将控制文件的副本存储在不同的物理磁盘上
- 使用操作系统的镜像功能(operating system mirroring)
- 监控备份工作