与实例相关联的文件:参数文件-----这些文件告诉Oracle袜在哪里寻找控制文件。
组成数据库的文件是:
1>数据文件------用于数据库(这些文件包含表、索引以及其他的部分)。
2>重做日志文件------事务日志。
3>控制文件-----它告诉我们这些数据文件在什么地方,以及其他关于其状态的信息。
4>临时文件-----用于磁盘上的分类和临时的存储。
5>密码文件-----用于对在网络上执行管理活动的用户进行身份验证。
如果丢掉了重做日志文件,可有会开始丢失一些数据,如果丢失了数据文件驻它们全部的备份,那么就肯定要永远地丢失那些数据了。
1.参数文件:(TESNAMES.ORA、LISTENER.ORA、SQLNET.ORA、PROTOCOL.ORA、NAMES.ORA文件、CMAN.ORA文件和LDAP.ORA文件。
最重要的参数文件是数据库参数文件,因为如果没有它,我们甚至无法启动一个数据库。
数据库的参数文件通常称为init.ora这是因为它的默认名是init<oracle_sid>.ora。例如,一个SID为tkyte816的数据库。这使它成为相当重要的文件。然而,由于它是一个纯文本文件,可以由任何一个文本编辑器创建,所以它不是必须特别注意的文件。
SID是一个站点标识符。它和ORACLE_HOME(Oracle软件安装的地方)在UNIX中一起创建连接SGA的惟一码名。如果ORACLE_SID或ORACLE_HOME没有正确设置,将得到“ORACLE NT AVAILABLE”错误,这是因为未能连接到由神奇的码名所桔的共享内存段。
oracle的init.ora文件在结构上是非常简单的,它是一系列的变量名和值对。init.ora文件例子如下:
db_name="tkyte816"
db_block_size=8192
control_file=("c:\oradata\control01.ctl","c:\oradata\control02.ctl")
这已经接近所能够侥幸成功运行的最小的init.ora文件。
2.数据文件
数据文件生重做日志文件,在数据库中是最重要的文件组。这是数据最终要存储的地方。第一个数据库至少有一个与之相关的数据文件,通常情况下,将公有很。只有最简单的“测试”数据库中有一个文件。任何真正的数据库至少有两文件----一个是“系统(systesm)”数据文件,一个是“用户(user)”数据文件。为了理解这些内容,必须理解什么是表空问(tablespace)、段(segment)、盘区(extent)、块(block)。
1>段就是数据库对象,它消耗存储空间---对象,如表,索引,回滚段等等。当创建表的时候,将创建一个表段。当创建一个分区表时,即在每个分区上创建一个段。当创建索引时,将创建一个索引段,等等。第一个消耗存储空间的对象最终被存储到一个单一的段中。有回滚、临时段。聚簇段、索引段等。
段本身是由一个或多个盘区组成。盘区是丰文件中一个连续的分析空间。每个段至少开始于一个盘区,一些对象可能至少需要两个盘区(回滚段是一个段至少需要两个盘区的一个例子)。为了一个对象超出其初的盘区,它将要求为其分开另一个盘区。这第二个盘区并不要求它在磁盘上与第一个盘区正好邻接。它可储物柜 于离它很远,但在谁的中,盘区中的空间总是连接的。盘区的窠范围是从一个块到2GB。
盘区由块组成。一个块是在oracle中空间分开的最小单元。块是存储数据行、索引项、临时排序结果的地方。地是oracle读写磁盘的对象。oracle中块通常有3个觉的大小---2KB、4KB、8KB(虽然16KB和32KB也是允许的)。
一个一个或多个盘区所组成----一个盘区是一些连续分配的块。
数据库的块大小在数据库创建时就固定下来了---数据库中每一个块的容量都是相同 的,所有块有相同 的通知格式。
块头(block header)包含着关于块类型(表块、索引志等等)的信息、关于块上活动和过时事务的信息、磁盘上块的地址(位置)的信息。表目录(table directory),如果给出的话,包含着此块中存储各行的一的信息(多上表中的数据可能保存在相同 的块中)。行目录(row directory)包含着在块中发现 的描述行的信息。这是一个指针数组,这里包含着在块的数据部分的行。块中这3部分统称为块开销(block overhead)---在块上使用的不提供给数据的空间,全被oracle用来管理块本身。剩下的两部分块很简单---在块上可能会有空闲空间,接着通常是当前存储数据的己使用空间。
表空间是一个容器----它保存段。每一个段恰好属于一个人表空间边界。表空间本身有一上或多个与之相关联的数据文件。表空间中给定的任何一个段的盘区完全包含在一个数据文件之中。然而,一个段可以拥有来自许多不同数据文件中的盘区,
总之,在oracle中存储的层次结构如下:
(1)数据库由一个或多个表空间组成。
(2)表空间由一个或多个数据文件组成。一个表空间包含段。
(3)段(表、索引等等)由一个或多个盘区组成。段在在于表空间中,但在表空间可以有许多数据文件中的数据。
(4)盘区是在磁盘上连续的块的组。一个盘区在一个表空间中,而且,总是在表空间中间一的文件中。
(5)块是在数据库中最小的分配单元。块是数据库使用的最小的I/O单元。
3.临时文件:oracle中的临时数据文件是一个特殊 的数据文件类型。当内存不足以在RAM中保存一个大规模排序操作的中间结果或结果集时,oracle使用临时文件来存储它们。永久数据对象,如表或一个索引,是不会存储到临时文件中的,但临时表或临时索引的内容则可能存储到临时文件中。所以,不能丰临时数据文件中创建自己的应用程序表,但可能在使用临时表时在那里存储数据。
oracle以特殊方式处理临时文件。一般来说,对一个对象作出的每一个更改都将记录到重做日志中---这些事务日志可以在将来为了“重做事务”而重新运行。
4.控制文件:控制文件是相当小的文件(它最大可增长到64KB,这也是极限的情况),它包含oracle需要的其他文件目录。参数文件(init.ora)告诉实例控制文件的位置,控制文件则把数据库和联机重做日志文件的位置告诉实例。控制文件也给oracle提供其他信息,例如关于已经发生的查检点的信息、数据库的名称(它应该和db_name.ora参数相匹配)、数据库创建时的时间戳、归档重做日志历史(它中以在某些情况下使控制文件变大),等等。
控制文件应该是由硬件可oracle(RAID)当RAID或镜像不可用时多中利用的--应该存有它们的多个副本,且应该分别保存在分开磁盘上,以避免万一出现磁盘故障时造成控制文件丢失。丢失控制文件是致命的,这使恢复变得非常困难。
5.重做日志文件:重做日志谁的对oracle数据库是到头重要的。它们是数据库 的事务日志。它们仅在恢复时帮使用---它们的惟一作用是在实例或介质失败时使用,或作为维护用于数据库故障恢复的后备数据库的方法。如果关掉数据库所在机器电源,造成实例失败,oracle将使用联机重做日志,以将系统恢复电源停止之前的那一刹那。如果包含数据文件的磁盘驱动器发生永久性故障,oracle将使用归档的重做日志,与使用联机重做日志一样,将驱动器的备份及时恢复到那一时间点。另外,如果“意外地” 丢失了一个表,或删除了一些关键的信息,并提交了操作,可以通过这些联机和备份的重做日志来恢复备份,并使oracle立即将它恢复到“事故”发生前的时刻。
事实上,在oracle中执行的每一个操作都生成了一定数量的重做日志,它们被写入联机重做日志文件中。当将一个行插入到一个表中的时候,插入的结果写入重做日志中。当删除一个行时,删除那个行的事实也被写了进去。当取消一个表时,取消的影响被写入重做日志。取消表中的数据没有写入。然而,oracle为取消表而执行的递归SQL,生成了重做。例如,oracle从SYS.OBJ$表中删除一行,就会生成重做日志。
oracle数据库至少有两个联机重做日志文件。这些联机重做日志文件在大小上是固定的,并以循环的方式使用。oracle将写入日志文件1,当它达到这个文件的末尾时,它将切换到日志文件2,并从关到尾重写那个文件的内容。当它填写完日志文件2时,它将自动切换回日志文件1(假设有两个重做日志文件,如果有3个,它当然 在3个文件上进行)。
在设置联机重做日志的大小和数量的时候,必须考虑各种因素。
1>备用数据库-----如果正在使用备用数据库特性,在此重做日志在它们填满后发送到另一台机器,并应用到数据库的一个副本上,最有可能想要许多小的重做日志文件。这将有助于保证备用数据库与主服务器的异步不会太明显。
2>许多用户修改相同 的块----这里可能想要大的重做日志文件。因为每个人都在修改相同的块,那么希望在将它们写到磁盘上之前,尽可能多地更新它们。每一个日志切换将触发一个检查点,所以希望日志的切换不要太频繁。然而,这可能影响恢复时间。
3>恢复的平均时间----如果必须保证恢复需要尽可能少的时间,那么可能需要较小的重做日志文件,即使先前的观点是正确的。在恢复上,处理一个或两个小的重做日志文件所花费的时间比处理一个巨大的重做日志文件所花费的时间少。
归档重做日志:oracle数据库可以在两种模式之中的一种下运行----非归档模式和归档模式。如果不用归档模式的话,系统不会是一个实用系统。非归档模式的数据库迟早将在某一天丢失数据,这是不可避免的。如果不使用归档模式的话,必将丢失数据。只有测试系统或开发系统才可以运行在非归档模式之下。