3.2 表空间概述

数据库 = 一个或多个表空间 = 一个或多个段 = 一个或多个数据扩展 = 一组连续的数据块。详情参见2.1章。
3.2.1 大文件表空间
       在64位系统中,oracle数据库的存储能力被扩展到8EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)。
       当数据库文件由oracle管理,且使用大文件表空间时,数据文件对用户完全透明,用户只需对表空间执行管理操作。
       数据库默认创建的是小文件表空间,即oracle中传统的表空间类型。数据库中SYSTEM,SYSAUX表空间在创建时总是使用传统类型。只有本地管理的,且段空间自动管理的表空间,才能使用大文件表空间。但是有两个例外:本地管理的撤销表空间和临时表空间,即使段为手工管理,也可以使用大文件表空间。
       一个oracle数据库可以同时包含大文件和小文件的表空间,SQL语句执行时无需考虑表空间的类型,除非语句中显示的引用了数据文件名。
3.2.1.1 使用大文件表空间的优势
       1.可以显著增强oracle数据库的存储能力,一个小文件表空间最多可以包含1024个数据文件;而大文件表空间只包含了一个数据文件,虽然他们的最大容量是相同的,但是每个数据库最多使用64k个数据文件。因此使用大文件表空间时总数据库容量比使用小文件表空间时高出三个数量级。
       2.在超大型数据库中使用大文件表空间减少了数据文件的数量,简化了对数据文件的管理工作。由于数据文件的减少,SGA中关于数据文件的信息,以及控制文件的容量也减少了许多。
3.2.1.2 使用大文件表空间时需要考虑的因素
       1.大文件表空间应该和自动存储或其他逻辑卷管理工具配合使用。这些工具应该能够支持动态扩展逻辑卷,也能支持striping或raid。
       2.避免在不支持striping的系统上使用大文件表空间,因为这不利于进行执行及rman的并行备份。
       3.当表空间正在使用的磁盘组可能没有足够的空间,且扩展表空间的唯一办法是从另一个磁盘组加入数据文件时,应该避免使用打文件的表空间。
       4.不建议在不支持大文件的平台上使用大文件表空间,这会限制表空间的容量。建议事先参考相关操作系统说明。
       5.如果使用大文件表空间代替传统的表空间,数据库开启,checkpoints,以及DBWR进程的性能会得到提高,但是增大数据文件容量可能会增加备份与恢复的时间。
       值得一提的是:大文件表空间目前应用的很少。G级别的数据文件就足矣。同时小文件表空间见过的最大的数据文件为4GB。
3.2.2 SYSTEM表空间
       每个oracle数据库都包含一个名为SYSTEM的表空间,她在数据库创建时由oracle自动创建。只要数据库处于开启状态,该表空间就一定是联机的。
       如果一个表空间为数据字典管理模式,可以将其转换为本地管理,以便发挥本地管理表空间的优势。但是如果一个表空间为本地管理的,则不能将它转换为数据字典管理的。
3.2.2.1 数据字典
       system表空间总是用于存储整个数据库的数据字典表(data dictionary table)。数据字典表存储在编号为1的数据文件中。
3.2.2.2 PL/SQL程序结构描述
       所有和PL/SQL程序结构(包括过程(procedure),函数(function),包(package)及触发器(trigger))有关的数据都被保存在SYSTEM表空间中。如果数据库中用户定义的程序结构很多,那么管理员必须为之在SYSTEM表空间中提够足够的空间。
3.2.3 SYSAUX表空间
       sysaux表空间是system表空间的一个辅助性表空间。oracle中很多组件使用sysaux表空间作为默认的数据存储位置。因此在10G数据库创建,或者从低版本升级到10G时,一定会自动创建SYSAUX表空间。
       此外,SYSAUX表空间还被用来集中存储所有不应放在SYSTEM表空间的数据库元数据。无论是依据模板简历的数据库,还是用户定义的数据库,使用SYSAUX表空间可以减少默认创建的表空间。在正常的数据库操作中,不允许移除(drop)或重命名(rename)sysaux表空间,sysaux表空间也不支持可移动表空间功能。如果sysaux表空间失效,那么有些数据库功能可能会随之失效。
3.2.4 撤销表空间
       撤销表空间是一个特殊的表空间,只能用于存储撤销信息。用户不能在其中创建段。一个数据库可以没有撤销表空间,也可以有多个。在自动撤销管理模式下,每个oracle实例有一个撤销表空间。oracle在撤销表空间内自动创建和维护撤销段,对撤销数据进行管理。
       当事务内第一条DML(数据操作语言)运行时,系统就为其在当前撤销表空间中分配一个撤销段,同时也分配一个事务表。在极少数情况下,如果实例中没有指定撤销表空间,那么事务将使用系统的撤销段。
       警告:在创建撤销表空间并使之联机之前,不要运行任何用户事务。
       撤销表空间由一组撤销文件构成,且为本地管理的。与其他表结构类似,撤销表空间中也存在由撤销数据块构成的数据扩展,这些数据扩展的状态由位图表示。在任何时间点上,一个数据扩展或者被分配个一个事务表,即被使用状态,或者处于可用。
       用户可以创建大文件撤销表空间。
3.2.4.1 创建撤销表空间
       DBA可以使用create undo tablespace语句单独创建撤销表空间,也可以在create database语句创建数据库时创建撤销表空间。撤销表空间也使用一组数据文件存储数据,既可以用drop tablespace语句移除它,其属性也可以通过alter tablespace语句修改。
       当撤销表空间正在被实例使用,或者包含了事务恢复所需要的撤销信息时,不能将其移除。
3.2.4.2 分配撤销表空间
       用户可以使用以下两种方法将撤销表空间分配给一个实例:
       1.在实例启动时。用户可以再实例的初始化文件中指定一个撤销表空间,或指定由系统自动选择一个可用的撤销表空间。
       2.当实例运行时。使用alter system set undo_tablespace将当前活动的撤销表空间替换为另一个。但这种方式很少用。
       用户可以使用alter tablespace语句向撤销表空间添加数据文件,以扩展撤销表空间的容量。
       用户可以创建多个撤销表空间,一边切换使用。用户还可以设定撤销信息的保存周期。用户也可以使用数据库资源管理器为用户规定撤销表空间的使用配额。
3.2.5 默认的临时表空间
       如果system表空间是本地管理的,用户必须在创建数据库时定义一个默认的临时表空间。本地管理的system表空间不能作为默认的临时存储空间。
       如果system表空间是数据字典管理的,且创建数据库时没有定义默认的临时表空间,那么oracle将system表空间作为默认的临时存储空间使用。此时用户在alert.log文件中会发现一条警告:建议创建默认的临时表空间,以后的oracle版本将会需要。
3.2.5.1 如何指定默认的临时表空间
       用户在使用create database语句创建数据库时,可以通过default temporary tablespace子句指定默认的临时表空间(temporary tablespace)。
       如果用户移除了所有的默认的临时表空间,oracle将使用system表空间作为默认的临时表空间。
       用户不能将默认的临时表空间转为永久表空间,或将其置为脱机状态。
       用户可以创建大文件临时表空间。大文件临时表空间使用临时文件,而不是数据文件。
3.2.6 在数据库中使用多个表空间
       数据库可以只有system表空间,但是oracle建议用户至少创建一个额外的表空间来存储用户数据,使之与系统的数据字典信息(data dictionary information)分离。这使用户在进行数据库管理操作时更灵活,并减少了由于数据字典对象与用户方案对象处于同一数据文件而导致的竞争。
       用户可以利用多个表空间完成以下任务:
       1.控制数据库内磁盘空间的分配
       2.为数据库用户设定空间使用配额
       3.通过将某个表空间置于联机/脱机状态来控制数据的可访问性
       4.执行对数据库的某部分的备份与恢复
       5.使数据存储可以跨多个设备,提升系统性能
       DBA可以对表空间进行如下操作:
       1.创建一个新的表空间
       2.为一个表空间增加数据文件
       3.设置或修改表空间内某段的默认段存储参数(default segment storage setting)
       4.使一个表空间为只读或可读写
       5.将表空间设置为临时或永久
       6.重命名表空间
       7.移除表空间
3.2.7 表空间内的空间管理
       表空间内分配空间的单位是数据扩展。oracle采用两中方式监控表空间内的空间的已用和可用情况。
       1.本地管理的表空间:通过位图管理数据扩展。
       2.数据字典管理的表空间:通过数据字典管理数据扩展。
       当用户创建表空间时,需要选择空间管理方式。在此之后,用户还可以通过DBMS_SPACE_ADMIN PL/SQL包来改变管理方式。当用户在创建表空间时没有指定数据扩展的管理方式,默认使用本地管理方式。
3.2.7.1 本地管理的表空间
       本地管理的表空间在每个数据文件中维护一个位图,记录此数据文件内数据块的状态,并据此管理表空间内的数据扩展。位图中的每一位代表一个或一组数据块。当一个数据扩展被分配或者被释放,oracle负责改变位图中相应的数据块状态。这些修改不会产生回滚信息,因为他们不会更新数据字典中的表。(但改变表空间的配额信息除外)
       本地管理的表空间与数据字典管理的表空间相比有如下优势:
       1.在本地管理数据扩展的分配,易于查找连续的可用空间(数据块),避免了数据扩展合并。
       2.在本地管理数据扩展的分配,能够避免产生递归(recursive)的空间管理操作。在使用数据字典管理的表空间时,分配或回收方案对象的数据扩展可能会导致数据字典表或回滚段中也产生分配或回收空间的操作。即称为递归的空间管理操作。
       在本地管理状态下,每次分配的数据扩展的容量可以由系统自动的决定。此外,用户也可以覆盖方案对象默认的存储参数,每次分配相同容量的数据扩展。
       在create tablespace或create temporary tablespace语句中使用local子句可以创建本地管理的永久表空间或临时表空间。
3.2.7.2 本地管理的表空间中的段空间管理
       用户在使用create tablespace语句创建一个本地管理的表空间时,可以使用segment space management子句来设定段的可用/已用空间如何管理。有两种可选方式:
       1.auto
       在这种设置下,oracle使用位图管理段内的可用空间。【此处的位图与本地管理的表空间使用的位图不一样】此处的位图用于描述段内每个数据块是否有足够的可用空间来插入新数据。随着一个数据块中可用空间的变化,她的状态也被及时的反映到位图中。oracle使用位图可以更自动化的管理段内的可用空间。这种空间管理形式被称为自动段空间管理。
       一个本地管理的,且使用自动段空间管理的表空间,既可以被创建为小文件表空间,也可以被创建大文件表空间。在创建本地管理的表空间时,自动空间管理是默认值。
       2.manual
       在这种设置下,oracle使用可用块列表来管理段内的可用空间。可用块列表记录了所有可以被用于插入新数据的数据块。
3.2.7.3 数据字典管理的表空间
       如果用户的数据库是使用oracle的早期版本创建的,可能还在使用数据字典管理的表空间。如果表空间使用数据字典管理其数据扩展,当发生数据扩展的分配与回收时,oracle会更新数据字典内相应的表。oracle也会在更新数据字典表时存储相应的回滚信息。因为数据字典表与回滚段都是数据库的一部分,它们使用的空间如同其他数据库对象一样也必须进行空间管理操作。
3.2.8 多种数据块容量
       oracle支持在数据库中使用多种数据块容量。system表空间使用标准数据块容量。这个容量在数据库创建时被设定,可以为任何有效值。用户可以使用DB_BLOCK_SIZE初始化参数设定标准数据块容量。数据块容量的合法值范围是2K到32K。
       在初始化参数文件或服务器参数文件中,用户可以为数据缓存内的不同子缓存区设定不同的数据块容量。子缓存区也可以在实例运行时配置。此外用户还可以创建使用不同数据块容量的表空间。但是system表空间及绝大多数表空间还是使用标准数据块容量。
       提示:一个分区对象的所有分区所在的表空间必须使用相同的数据块容量。
       多种数据块容量功能主要用于从OLTP数据库向企业级数据仓库迁移表空间时使用。这有助于在拥有不同的数据块容量的数据库间迁移数据。
3.2.9 联机/脱机表空间
       DBA可以在数据库处于开启状态时令除了system表空间之外的任何表空间联机或脱机。system表空间在数据库处于开启状态时总是处于联机状态,因为oracle需要使用其中的数据字典。
       表空间通常处于联机状态,以便数据库用户访问其中的数据。但是DBA可以在对表空间进行维护,备份或恢复操作时,令其脱机。
3.2.9.1 令表空间脱机
       当一个表空间脱机后,oracle不允许任何sql语句继续使用此表空间内的对象。如果一个活动事务中的sql语句正好在使用被置为脱机状态的表空间内的对象,其事务性也不会被破坏。oracle使用system表空间内的延迟回滚段为此事务中已完成的SQL语句保存回滚信息。当脱机表空间被重新置为联机时,oracle会在需要时应用这些回滚信息。
       表空间联机或脱机时,system表空间内的数据字典会进行记录。如果用户关闭一个数据库时某个表空间处于脱机状态,那么这个表空间在数据库下次被装载,打开后依然保持脱机状态。
       用户只能将一个表空间联机到创建它的数据库中,因为只有这个数据库的system表空间才保存着与此表空间相关的必要的数据字典的信息。一个脱机的表空间不能被oracle之外的工具打开或编辑。因此脱机表空间不能被oracle之外的工具打开或编辑。因此脱机表空间不能被移动到其他的数据库。
       当某些错误发生时,oracle会自动的将相关的联机表空间切换到脱机状态。例如:当数据库写入进程多次尝试向表空间的数据文件写入失败后,oracle就将此表空间切换到脱机状态。此时尝试访问脱机表空间内的数据表的用户将会得到错误信息。如果是介质故障导致此次磁盘I/O失败,用户必须在处理故障后恢复受影响的表空间。
3.2.9.2 特殊情况下的表空间使用
       用户可以将不同类型的数据分开存储在不同的表空间中。当用户因为某些任务而令某个表空间脱机后,其余表空间仍保持联机状态,其中的数据对用户依然可用。但是表空间脱机后也会导致特殊情况发生。例如,有两个表空间分别用于存储表及此表对应的索引,将出现以下问题:如果包含索引的表空间脱机,那么查询依旧可以访问表数据,因为对表数据的访问并不一定需要索引数据;如果包含表的表空间脱机,那么查询将无法访问表数据,因为脱机表空间内的对象无法被引用。
       如果oracle能够从联机表空间中获得执行一个sql语句的足够的信息,那么语句就将被执行。如果相关信息必须从脱机的表空间中获得,那么语句将失败。
3.2.10 只读表空间
       使用只读表空间的主要目的是为了避免对静态,且容量大的数据库内容进行备份和恢复操作。oracle不会更新只读表空间内的数据,因此这类表空间的数据文件可以放置在CD-ROM或WORM之类的只读介质上。
       用户只能将一个表空间联机到创建他的数据库,因此只读表空间技术不适用于存档工作。只读表空间不能被修改。如需更新一个只读表空间,首先要使表空间可读写。在更新后,还可以将表空间恢复到只读状态。因为只读表空间不能被修改,只要没有将只读表空间置于可读写状态,就无需对其进行重复的备份工作。当用户需要恢复数据时,也没必要恢复只读表空间,原因同前所述。
3.2.11 排序操作使用的临时表空间
       用户可以为排序操作指定一个或多个专用的临时表空间,这可使排序操作所需要的空间管理工作更高效。使用专用的临时表空间进行排序,可以有效的避免频繁的排序空间分配与回收而造成的空间管理工作。一个sql语句可以同时使用多个临时表空间进行排序。例如当用户为一个大表创建索引时所需的排序操作就可以在多个临时表空间上进行。所有会用到排序的数据库操作,例如连接(join),创建索引(index),排序(order by),计算汇总(group by),及收集优化器(optimizer)所需的统计信息,都可以利用临时表空间。在RAC环境中使用临时表空间带来的性能提升更加显著。
       RAC:Oracle Real Application Cluster,真正应用集群。他一般有两台或者两台以上同构计算机及共享存储设备构成,可提供强大的数据库处理能力,是oracle 10g grid应用的重要组成部分。
3.2.11.1 排序段
       一个数据库中可以有多个临时段专用于存储排序段。临时表空间与用户用于创建临时段的表空间不同,后者可以是用户可用的任何表空间。而临时表空间不能存储永久方案对象。
       当用户进行多重排序且其所需空间超过可用内存时,使用临时表空间有助于提升性能。当首个排序操作发生时,oracle会在指定的临时表空间中创建排序段。排序段的容量可以通过分配数据扩展而增长,直到满足当前实例中所有活动的排序操作所需的存储空间为止。
3.2.11.2 创建临时表空间
       用户可以使用create tablespace或create temporary tablespace语句创建临时表空间。
3.2.12 在数据库之间移动表空间
       用户可以利用可移动表空间(transportable tablespace)将oracle数据库的一部分移动到另一个数据库中,这种操作还可以跨平台。用户可以在数据库间复制表空,即首先克隆一个表空间再加入到另一个数据库,用户也可以在数据库间移动表空间,即从一个oracle数据库移出一个表空间,并放入另一个数据库。
       通过可移动表空间迁移数据与使用export/import相比,速度可提高几个数量级。因为使用可移动表空间技术只需复制数据文件,并整合表空间元数据即可。用户在使用可移动表空间时还可以同时迁移索引数据,因此数据被移动后无需重建索引。
       用户可以跨平台移动表空间。跨平台有以下好处:
       1.使内容提供者向其在不同平台上使用oracle的客户发布结构化数据变得更简单,更高效
       2.简化了从数据仓库环境向数据集市(data mart)环境发布数据的工作。数据集市通常运行在更小的平台;在异构的集群中共享只读表空间
       3.在异构的集群中共享只读表空间
       4.在不同平台间迁移数据库
3.2.12.1 表空间资料库
       表空间资料库是一个表空间的集合。表空间资料库基于文件组资料库,但其中只包含在数据库间复制或移动表空间所需的文件。多个表空间集可以存储在同一个表空间资料库中,同一个表空间集的不同版本也可以存储在同一个表空间资料库中。在一个表空间资料库中,同一版本的表空间集由以下文件组成:
       1.由data pump为表空间集导出的文件。
       2.data pump的导出日志文件。
       3.组成表空间集的数据文件。
3.2.12.2 如何在数据库间移动或复制表空间
       在复制或移动表空间前,用户首先将表空间置于只读状态,再复制表空间的数据文件,最后使用export/import工具迁移位于数据字典中的数据库元数据信息。数据文件以及元数据导出文件必须全部复制到目标数据库上。移动这些文件时可以使用任何用于文件复制的工具,例如操作系统的复制功能,FTP或者发布到CD中。
       复制数据文件并导入元数据之后,用户可以选择是否将表空间置为可读写状态。在一个将compatible初始化参数设置为10或更高的oracle数据库中首次打开一个表空间的各个数据文件时,每个文件将识别他所处的平台,之后将识别出的磁盘格式记录在文件头区域,用于以后的文件格式识别与验证。只读的文件在被置为可读写,或脱机文件被联机后,oracle都会将其兼容性提升到与当前数据库相同。这意味着oracle 10g之前的版本的只读表空间如果想使用跨平台移动特性,至少要在10g数据库中置为可读写状态一次。
       提示:如果一个数据库的system表空间为本地管理的,那么在此数据库中不能创建数据字典管理的表空间。但是用户可以使用可移动表空间功能向此数据库中加入一个数据字典管理的表空间,此表空间只能置为只读状态。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10356975/viewspace-680366/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10356975/viewspace-680366/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值