1.2 需要掌握的Oracle术语
● 警告日志(alert log) :一个文本日志文件,记录数据库的错误和状态消息。警告日志是判断数据库故障种类的一个关键结构。通常情况下,警告日志位于后台转储目标目录中,该目录是由数据库参数BACKGROUND_DUMP_DEST 定义的,其中警告日志称为alert<sid>.log 。
● 归档的重做日志(archived redo log) :数据库在ARCHIVELOG 模式下时,每次Oracle 通过LGWR 进程切换联机重做日志时都会生成归档的重做日志。数据库恢复期间也会使用归档的重做日志。归档的重做日志的副本可以写入10个不同的目录,这些目录是由数据库参数文件中的Oracle 参数LOG_ARCHIVE_DEST_n 定义的。同样,Oracle Database 11 g 允许在称为闪回恢复区(flash recovery area)的新位置中存储归档的重做日志,在第3 章中将详细讨论闪回恢复区。
● 备份控制文件(backup control file) :控制文件的备份是由命令 alter database backup
controlfile to ‘file_name’ 或命令alter database backup control file to trace 生成的。
● 归档的重做日志(archived redo log) :数据库在ARCHIVELOG 模式下时,每次Oracle 通过LGWR 进程切换联机重做日志时都会生成归档的重做日志。数据库恢复期间也会使用归档的重做日志。归档的重做日志的副本可以写入10个不同的目录,这些目录是由数据库参数文件中的Oracle 参数LOG_ARCHIVE_DEST_n 定义的。同样,Oracle Database 11 g 允许在称为闪回恢复区(flash recovery area)的新位置中存储归档的重做日志,在第3 章中将详细讨论闪回恢复区。
● 备份控制文件(backup control file) :控制文件的备份是由命令 alter database backup
controlfile to ‘file_name’ 或命令alter database backup control file to trace 生成的。
● 块(block):Oracle 中最小的存储单元。默认的块大小由数据库参数文件中的参数
DB_BLOCK_SIZE 决定,并且创建数据库后该设置不变。Oracle Database 11 g 允
许表空间具有不同于默认值的块大小。
● 检查点(checkpoint) :一种数据库事件,使数据库将脏( 已使用) 数据块从内存移
出并写入磁盘。
● 数据库(database) :由构成Oracle 数据库的不同组件(表空间、重做日志等)组成。数据库不同于实例。数据库用于存储数据,使用RMAN 可以备份和恢复数据库。
● 数据库一致性(database c onsistency):这是指数据库中的每个对象在某个相同的时间点是一致的。其含义是数据库数据文件中的数据在某个相同的时间点保持一致,也意味着数据库控制文件与数据库数据文件头指针保持同步。
● 数据库控制文件(database control file) :数据库控制文件存储与数据库有关的元数据。包含关于数据库数据文件,归档重做日志,RMAN 备份等有关的信息,以及其他数据库内部信息。
● 数据库数据文件(database datafile) :与表空间相关的物理实体。一个数据库至少含有一个数据库数据文件(该文件属于SYSTEM 表空间)。大部分数据库是由多个不同的数据库数据文件组成的。尽管一个表空间可以有许多关联的数据库数据文件,但是一个给定的数据库数据文件只能有一个关联的表空间。
● 数据库参数文件(database parameter file) :含有实例和数据库配置信息,数据库参数文件分为两部分( 各部分相互独立) :一部分是文本文件init.ora ;另一部分是spfile.ora 文件,该文件允许通过alter system 命令来维持数据库参数的设置。
● 闪回恢复区(Flash Recovery Area,FRA):磁盘的可选配置区域,用于存储各种与恢复相关的文件。RMAN 备份文件、归档的重做日志、联机重做日志,以及控制文件都可以存储在这个区域中。可以在第2 章中看到关于FRA 的更多信息,
第3 章中则有它的相关的设置信息。在本书的大多数章节中都会看到关于 FRA使用的示例。
● 区组(granule):Oracle 连续内存单位。所有的系统全局区(System Global Area ,SGA)其内存分配都近似为最接近的区组单位。区组大小由预计的整个SGA 内存决定,可能为4MB或16MB 。当Oracle 使用较大的区组大小时,大于 128MB的SGA 就可能是断点。分配给数据库的区组数量在数据库启动时确定。
● 实例(instance) :一个实例是Oracle 内存和进程的集合。若已分配SGA 内存,且相应的Oracle 进程均启动和成功运行时,就可以说启动了 Oracle 实例。需要注意的是,Oracle 实例运行不表示数据库自身被打开。在给定时间,一个实例只能与一个数据库关联。
● 联机重做日志(online redo log) :发生重做时,重做会被实际存储在数据库的联机重做日志中。Oracle 要求至少为一个数据库的操作创建两个联机重做日志。这些联机重做日志可以含有多个保护重做的镜像副本。这称为多路重做日志。当一个联机重做日志写满重做内容时,Oracle 会切换到下一个联机重做日志,这称为日志切换(log switch) 操作。
每个联机重做日志文件都有关联的唯一日志序列号。一个日志序列号唯一地标识一个联机重做日志文件,如果这个联机重做日志文件已归档,那么就标识相关联的归档的重做日志文件。通过 V$LOG视图查询可以查找到联机重做日志的日志序列号,在V$ARCHIVED_ LOG视图或V$LOG_HISTORY视图中可以查找给定的归档重做日志的日志序列号。
此外,一个联机重做日志( 以及一个归档的重做日志) 包含该日志文件独特的一组数据库系统更改号(System Change Number,SCN)。在恢复期间,Oracle 按日志序列号的顺序来应用联机重做日志(归档的重做日志)中的撤消(undo) 操作。
● 进程(process):执行Oracle 数据库实际操作的程序。在 Oracle Database 11g 中有5 种必需的进程,也有其他一些进程。
● 重做(redo) :记录对给定数据库的所有修改。对于数据库中的几乎每一个修改来说,都会生成关联的重做记录。
● 模式(schema):拥有Oracle 中的多种逻辑对象(如表和索引),实际上与用户的意义相同。
● 系统全局区(System Global Area,SGA):Oracle 启动时分配的共享内存区,所有Oracle 进程都共享这部分内存。
● 系统更改号(System Change Number,SCN):一个表示某时间点上数据库当前状态的计数器。与VCR(录像机)的计数器相同,随着时间的推移,SCN 会相应地增加。每个 SCN 代表一个数据库生命周期中的一点。因此,在上午 11点,数据库SCN 可能是10ffx0(十进制数4351),而在中午12点,数据库 SCN 则可能是11f0x0(十进制数4592)。
● 表空间(tablespace) :一个物理逻辑实体。由于它存储Oracle 逻辑对象(如表和索引) ,所以是逻辑实体;由于它由一个或多个数据库数据文件组成,所以又是物理实体。一个数据库必须至少包含一个表空间(即SYSTEM 表空间),不过大部分数据库包含多个不同的表空间。
● 跟踪文件(trace file) :数据库会在许多不同的情况下生成跟踪文件,这些情况包括进程错误。每个数据库进程也会生成自己的跟踪文件。在试图解决数据库故障问题时,跟踪文件会起到重要的作用。
1.4 Oracle体系结构
1.五种必需的Oracle 进程
如果成功启动了一个Oracle Database 11g 实例,就至少启动了 5 种不同的进程。当然,在特定的系统中(如基于Microsoft 的各种操作系统),这5 种不同的进程只是单个Oracle 进程中的线程,不过其基本原理是相同的。下面是这些必需的进程:
● PMON:也称为进程监控进程(process monitor process) ,是一个“Jamaican进程”。
● SMON :也称为系统监控进程(system monitor process) ,是另一个“Jamaican 进程”。
● DBWn :称为数据库写入器进程(database writer process)。在Oracle Database 11 g中,最多可以用9 个这样的进程来配置一个实例(不过通常只需要一个这样的进程)。DBWn 负责将信息从SGA 的数据库缓存区写到数据库数据文件中。
● LGWR :日志写入器进程(log writer process) 负责将生成的重做信息从日志缓冲区写到数据库联机重做日志中。用户会话提交时会通知LGWR 写入信息,当重做日志缓冲区快被写满时也需要通知LGWR 进程。
● CKPT:在执行检查点操作时,CKPT 进程会向DBWn 通知该检查点。CKPT 进程也用当前的检查点信息来更新数据库数据文件头。
2. 用户进程和服务器进程
用户连接到数据库时会生成一个用户进程(或者是一个在Windows NT上启动的新线程),该进程将与另一个生成的服务器进程连接。这些进程使用多种协议(如Bequeath 协议或TCP/IP协议)相互通信。
3. 其他可选的Oracle 进程
根据 Oracle 数据库参数文件的配置,启动Oracle 实例时可能会运行许多其他的Oracle进程( 在某些情况下,可选的进程可能会在请求后很长一段时间后才启动) 。由于大多数可选的进程与RMAN 、数据库备份与恢复都没有关系( 除非该进程的故障会导致数据库崩溃,但这种情况很少发生) ,因此不必过多地讨论这些进程。Oracle 的相关文档( 可通过otn.Oracle.com联机获得)中收录了所有可选的进程,此外Oracle Press出版的书籍也介绍了一些有关这方面的知识。
与RMAN 、数据库备份和恢复有一定关系的一种可选进程是ARCHn进程。如果需要进行联机备份,这种进程( 事实上可能存在一个或多个这样的进程) 就是备份与恢复进程的关键因素。参阅本章后面的1.6.1节,可以更深入地了解ARCHn进程。
1.5 Oracle内存和RMAN
Oracle 系统全局区
就RMAN 、备份和恢复而言,我们所关心的主要内存结构称为系统全局区(SGA) 。SGA 是一块大的共享内存分配区,它可以分为以下几个内存子结构:
● 数据库缓存区(database buffer cache)
● 共享池(shared pool)
● 重做日志缓冲区(redo log buffer)
● 大池(large pool)
● Java 池(Java pool)
● 流池(Streams pool)
1.5.1 Oracle数据库
下面将介绍Oracle 数据库自身的体系结构。一个Oracle 数据库由许多不同的结构(包括一些逻辑结构、物理结构和物理逻辑结构)组成。本小节将介绍每种结构类型,并讨论Oracle 数据库的每个组件。最后还将介绍闪回恢复区(Flash Recovery Area ,FRA)和自动存储管理(Automatic Storage Management,ASM)来结束本节。
Oracle 物理组件
Oracle 数据库物理体系结构包括以下组件:
- 数据库数据文件
- 联机重做日志
- 归档重做日志
- 数据库控制文件
- Oracle表空间
- 闪回日志(可选组件)
数据库数据文件
数据库数据文件是数据库的数据存储介质,这些数据文件与表空间相联系,后面将会看到这一点。在数据库中存储信息时,信息最终会存储在这些物理文件中。每个数据库数据文件都包含一个数据文件头,数据文件头中的信息帮助跟踪这个数据文件的当前状态。数据文件头在检查点操作期间被更新,并反映这个数据文件的当前状态。
数据库数据文件可以具有许多指定的不同状态。我们最关心的主要状态是ONLINE和OFFLINE状态,ONLINE 是正常状态,OFFLINE则是非正常状态。数据库数据文件还可以是RECOVER 状态,该状态表示这个数据文件存在问题并且需要被恢复。
如果数据库处于 ARCHIVELOG模式下(后面将详细介绍该模式),可以使数据文件脱机,这可能是特定的恢复操作所需要的。如果数据库处于NOARCHIVELOG 模式下,只能删除数据库数据文件才能使这个数据文件脱机。因为脱机删除数据文件会给数据库造成坏影响(如数据丢失),所以需要谨慎处理。
联机重做日志
如果将Oracle SCN比作VCR上的计数器,那么重做日志就好比录像带。联机重做日志负责记录数据库中发生的每个原子操作更改。考虑到性能和数据保存因素,每个Oracle 数据库都必须至少有两个不同的联机重做日志组,大部分数据库通常都具备两个以上的联机重做日志组。
出于保护的目的,每个联机重做日志组都可以拥有多个位于不同磁盘驱动器上的日志。Oracle 将并行地写入不同的日志,从而使得写入进程更有效。Oracle 以轮询方式每次写入一个重做日志组。当一个重做日志组被写满时,LGWR 进程会关闭这些重做日志并打开下一个联机重做日志进行处理。
重做日志中的记录称为更改矢量(change vector) 。每个更改矢量以SCN 顺序来代表一个原子数据库更改,这样可以在恢复(RMAN 恢复或手动恢复)期间将所有更改记录按顺序应用于数据库,从而实现恢复故障时间点( 或者要求的其他较早时间) 的数据库。LGWR 进程负责将更改矢量(累积在一起就是重做)从重做日志缓冲区中写入到联机重做日志中,本章的1.7 节将详细讨论这个问题。
归档的重做日志
Oracle 结束一个联机重做日志的写入并开始写入另一个联机重做日志时,会发生日志切换(log switch) 。如果数据库处于 ARCHIVELOG 模式下并且正在运行ARCH 进程,日志切换的结果是生成联机重做日志的一个副本。这个联机重做日志的副本称为归档的重做日志。Oracle 可以将归档的重做日志文件最多复制到 10 个不同的目录。在介质恢复期间,数据库使用归档的重做日志来执行恢复操作,在1.7 节中将详细讨论这个问题。
数据库控制文件
每个Oracle 数据库都有一个或多个数据库控制文件。控制文件中包含了许多数据库信息,如当前 SCN 、数据库数据文件的状态以及数据库状态。另外,控制文件也存储多种RMAN 操作的关键信息,如每个数据库数据文件的备份状态。如果丢失控制文件,则需要遵循特定的过程来在控制文件中重新创建RMAN 类别。在控制文件中还包含一类DBA感兴趣的关于检查点SCN(有关最近修改的给定数据文件的SCN)的信息。Oracle 将对该检查点SCN 与存储在数据文件头文件中的检查点SCNs 进行交叉检查。如果它们完全匹配,则不需要进行数据库恢复工作。反之则需要进行某种类型的恢复工作,例如当系统崩溃时进行的自动恢复。有时需要进行介质恢复,例如当数据文件丢失时。
每个Oracle 数据库都有一个或多个数据库控制文件。控制文件中包含了许多数据库信息,如当前 SCN 、数据库数据文件的状态以及数据库状态。另外,控制文件也存储多种RMAN 操作的关键信息,如每个数据库数据文件的备份状态。如果丢失控制文件,则需要遵循特定的过程来在控制文件中重新创建RMAN 类别。在控制文件中还包含一类DBA感兴趣的关于检查点SCN(有关最近修改的给定数据文件的SCN)的信息。Oracle 将对该检查点SCN 与存储在数据文件头文件中的检查点SCNs 进行交叉检查。如果它们完全匹配,则不需要进行数据库恢复工作。反之则需要进行某种类型的恢复工作,例如当系统崩溃时进行的自动恢复。有时需要进行介质恢复,例如当数据文件丢失时。
Oracle 表空间
Oracle 表空间是 Oracle 的一种非实体部分。表空间是Oracle 物理世界(表现形式为数据库数据文件)和逻辑世界(表现形式为Oracle 表空间)之间的链接。我们通常将表空间当作物理-逻辑结构。Oracle 在表空间中存储对象,如表和索引。
表空间由一个或多个Oracle 数据库数据文件组成,因此一个表空间可用的总空间取决于所有数据库数据文件分配的总空间的大小。表空间可以是OFFLINE状态或ONLINE状态,还可以处于READ WRITE或READ ONLY 模式下。如果表空间处于READ ONLY模式下,表空间的内容就不会更改。因为READ ONLY 表空间的内容不会更改,所以DBA通常在表空间被设为只读后只备份一次READ ONLY 表空间的数据库数据文件。当然,如果这个表空间不再处于READ ONLY 模式下,就需要再次启动表空间备份。
Oracle 表空间是 Oracle 的一种非实体部分。表空间是Oracle 物理世界(表现形式为数据库数据文件)和逻辑世界(表现形式为Oracle 表空间)之间的链接。我们通常将表空间当作物理-逻辑结构。Oracle 在表空间中存储对象,如表和索引。
表空间由一个或多个Oracle 数据库数据文件组成,因此一个表空间可用的总空间取决于所有数据库数据文件分配的总空间的大小。表空间可以是OFFLINE状态或ONLINE状态,还可以处于READ WRITE或READ ONLY 模式下。如果表空间处于READ ONLY模式下,表空间的内容就不会更改。因为READ ONLY 表空间的内容不会更改,所以DBA通常在表空间被设为只读后只备份一次READ ONLY 表空间的数据库数据文件。当然,如果这个表空间不再处于READ ONLY 模式下,就需要再次启动表空间备份。
闪回日志
Oracle Database 10g 引入了将 Oracle 数据库闪回到其他时间点的功能。通常要用闪回日志来帮助实现该功能。闪回日志存储在 FRA 中。Oracle 单独负责管理闪回日志,因此它将根据需要创建、删除和调整闪回日志的大小。同样要注意,Oracle 没有归档闪回日志,因此不需要进行恢复。RMAN 支持闪回恢复。
Oracle Database 10g 引入了将 Oracle 数据库闪回到其他时间点的功能。通常要用闪回日志来帮助实现该功能。闪回日志存储在 FRA 中。Oracle 单独负责管理闪回日志,因此它将根据需要创建、删除和调整闪回日志的大小。同样要注意,Oracle 没有归档闪回日志,因此不需要进行恢复。RMAN 支持闪回恢复。
闪回恢复区
Oracle Database 10 g 引入了 FRA 的概念,它允许用户在磁盘上定义一块中心区域以用来恢复相关文件(例如RMAN 备份和归档的重做日志)。尽管FRA 的确参与闪回数据库(Flashback Database) 操作,但请注意不要将闪回恢复区与 Oracle 的闪回数据库特性混淆,FRA 比闪回数据库的功能要强大得多。下面的结构可存储在FRA 中:
- 归档的重做日志
- RMAN 备份固定形式
- RMAN 数据文件副本
- 闪回日志
- 数据库控制文件的副本
- 每个重做日志组的一个成员
- 控制文件自动备份和副本