Oracle数据库的存储结构

Oracle技术学习QQ群:171092051

 

6.1 目标

通过本节,您应该能够:

  • 使用Oracle Enterprise Manager里来查看数据库存储结构
  • 在您的数据库中建立新的存储结构
  • 回收数据库中未使用的空间
  • 管理用于恢复数据库变更的结构,并维护一致性

 

6.2 Oracle数据库结构

Oracle数据库包含下列物理结构:

控制文件(Control file): 包含指定数据库物理结构文件。

数据库文件(Datafile): 包含所有数据库信息。逻辑数据库结构的内容,例如表格与索引,都储存在数据文件中。

重做日志文件(Redo log file): 负责记录数据的所有变更。

6.3 浏览Oracle数据库的存储结构

逻辑数据结构是储存在数据库的物理文件中。您可以使用Oracle Enterprise Manager(Enterprise Manger)很容易地查看数据库的逻辑与物理结构。如需每个结构的详细信息,请在【服务器(Server)】页面上【存储(Storage)】区中的链接上按一下。

 

6.4 控制文件

  • 包含物理数据库结构信息
  • 多路复用以免遗失
  • 在挂载mount阶段读取

 

当您启动数据库实例和挂载数据库时,就会读取控制文件。而控制文件中的项目则指定了构成数据库的物理文件。

当您将其他文件加入到数据库时,会自动更新控制文件。

您必须在CONTROL_FILES初始化参数中指定控制文件的位置。

为了避免数据库因为遗失控制文件而失败,您必须【多路复用(multiplex)】控制文件。在初始化参数中指定多个文档,就可以让Oracle数据库保有控制文件的多个副本。

您可以存取数据库中控制文件的相关信息,只要在Enterprise Manager的【服务器(Server)】页面【存储(Storage)】区中按一下【控制文件(Controlfiles)】链接。在【控制文件(Controlfiles General)】页面中会显示数据库控制文件的名称与位置。另外,【高级(Advanced)】页面中会提供建立控制文件和数据库识别的相关信息。而【记录文档段(Record Section)】页面则显示控制文件中项目的相关信息。

 

6.5 重做日志文件

  • 记录数据库变更
  • 应该多路复用以避免遗失

 

重做日志文件是用来记录数据库的变更情形,而这些变更源自事务及内部Oracle是数据库服务器操作。

 

注意:【事务(Transaction)】是工作的逻辑单元,它是由的单一使用者所执行的一或多个SQL命令组成。当发生电源中断、从磁盘错误等问题时,重做日志文件能保护数据库以避免损坏完整性。平时应该多路复用重做日志文件,以确保在磁盘发生错误的时候,不至于遗失储存在其中的信息。【dbdao.com 数据岛】

 

重做日志是由一组组的重做日志文件构成,而每个重做日志文件组则是由一个重做日志文件及其多重备份的副本组成。每个完全相同的副本是该组的成员之一。而每个组是透过一组号码来识别。日志写入器进程(LGWR)会从重做日志缓冲区讲重做记录写入重做日志组,一直到组中的文件被填满,或是出现日志切换要求为止。接着写入器就会进行切换,然后写入下一个组的文件中。重做日志组是以循环方式来使用的。

 

您可以查看数据库中重做日志文件的相关信息,请在【服务器(Server)】页面的【存储(Storage)】区中按一下【重做日志组(Redo Log Groups)】链接。您可以选择一个组,再按【查看(View)】来查看各种详细信息,例如重做日志文件名称。

 

6.6 多路复用重做日志

您可以在现有的日志组中新增一个成员,制作重做日志的多路复用。请按照下列步骤执行,将成员新增到重做日志组中:

  1. 在【服务器(Server)】页面的【存储(Storage)】区中按一下【重做日志组(Redo Log Groups)】。会出现【重做日志组(Redo Log Groups)】页面。
  2. 选择一个组,再按一下【编辑(Edit)】,或是按一下组的编号链接。接着会出现【编辑重做日志(Edit Redo Log)】.
  3. 在【重做日志成员(Redo Log Members)】区按一下【添加(Add)】。会出现【添加重做日志成员(Add Redo Log Member)】页面。
  4. 输入文件名称与文件目录。按一下【继续(Continue)】。之后点【应用(Apply)】。

注意: 建议您在不同的磁盘上储存成员,以免重做日志项目因磁盘失败事件而全部遗失。

  1. 为每个现有大的日志组重复执行这些步骤。

 

当您将重做日志成员加入日志组时,组的状态会标示为INVALID,这是因为此组的成员还没有被写入。当发生日志切换,而无效日志组成为当前组时,,状态就会变为CURRENT。

 

6.7 表空间与数据文件

  • 表空间是由一个或多个数据我文件组成。
  • 数据文件只属于一个表空间
  • 区段可以包含表空间中的多个数据文件。

 

数据库可被切割成多个逻辑存储单位,称为表空间。而表空间可用来将彼此相关的逻辑结构分为各个类别。每个数据库在逻辑上可被分为两个或多个表空间。每个表空间会有一个或者更多专门为它建立的数据文件,以便用物理方式存储表空间中所有的逻辑结构信息。

表和索引等数据库对象是以段(Segment)的形式存在表空间中,每个段都包含一个或更多的区(Extent),而区间是由连续的数据块所组成。数据块是数据库中最小的I/O单位。

您可以在【服务器(Server)】页面的【存储(Storage)】区中按一下【表空间(Tablespaces)】链接,来查看数据库中标空间的相关信息。请选择您感兴趣的表空间,再按一下【查看(View)】来显示关于表空间的详细信息。

 

6.8 预先设定的数据库表空间

在预先设定的数据库中,已经为您建立了下列表空间:

SYSTEM: Oracle数据库服务器使用SYSTEM表空间来管理数据库。它包含了拥有数据库相关管理信息大的信息说明表。这些都包含在SYS schema中,而且只能以SYS用户账号或其他拥有必要权限的管理用户来存取。

SYSAUX: 这是SYSTEM表空间的辅助表空间。在旧版Oracle中使用SYSTEM表空间或者自有表空间的部分组件及产品,现在都使用SYSAUX表空间。现在,每个Oracle Database数据库都必须有一个SYSAUX表空间。

TEMP: 这个表空间包含只存在于某阶段操作的临时数据。每个数据库都必须有一个临时表空间,并且指派用户作为他们的临时表空间。在预先设定的数据库中,TEMP表空间会被制定为预设的临时表空间。这表示在建立使用者账户时,如果没有特别指定临时表空间,Oracle就会指定这个表空间给用户。

UNDOTBS1: 这是数据库服务器用来储存恢复数据的还原表空间。每个数据库都必须有一个还原表空间,它是在数据库建立期间所建立的。

USERS:这个表空间是用来储存永久的用户对象及数据。在预先设定的数据库中,USERS是给非系统用户建立所有对象的预设表空间。

EXAMPLE:这个表空间包含范例Schema,建立数据库时可以选择安装这些Schema。你看到的Oracle教学资料中提供的范例,就是使用的范例Schema中所定义的对象。【dbdao.com 数据岛】

 

6.9 加大数据库

你可以用下列方式来加大数据库:

  • 建立新的表空间。
  • 在现有表空间中添加数据文件。
  • 增加数据文件的大小。
  • 为数据文件动态增长做准备。

 

可使用以下步骤,将数据文件加入现有的表空间中,来增加空间:

  1. 在【服务器(Server)】页面的【存储(Storage)】去中按一下【表空间(Tablespaces)】链接。
  2. 选择表空间进行【编辑(Edit)】,进入相关页面的数据文件区,再按一下【添加(Add)】。接下来会出现添加数据文件页面。
  3. 输入文件名、目录及文件大小。在按一下【继续(Continue)】后点【应用(Apply)】。
  4. 【表空间(Tablespaces)】页面会出现一个确认信息。

 

6.10 建立新的表空间

 

如果要新建永久表空间,请执行下列步骤:

  1. 浏览到【表空间(Tablespaces)】页面。
  2. 按一下【创建(Create)】。

注意: 如果您想建立一个类似现有表空间的表空间,请选择一个现有表空间,再从【操作(Actions)】功能表中选择【类似创建(Create Like)】,按一下【开始(Go)】。会出现【建立表空间(Create Tablespace)】页面。

  1. 输入表空间的名称。
  2. 在【区管理(Extent Management)】标题下方选择【本地管理(Locally Managed)】。本地管理的表空间的Extent,能由Oracle数据库服务器在表空间内有效管理。对于字典(Dictionary)管理的表空间现在已经不适合使用,Oracle公司也不建议使用。
  3. 在【类型(Type)】标题下方选择【永久(Permanent)】。永久表空间会存储系统或用户所建立的永久数据库对象。
  4. 在【状态(Status)】标题下方选择【读写(Read Write)】。读写状态表示用户可以在表空间建立后,进行读取和写入操作。这是预设的选项。
  5. 在页面的【数据文件(Datafiles)】区按一下【添加(Add)】。
  6. 在【新增数据文件(Add Datafiles)】页面的【文件名称(File Name)】栏位中输入文件名。接受【文件目录(File Directory)】与【文件大小(File Size)】的预设值。
  7. 在【存储(Storage)】标题下方选择【空间已满后自动扩展(AUTOEXTEND)(Automatically extend datafile when full (AUTOEXTEND))】,并且在【增量(Increment)】栏位中指定每次扩充数据文件时您希望增加的量。您可以将【文件大小上限(Maximum File Size)】设定为【无限(Unlimited)】或输入一个特定的限制值。按一下【继续(Continue)】。会回到创建空间页面。
  8. 按一下【存储(Storage)】页签。
  9. 接受【存储(Storage)】页面中的所有预设值。
  10. 按一下【确定(OK)】以创建表空间。您会转到【表空间(Tablespaces)】页面,在此会得到确认建立表空间的信息。您可以在表空间页面上看到新建的表空间。【dbdao.com 数据岛】

 

6.11 修改表空间

您可以用一下方法来修改表空间:

  • 新增数据文件
  • 将表空间设定为自动扩展
  • 增加数据文件的大小,手动扩展表空间
  • 变更表空间的空间临界值
  • 将表空间的状态变更为离线

 

您可以手动扩展表空间的数据文件,来增加表空间的大小。您可以将表空间设定为让数据文件在需要空间时能自动扩充。如果您需要在特定表空间上执行恢复处理操作,必须先让表空间离线。

您也可以按照下列步骤新增数据文件,来扩展现有的表空间大小:

  1. 在【服务器(Server)】页面的【存储(Storage)】区按一下【表空间(Tablespaces)】链接。
  2. 选择表空间,在操作栏选择【添加数据文件(Add Datafile)】,点【开始(Go)】。会出现【添加数据文件(Add Datafile)】页面。
  3. 输入文件名称、目录及文件大小。再按一下【确认(OK)】。
  4. 【表空间(Tablespace)】页面会显示确认信息。

 

您可以设定表空间在达到上限时自动扩展:

  1. 在【服务器(Server)】页面的【存储(Storage)】区域按一下【表空间(Tablespaces)】链接。
  2. 选择您要设定可自动扩充的表空间,再按一下【编辑(Edit)】。会出现【编辑表空间:表空间名称(Edit Tablespace: tablespace name)】的【一般信息(General)】特性页签。
  3. 请选择与此表空间相关的数据文件,再按一下【编辑(Edit)】。会出现【编辑数据文件(Edit Datafile)】页面。
  4. 请选择”数据文件满后自动扩展(AUTOEXTEND)(Automatically extend datafile when full (AUTOEXTEND))”, 再输入适当的增量。您也可以选择设定文件大小上限或是将文件大小设定为无限。
  5. 按一下“继续(Continue)”。会回到”编辑表空间(Edit Tablespace)”页面。
  6. 按一下”应用(Apply)”。会出现确认信息。

 

您可以使用SQL命令来手动调整数据文件的大小。使用这个方式,可以在不增加数据文件的情况下,直接增加数据库的空间,这在必须注意到是否会达到数据库数据文件数量的上限时特别有用。手动降低数据文件大小能让您回收数据库中未使用的空间,此方法在您需要估算空间需求以修正错误时很有用。如需更多关于管理数据文件的相关信息,请参阅Oracle Database Administrator’s Guide。

 

您可以在”表空间(Tablespaces)”页面选择一个表空间,按【编辑(Edit)】, 然后浏览到”阀值(Threshold)”特性页签,在变更表空间临界值。在这个页面中,可以改变产生警告与重要警示的空间临界值。

 

您可以在”编辑表格空间(Edit Tablespace)”页面将表空间设定为离线。在”状态(Status)”下方选择”脱机(Offline)”,再按一下”应用(Apply)”。

 

6.12 删除表空间

删除表空间时,会发生下列操作:

  • 移除存储在表空间中的对象。
  • 从操作系统中移除数据文件。

 

在删除表空间之后,储存在表空间中的对象和其中的数据都无法再使用。此外,也会从数据定义说明中移除对象的定义。而且,也会从操作系统删除与表空间相关的数据文件。【dbdao.com 数据岛】

 

您可以使用Enterprise Manager来删除表空间,步骤如下:

  1. 在【服务器(Server)】 页面的【存储(Storage)】区中按一下【表空间(Tablespaces)】。会出现【表空间(Tablespaces)】页面。
  2. 选择您想要删除的表空间,再按一下【删除(Delete)】。Enterprise Manager会提示您确认是否要从操作中删除这个表空间以及相关的数据文件。

 

6.13 回收表空间中的空间

您可以用下列方式来回收表空间中的空间:

  • 使用区段建议程序来决定是否可以缩小对象,以释放出空间。
  • 执行缩小操作以压缩区段,将空间还给表空间。

 

表空间使用一段时间后,对表空间中的表所做的DML操作会产生不少块状的未使用空间。

您可以使用”区段建议程序(Segment Advisor)”和执行缩小操作,来回收这种未使用的空间。在缩小操作中,数据会被压缩到表的前段,多出来的空间就可以重新指派给表空间,或是留在表中等待日后插入数据时使用。表的缩小操作不会影响表的DML操作。

 

使用区段建议程序

您可以使用区段建议程序来分析特定的表空间,步骤如下:

  1. 在【服务器(Server)】页面【存储(Storage)】区中按一下【表空间(Tablespaces)】。会出现【表空间(Tablespaces)】页面。
  2. 选择您的表空间,在于【操作(Actions)】下拉列表中选择【运行段指导(Run Segment Advisor)】。操作开始之前请注意一下已使用的空间,之后进行比较时才看得出差异。按一下【开始(Go)】。

注意: 也可以从【指导中心(Advisor Central)】页面来启动段指导程序。

  1. 在【段指导: 表空间(Segment Advisor: Tablespaces)】的【选项(Options)】区, 显示高级选项,请接受”无限(Unlimited)”作为分析的时间限制。按一下”下一步(Next)”。

  1. 出现”段指导: 调度(Segment Advisor: Schedule)”页面。请接受”立即(Immediately)”为启动条件。也可以让此工作稍后再进行。按一下”下一步(Next)”。

  1. 会出现”段指导:复查(Segment Advisor: Review)”页面,并摘要描述工作与选择的对象。请确认是否会按照您需要的项目来执行工作,再按一下”提交(Submit)”。
  2. 接下来会出现”指导中心(Advisor Central)”页面,列出与建议程序相关且已经执行的任务工作。
  3. 选择查看任务结果,会出现”段指导任务(Segment Advisor Task)”页面,显示您所选择的表空间的建议。如果要实行一个或多个建议,请选择要实行的建议。会启动”缩小精灵(Shrink Wizard)”,者部分会在后续章节中详述。【dbdao.com 数据岛】

 

缩小数据库表

【段指导】会根据表内空间分段程度,建议表是否有可以回收的空间。在执行【段指导】程序之后,您可以按照下列步骤来缩小数据库表:

  1. 在页面下方选”缩小选项(Shrink Options)”。您可以选择”压缩段并释放空间(Compact Segments and Release Space)”,这个选项会将空间释放到表空间,或是,也可以选择”压缩区段(Compact Segments)”。请按一下”调度实行(Schedule Implementation)”来执行缩小操作。
  2. 接下来会出现”调度实行(Schedule Implementation)”页面。请接收开始时间为”立即(Immediately)”,再按一下”送出(Submit)”。
  3. 接下来会出现“调度器工作(Scheduler Jobs)“页面。其中显示工作状态。按一下”刷新(Refresh)”来更新页面,直到工作状态为”完成(Completed)”为止。在工作完成之后,您可以浏览到”表空间(Tablespace)”页面,比较目前使用空间和之前使用空间的容量。

 

6.14 管理还原(Undo)

  • 还原记录包含发生变更前所做的数据副本。
  • 还原是用来还原或倒回因明确的回滚要求或还原所造成的未确认变更。
  • 还原提供了读一致性。
  • 还原能启用闪回功能。
  • 还原保留期间会影响原区段的重新使用。

 

还原(Undo)是一个集合性的说法,是指Oracle Database服务器在数据发生变更之前所写入的记录。还原是在需要进行回滚操作时,用来还原任何数据库所做的未确认变更。回滚操作可能是用户特别发出回滚命令以还原事物变更、事物阶段失败恢复操作的一部分或是实例、介质失败恢复作业的一部分。

 

还原可用于提供读一致性。每位用户都能取得一致的数据,即使是数据发生其他变更时也一样。

 

还原信息是Oracle Database几项闪回功能的基础,让您可以查看数据或是将数据复原到之前的时间点。这些功能包含闪回查询、闪回数据列历史记录、闪回事务历史记录以及闪回表。

 

还原记录存储于还原表空间中。因为还原表空间中的空间是以循环的方式来使用,还原记录很容易被覆盖。这是相当重要的一点,因为如果要成功使用闪回功能以及达成长期事务的读一致性,就不能太快覆盖记录。

 

如果要控制还原记录的保留时间,您可以指定一个还原保留期间, 还原保留期间会影响还原表空间的大小。在安装时,预设值会启用自动调整还原保留期间功能。

 

6.15 管理还原保留

  • 还原保留自动调整(Automatic Tuning of Undo Retention): Oracle Database服务器会根据其对还原产生进行的监督,自动调整还原保留期间。
  • UNDO_RETENTION:会决定还原保留期间的临界值下限。

 

已确认的还原信息通常在它的还原空间被较新的交易覆盖时就会遗失。但是,为求读取一致性,长时间的查询有时候需要旧的还原信息来还原变更和产生较旧的数据区影像。而几项闪回功能之所以能成功,也要依赖于较旧的还原信息。

Oracle Database服务器会收集数据库使用统计值,并估计成功完成查询所需的还原空间,自动调整还原保留期间。您可以设定UNDO_RETENTION参数的临界值下限,让系统在目前的还原表空间有足够空间的前提下,至少以这项参数中所指定的时间来保留还原信息。但是在空间条件限制下,有时系统保留还原的时间可能会比临界值下限中所指定的时间还要短,才能让DML操作可以成功执行。

UNDO_RETENTION参数的预设值为900。保留期间是以秒为单位来指定的。这项参数会决定还原保留的临界值下限。系统至少会以这项参数中所指定的时间来保留还原。

注意:不能停用还原保留自动调整功能。

 

6.16 调整还原表空间的大小

您可以使用自动扩充还原表空间,或手动估算您所需要的还原空间,来调整还原表空间的大小。

 

Oracle Database支持还原表空间的自动扩充。当您建立数据库时,可能不确定还原表空间所需要的空间大小。在这种情况下,您可以启用还原表空间的数据文件自动扩充功能,让他们在需要更多空间的时候可以自动增加大小。藉由结合还原表空间自动扩充与自动调整还原保留功能,就可以保证能提供查询所需的还原信息,以确保长时间的查询可以顺利执行。

 

在您的系统越来越稳定,而您更熟悉还原表空间需求时,建议您将表空间的最大值设定为比还原表空间目前的大小稍多一些(10%)。

 

如果您决定要使用固定大小的还原表空间,【还原指导】程序会让您估计需要的容量,接着您可以计算系统所需的保留空间。

 

6.17 使用Enterprise Manager管理还原

 

您可以使用Enterprise Manager的”自动还原管理(Automatic Undo Management)”页面来查看还原设置。可查看的项目包含自动调整的还原保留期限以及它的临界值下限保留期限,还有还原表空间的名称大小。

您可以在”服务器(Server)”页面的”数据库配置(Database Configuration)”区中选择”自动还原管理(Automatic Undo Management)”,来查看其相关页面。【dbdao.com 数据岛】

您可以在“自动还原管理(Automatic Undo Management)”页面呼叫下列功能,来调整还原表空间的大小:

使用Oracle的还原指导来管理Undo:在“自动还原管理(Automatic Undo Management)”页面的”还原指导(Undo Advisor)”区,可以指定一段过去的时间,让Oracle服务器分析还原产生结果,并且根据该结果提出新的建议。您可以通过这些分析结果点【应用(Apply)】来接受建议。

使用还原指导程序:还原指导可以用来建议您采用适当的还原保留设定,以及分析新的还原保留设定所造成的影响。

 

6.18 使用还原指导程序

您可以按一下”还原管理(Undo Management)”页面上的”还原指导(Undo Advisor)”来呼叫还原指导程序。

使用”还原指导(Undo Advisor)”中的”分析(Analysis)”区,可以回答下列关于还原设置的问题:

  • 如果要保证能成功执行查询,需要还原保留时间最大值为何?这个时间对应到您执行查询的最长持续时间。
  • 我的数据库有足够空间可容纳目前表空间设置的最大还原保留吗?请浏览到【还原指导(Undo Advisor)】页面的【分析(Analysis)】区域,点【显示图形(Show Graph)】然后注意【可能的最佳还原保留期(Best Possible Undo Retention)】选项,如果这个时间期限比最长的执行查询还要久,就表示还原表空间的设置适当。

如果最可能的还原保留时间比最长的执行查询还要少会如何?如果是这样,您的还原表空间就太小了。您必须启用表空间自动扩充功能或是手动扩充。在【手动指定以允许查询或闪回持续更长时间(Specified manually to allow for longer duration queries or flashback)】栏位输入您最长的查询执行时间,来决定表空间所需的大小。请输入适当的”分析期间(Analysis Time Period)”, 再按一下”运行分析(Run Analysis)”。

在”分析(Analysis)”下,请留意”新还原保留所需的表空间大小(Required Tablespace size for New Undo Retention)”。

 

  • 我要如何设定还原来配合闪回处理作业?如果您正在使用闪回功能,例如闪回查询或是闪回表,可以使用还原指导程序来决定要如何设定您的表空间与还原保留。您必须确定还原数据并未被覆盖,闪回操作才能成功。如果要建立闪回复原策略,您可以设定临界值下限参数,此参数会决定自动还原调整所需的最低值。
  • 如果您的闪回复原策略需要往回推八小时复原认为错误,请将临界值下限设定为8小时。

“还原保留长度所需的表空间大小(Required Tablespace Size by Undo Retention Length)”图标会显示保留期间与还原表格空间大小之间的关系,还会标示出可回答上述问题的信息点。

6.19 总结

此章节中,您应该学会如何:

  • 使用EM来查看数据库存储结构
  • 在您数据库中建立新的存储结构
    – 多路复用重做日志文件
    – 建立和修改表空间
  • 使用区段建议程序和回收数据库中为使用的空间
  • 管理还原

by dbdao.com 数据岛

 

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号