Oracle 物理结构-文件

数据文件概述
在操作系统层面,数据库存储数据库数据在数据文件。每一个数据库必须有至少一个数据文件。

数据文件的用途
为了方便管理,Oracle数据库给用户分配空间在表空间中,就像段是逻辑存储结构。每一个段仅属于一个表空间。例如,对于一个未分区的表的数据存储在一个单独的段中,该段被存储在表空间中。
Oracle数据库存储表空间数据在数据文件中,表空间和数据文件有很大的关联性,但是有很重要的不同
  • 每一个表空间包含几个不同的数据文件,这些数据文件要符合数据库所在的操作系统
  • 数据库的数据集中存储在数据库的每个表空间中的数据文件中
  • 一个段可以跨越一个或多个数据文件,但是不可以跨越几个表空间
  • 一个数据库必须有SYSTEM和SYSAUX表空间。在数据库创建时,Oracle数据库自动为SYSTEM表空间分配第一个数据文件。
SYSTEM表空间包含数据字典,一系列包含数据库元数据的表。特别的是,一个数据库也有一个undo表空间和一个临时表空间。

永久和临时的数据文件
一个永久表空间包括持久的模式对象。在永久表空间的对象被存储在数据文件中。
临时表空间包含仅仅在一个会话中存在的模式对象。本地管理的临时表空间有临时文件,这些临时文件被专门设计哈希、排序和其他操作产生的数据。临时文件也存储结果集当内存中没有足够的空间时。
临时文件和永久文件存在以下不同:
  • 像表这种永久的数据库对象从来不会存储在临时表空间中
  • 临时文件总是NOLONGGING模式,这就意味着临时文件从来不会产生redo日志。介质恢复不会识别临时文件
  • 不能使临时文件只读
  • 不能用ALTER DATABASE语句创建一个临时文件
  • 当你创建或该表一个临时文件时,不能保证在磁盘上总是分配对应的大小。在linux或者unix的文件系统上,临时文件被创建成sparse files。在这种情况下,文件创建或改变大小时不会被分配磁盘块,当第一次访问时,才会被分配磁盘块。
  • 临时文件信息在DBA_TEMP数据字典视图和V$TEMPFILE动态视图展示,而不是在DBA_DATA_FILE或V$DATAFILE视图中展示

在线、离线数据文件


数据文件结构
Oracle数据库会通过分配指定数量的磁盘空间和数据文件头的开销为一个表空间创建数据文件。在创建的数据文件被分配给数据库之前,Oracle数据库所在的操作系统负责清理旧的信息和授权。
数据文件头包括关于文件的元数据,例如数据文件的大小,和检查点。每一个头信息包含绝对的文件数和相对的文件数。绝对文件数在一个数据库中被唯一标识,相对文件数在一个表空间中唯一标识。
当oracle第一次创建一个数据文件时,被分配的磁盘空间被格式化但是没有包含任何yoghurt的数据。尽管如此,数据库保留空间来保存相关表空间未来段的数据。随着表空间中数据的增长,oracle数据库用这个数据文件中的空闲空间去为段分配区。
下图展示了不同的数据文件中不同类型的空间。被使用的区意味着包含段的数据,空闲的区意味着他们可以被分配重新使用。随着时间的推移,update和delete操作可能创建一些空的空间,单个空间因为不够大而不能被重新使用。这种类型的空间被称为碎片自由空间。



控制文件概述
数据库控制文件是一个之和数据库有关系的小的二进制文件。每一个数据库又一个独特的控制文件,尽管他可以保留相同的副本。

控制文件的用途
控制文件是Oracle数据库用来查找数据库文件可管理数据库状态的根文件。一个控制文件可以包含以下信息:
  • 数据库名称和数据库唯一标识符(DBID)
  • 数据库建立的时间戳
  • 数据文件、在线重做日志文件、归档重做日志文件信息
  • 表空间信息
  • RMAN 的备份
控制文件用途如下:
  • 包含关于数据文件,在线重做日志文件等在打开数据库时需要的信息。
控制文件跟踪数据库结构的变化。例如,多个控制文件,当一个管理员增加,重命名,或删除一个数据文件或在线重做日志文件时,数据库会更新控制文件去反应这个改变
  • 它包含当数据库没有打开时必须可以访问的元数据
例如,控制文件包含恢复数据库所需的信息,包含检查点。在检查点SCN之前的所有提交都必须被保证写到磁盘的数据文件中。至少每三秒检查点程序会记录检查点在在线重做日志的位置信息。
Oracle数据库在数据库使用过程中不间断的读写控制文件并且无论数据库文件何时被打开控制文件必须是可用来写。例如,恢复一个数据库包括从控制文件中读取所有数据库包含的数据文件。另外的操作,比如增减一个数据文件,会更新存储在控制文件中的信息。

多个控制文件
Oracle数据库允许同时打开多个完全相同的控制文件并被同一个数据库更改。通过在不同的磁盘多路复用一个控制文件,数据库可以实现冗余从而避免单点故障。
如果一个控制文件变得不可用,当尝试访问这个损坏的控制文件时,这个数据库实例会失败。如果其他的当前控制文件副本存在,这个数据库可以通过不通过介质恢复重新被挂载和打开。但是,如果一个数据库的所有控制文件都丢失了,这个数据库实例失败并且需要介质恢复。如果因为当前影像不可用而必须使用老的控制文件的备份去进行介质恢复,则介质恢复并不简单。

控制文件结构
数据库的信息被存储在控制文件的不同部分。每一个部分都是关于数据库一方面的一组记录。例如、控制文件中的一个部分包含一组记录用来跟踪数据文件,每一个部分对应一个数据文件。每一个部分被存储在多个逻辑控制文件块中。记录可以跨越部分内的块。
控制文件包含以下几种类型的记录:
  • 循环重用记录
这些记录包含适合被覆盖的非关键的信息。当所有可用的记录槽被占用,数据库通过拓展控制文件或者覆盖老的记录来腾出空间。例如,包含归档重做日志文件、RMAN备份信息的记录
  • 非循环重用记录
这些记录包含不能被经常更改,不能被覆盖的关键信息。例如包含表空间,数据文件,在线重做日志文件和重做线程的信息。oracle数据库从来不覆盖这些记录,除非对应的对象从被删除。
你可以从动态性能视图(V$)中查看这些被存在控制文件中的信息。例如,可以通过查询V$DATABASE视图去获取数据库的名字和DBID。但是,只有数据库可以更改控制文件中的信息。
读写控制文件块不通过与读写数据文件块。对于控制文件,Oracle数据库直接从磁盘中读写到PGA中,每一个进程在PGA空间中分配特定的大小给控制文件。

在线重做日志文件概述
恢复最关键的结构是在线重做日志文件,包含了两个或三个提前分配好的文件存储数据库的改变。在线重做日志文件记录数据文件的改变

在线重做日志文件用途
数据维护在线重做日志文件防止数据丢失。特别是当实例失败时,在线重做日志文件确保Oracle数据库恢复已经被提交但是未写入数据文件中的数据。
Oracle数据库同步的写每一个事务到重做日志缓存中,重做日志缓存在写入重做日志文件中。这些日志的内容包括未提交的事务,undo数据,和管理模式、对象的语句。
Oracle仅用在线重做日志恢复。但是,管理员可以通过Oracle日志工具("Oracle LogMiner"))的一个SQL接口去查询在线重做日志文件。重做日志文件是一个关于数据库活动历史信息的有用资源。

Oracle数据库如何写入在线重做日志文件
一个数据库实例的在线重做日志被称为重做线程。在单实例环境中,只有一个实例访问数据库,所以只存在一个重做线程。然而,在Oracle集成环境中,两个或者更多的实例同时访问数据库,每一个实例都有自己的重做线程。一个实例对应一个分开的重做线程避免了对一组单独的在线重做日志文件的争用。
一个在线重做日志包含两个或更多的在线日志文件。Oracle数据库需要至少两个文件保证其中有一个总是可以被用来写入当另外的正在被归档时。

在线重做日志文件切换
Oracle数据库同一时刻在写入只用一个在线重做日志文件存储在线日志缓存中的记录。LGWR进程正在写入的在线日志文件被称为当前在线重做日志文件。
发生日志切换时,数据库停止写一个在线重做日志文件并开始写入另外一个在线重做日志文件时。正常情况下,当当前的日志文件写满并且还需要继续写入时会发生日志切换。但是可以通过配置日志以固定的间隔时间切换而不管当前文件是否被写满。
日志写入器循环写入在线重做日志文件。当日志写满最后一个可用的在线重做日志文件时,这个进程写入第一个日志文件,重新开始循环。


在线重做日志文件的多个副本
Oracle数据库可以自动在不同的磁盘维护在线重做日志文件的两个或多个相同的副本。一个在线重做日志组由一个在线重做日志文件和一个冗余的副本组成。每一个相同的副本都是在线重做日志做的成员。每个组被一个数字定义,历史group 1,group 2等等。
维护多个数量的在线重做日志组可以防止在线重做日志文件的丢失。理想状态下,组内成员应该分布在不同的磁盘上,以至于一个磁盘上的记录失败不会导致整个在线重做日志文件的丢失。
在下图中,A_LOG1和B_LOG1是group 1的完全相同的成员,A_LOG2和B_LOG2是group 2的完全相同的成员。组内的每一个成语必须有相同的大小。LGWR同时写到group 1中,然后同时写到group 2中,然后在写入group 1中等等。LGWR从来不同时写入不同组的成员。


归档重做日志文件
一个归档重做日志文件是在线日志文件组中的一个写满的成员的副本。这个文件被认为不是数据库的一部分,但是是一个被数据库创建的在线重做日志文件的一个脱机的副本,并且被写入到一个用户定义的位置。
归档重做日志文件是备份恢复策略的一个重要部分。你可以用归档重做日志文件去做:
  • 恢复数据库备份
  • 更新一个备用的数据库(standby database
  • 获取一个数据库使用LogMiner utility的历史信息
归档是生成一个归档日志文件的操作。无论是手动归档还是自动归档,只有当数据库是归档模式时才有可能归档。
归档日志文件包括重做记录和在线重做日志文件组中完全相同成员的日志序列号。在上图中,A_LOG1和B_LOG1是group 1的完全相同的成员。如果数据库是归档模式,如果自动归档启用,ARCN进程会归档其中的一个文件。如果A_LOG1被毁坏,这个进程就会归档B_LOG1。归档重做日志文件包含每个组创建的副本自从启用归档模式。

在线重做日志文件的结构
在线重做日志文件包括redo recodes。一个redo redoces有依稀了改变因子组成,每一个改变因子描述数据块的一个改变。例如,一个employees表中的薪水的更新操作会产生一条redo record,它用来描述表段块,undo段数据块,undo段对应的事务表的改变。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭