ORACLE数据库文件系统简析(二)
撤销日志,当用于全局临时表时,如果准备回滚一些事务,就可以在自己的会话中完成。
五、控制文件
控制文件是一个相当小的文件(最大为64MB),它包含Oracle需要的其他文件的目录或路径。参数文件告诉我们控制文件的位置,而控制文件则把数据库和联机重做日志文件的位置告诉实例。控制文件也给Oracle提供其他信息,例如关于已经发生的检查点的信息、数据库的名称、数据库创建时的时间戳、归档重做日志历史等等。控制文件应该由硬件或Oracle(RAID)当RAID或镜像不可用时多路服用的,且应该分别保存在分开的磁盘上,以避免万一出现磁盘故障时造成控制文件丢失。
六、重做日志文件
1、重做日志文件对Oracle数据库是至关重要的,它们是数据库的事务日志,仅在数据库恢复时使用(它们的唯一作用就是在实例或介质失败时使用,或作为维护用于数据库故障恢复的后备数据库的方法)。如果关掉数据库所在机器的电源,造成实例失败,Oracle将使用联机重做日志,以将数据库恢复到电源停止之前的那一刹那。如果包含数据文件的磁盘驱动器发生永久性故障,Oracle数据库将使用归档重做日志,与使用联机重做日志一样,将驱动器的备份及时恢复到那一时间点。另外,如果“意外地”丢失了一个表,或删除了一些关键信息,并提交了操作,可以通过这些联机和备份的重做日志来恢复备份,并使Oracle立即将它恢复到事故发生前的时刻。
2、事实上,在Oracle执行的每一个操作都生成一定数量的重做日志,它们被写入联机重做日志中。一些操作可能以生成尽可能少的重做日志的方式来执行。例如,可以用NOLOGGING属性创建一个索引。这意味着日志中将不记录那个索引的初始创建。
联机重做日志:
1、每一个Oracle数据库至少有两个联机重做日志文件,这些联机重做日志文件在大小上是固定的,并以循环的方式使用。重做日志首先写入日志文件1,当日志文件写到末尾时,切换至日志文件2,以此类推,直到写到最后一个日志文件,当最后一个日志文件写到末尾时,将自动切换回日志文件1。
2、从一个日志文件切换到另一个日志文件的动作称为日志切换。日志切换可能在一个优化效果不是很好的数据库中引起临时的“挂起”。因为重做日志是用来在操作失败时进行恢复处理用的,必须保证在重用之前,不需要在失败时重做日志的内容。如果Oracle不确定它需要一个日志文件的内容,它将暂时悬挂数据库的操作,并保证这个重做所“保护”的数据在磁盘上本身是安全的。一旦此事确定,将重新开始处理,重做日志将被重用。
3、数据库缓冲区高速缓存是数据库临时存储数据的地方。这是Oracle的SGA的结构。缓冲区高速缓存是第一个也是最重要的性能优化设备,它单独存在,以便使非常慢的I/O进程显得更快一些。只要高速缓存了修改的块,且没有写到磁盘上,就不能使用那个重做日志文件。
4、检查点是从缓冲区高速缓存到磁盘上脏(被修改过的)块的刷新。DBWn是Oracle的后台进程,负责在缓冲区高速缓存溢出的时候创造空间,更重要的是执行检查点。Oracle在后台做这件事,许多操作会导致检查点的发生,最通常的事情就是重做日志切换。当填满日志文件1,并切换到日志文件2时,Oracle初始化了一个检查点。在这时,启动DBWn,将由日志文件1保护的所有修改块刷新到磁盘上。在DBWn将那个日志文件保护的所有块刷新之前,Oracle 不能重用它。如果在DBWn完成检查点之前试图使用它,将获得如下信息:
...
Thread I cannot allocate new log,sequence 66
Checkpoint not complete
Current log#2 seq#65 mem# 0:C:\ORACLE\ORADATA\TKYTE816\REDO02.LOG
...
在数据库中,有报警(ALERT)日志(报警日志是服务器上的一个文件,它包含来自服务器的丰富消息,如启动和关闭消息和异常事件,如未完成的检查点)。所以,在此时,当此消息出现时,在数据库中的处理被悬挂,这时DBWn在匆忙地完成它的检查点。Oracle尽其所能地给DBWn提供全部处理能力,以期在那时它可以更快地完成。
5、这时一个在优化得很好的数据库实例中不会看到的信息。如果确实看到了这样的消息,那么就为最终客户引入了人为是、不必要的等待。这时可以避免的。方法是只要分配足够多的联机重做日志文件,以便于不会在检查点完成初始化之前试图重用日志文件。如果这个消息频繁出现,这意味着DBA还没有为应用程序分配足够的联机重做日志,或者需要对DBWn优化得更有效。
6、不同的应用程序将生产不同数量的重做日志。DSS(决策支持系统,Decision Support System)将自然地生成重要的联机重做日志,但它比OLTP(事务处理 Transcation Processing)系统生成得少。数据库中二进制大对象(Binary Large Object,BLOB)中进行很多图像操作的系统,与简单的订单输入系统相比,可以生成多得多的重做日志。
7、在设置联机重做日志的大小和数量的时候,必须考虑各种因素,如下:
(1)备用数据库,如果你正在使用备用数据库特性,在此重做日志在它们填满以后发送到另一台机器,并应用到数据库的一个副本上, 你最有可能想要许多小的重做日志文件。这将有助于保证备用数据库与主服务器的异步不会太明显。
(2)许多用户修改相同的块,这里你可能想要大的重做日志文件。因为每个人都在修改相同是块,那么希望在将他们写入磁盘之前,尽可能多的更新它们。每一个日志切换将触发一个检查点,所以希望日志切换不要太频繁。
(3)恢复的平均时间,如果必须保证恢复需要尽可能少的时间。那么可能需要较小的重做日志文件。在恢复上,处理一个或两个小的重做日志文件所花费的时间比处理一个巨大的重做日志文件所花费的时间少。
归档重做日志
Oracle数据库可以在两种模式之中的一种下运行-----非归档模式和归档模式。如果不用归档模式的话,系统不会是一个实用系统。非归档模式的数据库迟早将在某一天丢失数据,这是不可避免的。如果不使用归档模式的话,必将丢失数据。只有测试系统或开发系统才可以运行在非归档模式下。这两种模式之间的区别就是Oracle在重用重做日志文件时,对其做了哪些工作。在包含着有价值数据的系统上,必须使用归档模式。