第1讲:oracle数据库实例简介
数据库实例是一组用于管理数据库文件的内存结构。数据库是一组由create database语句在磁盘上创建的物理文件。由实例管理其关联的数据,并为数据库用户提供服务。
每个正在运行的 Oracle 数据库至少与一个 Oracle 数据库实例相关联。因为实例存在于内存中,而数据库存在于磁盘上,所以实例可以在没有数据库时而存在,数据库也可以在没有实例时存在。
oracle实例结构
当实例启动时, Oracle 数据库分配一个叫做系统全局区(SGA) 的内存区域,并启动一个或多个后台进程。
SGA用于以下几个目的:
1)维护由很多进程和线程同时访问的内部数据结构
2)缓存从磁盘中读取的数据块
3)缓冲重做数据,然后再将其写入联机重做日志文件
4)存储 SQL 执行计划
SGA 由运行在一台单一计算机上的多个 Oracle 进程共享,包括服务器进程和后台进程。Oracle 进程与 SGA 相关联的方式会因不同的操作系统而有所不同。数据库实例包括多个后台进程。服务器进程和在这些的进程中分配的进程内存也存在于实例中。当服务器进程终止时,实例仍会继续运行。
【数据库实例】
数据库实例配置
您可以在以下两种互斥配置中的一种来运行 Oracle 数据库:
1)单实例配置
数据库和实例之间存在一对一关系
2)oracle真正应用集群(oracle RAC)配置
数据库与实例之间存在一对多的关系,即一个数据库可以连接多个实例
【数据库实例的配置】
无论是在单实例还是在 Oracle RAC 配置中,一个数据库实例在同一时刻只与一个数据库相关联。您可以启动一个实例,并装载(与实例相关联)一个数据库,但不能同时将两个数据库装载到同一实例。
注意:讨论单实例数据库配置
在同一台计算机上可以同时运行多个实例,每个实例访问其自己的数据库。例如,一台计算机可以承载两个完全不同的数据库: prod1 和 prod2。一个数据库实例管理 prod1,而另一个实例管理 prod2。
实例的持续时间
实例在使用 STARTUP 命令创建时开始,在终止时结束。这此期间,实例能且只能与一个数据库相关联。此外,该实例只能装载数据库一次,打开数据库一次、关闭数据库一次。在数据库已关闭后,您必须启动一个不同实例来装载并打开此数据库。
【持续时间的实例】
Oracle系统标识符 (SID)
系统标识符 (SID) 是特定主机上的某个 Oracle 数据库实例的唯一名称。在UNIX 及 Linux 上,Oracle 数据库使用 SID 和 Oracle Home 的值来创建一个指向共享内存的键。此外,SID 在默认情况下用于定位参数文件,并使用参数文件来进一步定位其它相关文件,如数据库控制文件等。
在大多数的平台上, 由 ORACLE_SID 环境变量设置 SID,而ORACLE_HOME 变量设置 Oracle Home。当客户端要连接到实例时,可以在 Oracle Net 连接中指定 SID,或使用网络服务名称。Oracle 数据库将服务名称转换为一个 ORACLE_HOME 和 ORACLE_SID 。
第2讲:实例启动和关闭概述
数据库实例提供了用户对数据库的访问。此部分说明了实例和数据库可能存在的状态。
实例和数据库启动概述:
举一个典型的使用案例,您手动启动一个实例,然后装载并打开数据库,使其对用户可用。您可以使用 SQL*Plus 的 STARTUP 命令、 Oracle 企业管理器 (企业管理器) 、或 SRVCTL 【通过srvctl start database也许会去ocr中记录的位置去找spfile.】实用程序来执行这些步骤。图 13-3 显示了数据库如何从关闭状态一步步推进到打开状态。
【实例和数据库启动序列】
当数据库从关闭状态推进到打开状态时,会经历以下几个阶段:
1)启动实例,但未装载数据库 nomount状态
实例已启动,但尚未与某个数据库相关联。
2)装载数据库 mount状态
实例已启动,并且通过读取控制文件,来与数据库相关联 ,数据库对用户是关闭的。
3) 打开数据库 open状态
实例已启动,并与一个打开的数据库相关联。授权的用户可以访问数据文件中包含的数据
具有管理员权限的连接
数据库启动和关闭是功能强大的管理选项,仅限于能以管理员权限连接到Oracle 数据库的用户来使用。一般用户对 Oracle 数据库的当前状态不具有控制权。
取决于不同的操作系统,使用下列条件之一来建立用户的管理员权限(两种方式连接数据库):
1)用户的操作系统权限使其能够使用管理员权限来连接。
2)用户被授予了 SYSDBA 或 SYSOPER 的系统权限,数据库通过网络使用密码文件对数据库管理员进行身份验证。
SYSDBA 和 SYSOPER 是特殊的系统权限,使你甚至能够在数据库未打开时仍能访问数据库实例。这些权限控制处于数据库本身之外。当你使用SYSDBA 系统权限连接时,你将处于 SYS 模式中。当你使用 SYSOPER 连接时,你将处于 PUBLIC 模式中。SYSOPER 权限是 SYSDBA 权限的子集。
实例是如何启动的
当Oracle数据库启动一个实例时,它执行以下基本步骤:
1)在特定于平台的默认位置搜索服务器参数文件,如果未找到 ,则搜索一个初始化参数文本文件(为 STARTUP 指定 SPFILE 或 PFILE参数将覆盖该默认行为)
2)读取参数文件,以确定初始化参数值
3)基于初始化参数设置,分配 SGA
4)启动 Oracle 后台进程
5)打开警报日志和跟踪文件,并以有效的参数语法将所有显式参数设置写入警报日志中实例启动这一阶段数据库还没有与该实例相关联。需要 NOMOUNT 状态的场景包括创建数据库和某些备份与恢复操作。
数据库是如何装载的:
由实例装载数据库,以将数据库与该实例相关联。为装载数据库,该实例获取由 CONTROL_FILES 初始化参数指定的数据库控制文件名称,并打开文件。Oracle 数据库读取控制文件,以查找数据文件和联机重做日志文件的名称,当打开数据库时,它会尝试访问这些文件。在一个已装载的数据库中,该数据库是关闭的,且只有数据库管理员可以访问。管理员可以在完成某些特定的维护操作时保持数据库关闭。但是,数据库此时还不可用于常规操作。
如果 Oracle 数据库允许多个实例同时装载同一数据库,则CLUSTER_DATABASE 初始化参数设置可以使数据库可用于多个实例。数据库的行为取决于其设置:
1)如果装入数据库的第一个实例的 CLUSTER_DATABASE 为 false (默认),则仅此实例可以装入数据库。
2)如果第一个实例的 CLUSTER_DATABASE 为 true ,则其他实例在其CLUSTER_DATABASE 参数也设置为 true 时可以装载数据库。可以装载数据库的实例数量决定于在创建数据库时指定的预定最大值。
数据库是如何打开的:
打开一个已装载的数据库,使其可用于常规的数据库操作。任何有效的用户可以连接到打开的数据库,并访问其信息。通常,由数据库管理员打开数据库,使其可用于一般用途。
在打开数据库时, Oracle 数据库执行下列操作:
1)打开除撤消表空间之外的其他的表空间中的联机数据文件。
如果在之前数据库关闭时,某个表空间是脱机的,则该表空间及其相应的数据文件,在重新打开数据库时,仍将处于脱机状态。
2)获取一个撤消表空间
如果存在多个撤消表空间,则由 UNDO_TABLESPACE 初始化参数指定要使用的撤消表空间。如果尚未设置此参数,则会选择第一个可用的撤消表空间。
3)打开联机重做日志文件
只读模式:默认情况下,数据库打开为读/写模式。在这种模式下,用户可以对数据作出更改,并在联机重做日志中生成重做。或者,也可以打开为只读模式,以防止数据被用户事务修改。
注意:默认情况下,物理备用数据库将以只读模式打开。只读模式限制数据库访问只能为只读事务,也就无法写入到数据文件或联机重做日志文件。但是,数据库能执行恢复,或更改数据库状态但不生成重做的操作。
例如,在只读模式:
1)数据文件可以被脱机和联机。但是,你不能将永久表空间(SYSTEM、SYSAUX)脱机。
2)脱机数据文件和表空间是可以恢复的。
3)控制文件仍然可用,以更新有关数据库的状态。
4)使用 CREATE TEMPORARY TABLESPACE 语句创建的临时表空间是可读/写的。
5)可以继续往操作系统写入审计文件、跟踪(trace)文件、和警报(alert)日志。
数据文件检查:当实例尝试打开数据库时,如果任何数据文件或重做日志文件不存在,或者虽然文件存在,但一致性测试失败,则数据库将返回一个错误。此时可能需要介质恢复。
数据库和实例关闭概述:
举一个典型的使用案例,您手动关闭数据库以执行维护或其他管理任务,这将使数据库对用户不可用。您可以使用 SQL * Plus 的 SHUTDOWN 命令或企业管理器来执行这些步骤。图 13-4 显示从打开状态推进到一致关闭的过程。
【实例和数据库关闭顺序】
当一致地关闭打开的数据库时,Oracle 数据库自动执行以下步骤:
1)数据库关闭
数据库仍处于装载状态,但数据文件和联机重做日志文件已被关闭。
2)数据库卸载
实例仍处于启动状态,但已不再与数据库的控制文件相关联。
3)数据库实例关闭
数据库实例不再处于启动状态。
当实例失败或遭遇 SHUTDOWN ABORT 时,Oracle 数据库不会经历之前这些所有步骤,而只是立即终止该实例。
数据库关闭模式:
具有SYSDBA或SYSOPER权限的数据库管理员,可以使用SQL*Plus 的SHUTDOWN 命令或企业管理器来关闭数据库。SHUTDOWN命令有几个决定关闭行为的选项。
【关闭模式】
可能的几种 SHUTDOWN 语句选项是:
1)SHUTDOWN ABORT
此模式用于紧急情况,如其他形式的关闭方式都未能成功时。这种模式的关闭是最快的。但是,随后打开该数据库可能时间会显著增加,因为必须执行实例恢复以使数据文件一致。
注意:因为 SHUTDOWN ABORT 不对打开的数据文件执行检查点操作,所以在重新打开数据库之前,必须进行实例恢复。对于其他的关闭模式,在数据库重新打开之前不需要进行实例恢复。
2)SHUTDOWN IMMEDIATE(建议)
这种模式通常是除 SHUTDOWN ABORT 之外最快的关闭模式了。Oracle 数据库终止任何正在执行的 SQL 语句,并断开用户连接。所有活动事务都将终止,并回滚所有未提交的更改。
3)SHUTDOWN TRANSACTIONAL
这种模式可以防止用户启动新事务,但在关闭之前会等待所有的当前事务完成。这种模式可能会花费相当长的时间,这取决于当前事务的特征。
4)SHUTDOWN NORMAL
这是默认的关闭模式。在关闭之前数据库会等待所有连接的用户断开连接。
数据库是如何关闭的:
数据库的关闭操作是在数据库停机中的一个隐含步骤。该操作的性质取决于数据库停机是正常还是非正常的。
正常停机过程中是如何关闭数据库的:
当数据库作为 SHUTDOWN 的一部分(不使用 ABORT 选项)而关闭时,Oracle 数据库将 SGA 中的数据写入数据文件和联机重做日志文件。然后数据库关闭联机数据文件和联机重做日志文件。脱机表空间中的任何脱机数据文件是本来就是已关闭的。当重新打开数据库时,任何本来脱机的空间仍然保持脱机状态。这一阶段中,该数据库是关闭的,且无法进行正常操作访问。在数据库关闭后,控制文件仍保持打开状态。
非正常关机过程中是如何关闭数据库:
如果执行了 SHUTDOWN ABORT ,或出现异常终止,则打开数据库的实例会关闭,并在瞬间将数据库停机。Oracle 数据库不会将 SGA 缓冲区中的数据写入数据文件和重做日志文件。随后重新打开数据库需要实例恢复,这将由 Oracle 数据库自动执行。
数据库是如何卸载的:
数据库关闭之后,Oracle 将数据库卸载,并解除与实例的关联。数据库卸载后 ,Oracle 数据库关闭数据库的控制文件。这个时候,实例仍将保留在内存中。
实例是如何关闭:关闭数据库的最后一步是关闭实例。当数据库实例关闭时,SGA 被从内存中移除,且后台进程都将被终止。
在异常情况下,实例可能并未干净地关闭。内存结构可能未从内存中删除,或某个后台进程可能未被终止。当之前的实例存在残留物时,后续的实例启动可能会失败。在这样的情况下,为强制(force)启动一个新实例,您可以通过删除之前实例的残留物并启动一个新实例、或通过在 SQL*Plus 中发出SHUTDOWN ABORT 语句、或使用企业管理器。
第3讲:检查点(checkpoint)概述
检查点是进行一致的数据库关闭、 实例恢复、和 Oracle 数据库通用操作的
关键机制。术语检查点具有如下相关含义:
1)指示检查点位置的一个数据结构,该位置是在重做流中实例恢复必须开始处的SCN检查点位置是由数据库缓冲区高速缓存中最旧的脏缓冲区来确定的。
检查点位置作为一个指向重做流的指针,并存储在控制文件中,和在每个数据文件头中。
2)将数据库缓存中已修改的数据库缓冲区写入到磁盘中
检查点的目的
Oracle数据库使用检查点,来实现以下目标:
1)减少实例失败或介质故障情况下恢复所需的时间
2)确保在缓冲区高速缓存中的脏缓冲区被定期写入磁盘
3)确保在一致的关闭过程中所有已提交的数据都被写入磁盘
Oracle数据库何时启动检查点
检查点进程 (CKPT) 负责将检查点写入数据文件头和控制文件。检查点会在多种情况下发生。例如, Oracle 数据库使用以下类型的检查点:
1)线程检查点
数据库将某个确定目标之前、被某个特定的重做线程所修改的所有缓冲区写入磁盘。数据库中所有实例的线程检查点的集合即为数据库检查点。线程检查点在下列情况下发生:
o 一致的数据库关闭
o ALTER SYSTEM CHECKPOINT 语句
o 联机重做日志切换
o ALTER DATABASE BEGIN BACKUP 语句
2)表空间和数据文件的检查点
数据库将某个确定目标之前、被重做线程所修改的所有缓冲区写入磁盘。表空间检查点是一组数据文件检查点,每个数据文件检查点对表空间中的某个数据文件做检查点操作。这些检查点发生在很多情况下,包括将一个表空间变为只读、将表空间脱机、收缩数据文件、或执行 ALTER TABLESPACE BEGIN BACKUP 等。
3)增量检查点
增量检查点是一种线程检查点,部分原因是为了避免在联机重做日志切换时写入大量的块。DBWn 至少每隔三秒会进行检查以确定是否有工作要做。当 DBWn 将脏缓冲区写入磁盘时,它会向前推进检查点位置,导致CKPT将检查点位置写入控制文件,而不是数据文件头。其他类型的检查点包括实例和介质恢复检查点,和删除或截断模式对象时的检查点。
第4讲:实例恢复概述
实例恢复是将联机重做日志中的记录应用到数据文件,以重建最近检查点之后所做更改的过程。当管理员尝试打开一个之前以不一致方式关闭的数据库时,会自动执行实例恢复。
实例恢复的目的:
实例恢复可确保数据库在一个实例失败后仍能回到一个一致的状态。由于Oracle 数据库对数据文件更改的管理方式所致,数据库的文件可以处于不一致的状态。重做线程是对实例生成的所有更改的记录。单实例数据库拥有一个重做线程,而一个 Oracle RAC 数据库拥有多个重做线程——每个数据库实例有一个。
当事务提交时,日志写入器 (LGWR) 将内存中的重做条目和事务 SCN 同时写入联机重做日志。但是,数据库写入器 (DBWn) 进程只在最有利的时机将已修改的数据块写入数据文件。由于这个原因,未提交的更改可能会暂时存在于数据文件中,而已提交的更改也可能还不在数据文件中。
如果某个打开的数据库的实例失败,或者由于 SHUTDOWN ABORT 语句或异常终止,则可能会导致下列情况:
1)由某事务已提交的数据块更新还未写入数据文件,而仅写入了联机重做日志中。这些更改必须重新应用到数据库。
2)数据文件包含实例失败时尚未提交的更改。这些更改必须回滚,以确保事务一致性。
实例恢复只使用联机重做日志文件和当前在线的数据文件,以同步数据文件,并确保它们一致。
Oracle数据库何时执行实例恢复
是否需要实例恢复取决于重做线程的状态。在数据库实例被打开为读/写模式时,重做线程在控制文件中被标记为打开,而当实例被一致关闭时,重做线程被标记为关闭。如果重做线程在控制文件中被标记为打开,但没有活动的实例持有对应于这些线程的线程队列,则数据库将需要实例恢复。
Oracle 数据库在以下情况下自动执行实例恢复:
1)单实例数据库或 Oracle RAC 数据库的所有实例失败后第一次打开数据库。这种形式的实例恢复也称为崩溃恢复。Oracle 数据库一起恢复所有已终止实例的联机重做线程。
2)只是 Oracle RAC 数据库中的某些、但不是所有实例失败。实例恢复将由配置中的某个存活实例自动进行。
SMON 后台进程自动执行实例恢复并应用联机重做记录。而不需要任何用户干预。
实例恢复检查点:
实例恢复使用检查点来确定必须将哪些更改应用到数据文件。检查点位置始终保证所有比其 SCN 低的检查点所对应的已提交更改都已保存到数据文件。
【联机重做日志中的检查点位置】
实例恢复期间,数据库必须应用检查点位置和重做线程结尾之间发生的更改。如图 13-5 所示, 某些更改可能已经写入数据文件。但是,只有其 SCN低于检查点位置的更改,才保证已被写到了磁盘上。
实例恢复阶段
实例恢复的第一阶段称为缓存恢复或 前滚,这涉及将联机重做日志中记录的所有更改重新应用到数据文件。因为回滚数据记录在联机重做日志中,前滚也会重新生成相应的撤消段。
前滚会遍历各个必要的联机重做日志,以将数据库推进到一个更前的一致时间点。前滚之后,数据块包含记录在联机重做日志文件中的所有已提交更改。这些文件可能还包含未提交的更改,要么是在实例失败前保存到数据文件中的,或者是在缓存恢复过程中引入的。
前滚之后,任何未提交的更改必须被撤消。Oracle 数据库使用检查点位置,保证每个低于其 SCN 的已提交更改都已保存到磁盘。Oracle 数据库应用撤消块,以回滚数据块中在实例失败前写入的或缓存恢复过程中引入的未提交更改。这一阶段称为 回滚或事务恢复。
【前滚和回滚】
Oracle 数据库可以根据需要同时回滚多个事务。实例失败时的所有活动事
务被标记为终止。新事务可以自己回滚个别块以获取所需的数据,而不必等
待 SMON 进程来回滚这些已终止的事务。
第5讲:参数文件的概述
要启动数据库实例,Oracle 数据库必须读取一个(推荐的) 服务器参数文件或一个(传统的) 文本初始化参数文件。这些文件包含配置参数的列表。要手动创建一个数据库,必须用一个参数文件启动实例,然后发出CREATE DATABASE 命令。因此,即使数据库本身还不存在,实例和参数文件即可以存在。
初始化参数
初始化参数是会影响实例基本操作的配置参数。实例在启动时从一个文件读取初始化参数。Oracle 数据库提供了许多 初始化参数,以优化其在不同环境中的操作。只需要显式设置几个参数,因为其默认值对大多数情况已经足够。
初始化参数的功能分组:
绝大多数的初始化参数属于以下功能分组之一:
1)名字条目参数,如文件或目录
2)限制设置参数,如进程、 数据库资源、或数据库本身等
3)影响容量的参数,如SGA的大小(这些参数也称为可变参数)
数据库管理员可能会对可变参数特别感兴趣,因为他们可以使用这些参数来提高数据库性能。
基本和高级的初始化参数
初始化参数可以分为两组: 基本的和高级的。在大多数的情况下,你只需设置和调整大约 30 个基本参数,就可以获得还不错的性能。基本参数设置的特性包括数据库名称、控制文件的位置、数据库的块大小、和撤消表空间等。
在某些情况下,为获得最佳性能,可能需要修改高级参数。启用高级参数可以使专家级 DBA 能够调整 Oracle 数据库以满足某些特殊需求。
Oracle 数据库软件自带的初始化参数文件提供了一些初级参数值,或者你也可以通过数据库配置助手来产生这些值。您可以编辑这些 Oracle 提供的初始化参数并添加其他参数,这取决于您的配置,以及你计划如何优化数据库。对于初始化参数文件中不包含的有关参数,Oracle 数据库提供默认值。
服务器参数文件
服务器参数文件是 Oracle 数据库用来管理初始化参数的一个存储库。服务器参数文件具有以下主要特征:
1)对于一个数据库,只存在一个服务器参数文件。此文件必须驻留在数据库主机上。
2)服务器参数文件只由 Oracle 数据库读取和写入,而不能由客户端应用程序读取和写入。
3)服务器参数文件是二进制的,且不能使用文本编辑器修改。
4)存储在服务器参数文件中的初始化参数是永久性的。数据库实例正在运行时对参数所做的任何更改,可以跨实例关闭和启动而存在。
服务器参数文件消除了为多个客户端应用程序维护多个文本初始化参数文件的需要。服务器参数文件最初可以从一个文本初始化参数文件,使用CREATE SPFILE 语句来生成。也可以直接由数据库配置助手创建。
文本初始化参数文件
文本初始化参数文件是一个文本文件,其中包含初始化参数的列表。这是一种旧式参数文件,具有以下关键特征:
1)当启动或关闭数据库时,文本初始化参数文件必须驻留在连接到该数据库的客户端应用程序相同的主机上。
2)文本初始化参数文件是基于文本的,而非二进制。
3)Oracle 数据库可以读取,但不能写入文本初始化参数文件。若要更改参数值,必须使用文本编辑器手动更改文件。
4)通过 ALTER SYSTEM 对初始化参数值所做的更改,仅在当前实例中有效。您必须手动更新文本初始化参数文件,并重新启动实例以使更改生效。
【文本初始化参数行】
为了说明文本参数文件可能产生的可管理性问题,假定您使用计算机clienta 和 clientb,并且必须能够从其中任何一台计算机上使用 SQL*Plus 启动数据库。在这种情况下,必须存在两个独立的文本初始化参数文件,每台计算机上一个,如图 13-7 所示。服务器参数文件解决了分散的参数文件问题。
【多个初始化参数文件】
修改初始化参数的值:
您可以修改初始化参数,以调整数据库行为。将其按静态或动态参数的分类,确定了应如何修改它们。表 13-3 总结了的其中的差异。
【静态和动态初始化参数】
静态参数包括 DB_BLOCK_SIZE 、 DB_NAME 、和 COMPATIBLE 等。动态参数可分为 会话级参数和 系统级参数,会话级参数只影响当前的用户会话,而系统级参数影响数据库及所有会话。例如,MEMORY_TARGET 是一个系统级参数,而 NLS_DATE_FORMAT 是一个会话级参数。
参数更改的范围取决于更改何时生效。若实例是用服务器参数文件启动的,则可以使用 ALTER SYSTEM SET 语句更改系统级参数的值,如下所示:
1)SCOPE=MEMORY
更改只应用于数据库实例。如果数据库关闭并重新启动,更改将不会保留。
2)SCOPE=SPFILE
更改被写入服务器参数文件,但不会影响当前实例。因此,所做的更改不会生效,直到重新启动该实例。
注意:当你修改某个在《 Oracle 数据库参考 》中描述为不可修改的参数的值时,必须指定 SPFILE。
3)SCOPE=BOTH
将更改同时写入内存和服务器参数文件。当数据库使用服务器参数文件时,这是默认的范围。数据库会在警报日志中输出初始化参数的旧值和新值。作为一项预防措施,数据库会验证对基本参数的更改,以防止非法值被写入到服务器参数文件中。
第6讲:诊断文件概述
Oracle数据库包括一个故障可诊断性基础设施,以预防、检测、诊断、并解决各种数据库问题。这些问题包括如代码错误、元数据损坏、和客户数据损坏等严重错误。
这个先进的故障可诊断性基础设施的目标如下:
1)主动侦测问题
2)在检测到问题后,限制破坏和中断
3)减少问题诊断和解决时间
4)简化客户与 Oracle 支持的交互
自动诊断存储库
自动诊断存储库 (ADR ) 是一个基于文件的存储库,存储了如跟踪文件、
警报日志、和健康监测报告等数据库诊断数据。ADR 的关键特征包括:
1)统一的路径结构
2)一致的诊断数据格式
3)统一的工具集
上述特性使得客户和Oracle支持部门能跨多个Oracle实例、组件、和产品对诊断数据进行关联和分析。
ADR 处于数据库之外,这使得即便物理数据库不可用时,也可以访问和管理 ADR。在创建数据库之前,其实例就可以创建 ADR。
问题和事件
ADR主动跟踪数据库中的严重错误问题。严重错误通常显示为内部错误,如ORA-600或其他严重错误。每个问题有一个问题键,它是一个描述此问题的文本字符串。
当一个问题出现多次时,ADR为每次发生的错误创建一个带时间戳的事件。事件由一个数字事件件id 唯一标识。当事件发生时,ADR发送一个事件警报到企业管理器中。对严重错误的诊断和解决,通常从一个事件警报开始。
因为一个问题可以在短时间内生成许多事件,ADR 在达到某些阈值时,将对事件生成应用防洪控制措施。 防洪受控事件将生成一个警报日志条目,但不会生成事件转储。这样一来,ADR 会通知您正在发生一个严重错误,而不会在系统中产生过量诊断数据。
ADR结构
ADR base 是 ADR 的根目录。ADR base 可能包含多个 ADR home,每个ADR home 是一个 Oracle 产品或组件实例的所有的诊断数据的根目录,包括跟踪、 转储、 和警报日志等等。例如,在有共享存储和 ASM 的 Oracle
RAC 环境中,每个数据库实例和每个 ASM 实例都有自己的 ADR Home。
图 13-8 说明了数据库实例的 ADR 目录层次结构。其他 Oracle 产品或组件(如 ASM 或 Oracle 网络服务)的 ADR Home 也可以存在于此层次结构中,在相同的 ADR base 之下。
如下的 Linux 示例显示, 当你在创建一个数据库之前,使用一个唯一的 SID和数据库名称启动一个实例时,Oracle 数据库在主机文件系统中会将 ADR默认创建为一个目录结构。SID 和数据库名称形成 ADR Home 中的文件路径名称的一部分。
【创建ADR】
以下各节描述了ADR的内容。
警报日志
每个数据库都有一个警报日志,它是一个XML文件,其中包含按时间排序的数据库信息和错误的日志。警报日志的内容包括如下:
1)所有的内部错误 ( ORA-600 )、 块损坏错误 ( ORA-1578 ) 、和死锁错误 ( ORA-60
2)管理性操作,如 DDL 语句和 STARTUP 、 SHUTDOWN 、 ARCHIVELOG 、和 RECOVER 等 SQL*Plus 命令
3)几个与共享服务器和调度器进程的功能有关的消息和错误
4)物化视图自动刷新过程中的错误
Oracle 数据库使用警报日志作为在企业管理器GUI中显示信息的一种替代。如果管理操作成功,则 Oracle 数据库向警报日志写入一条带有时间戳的“已完成”消息。如图 13-8 所示, 当您首次启动一个数据库实例,即使其数据库尚未创建,Oracle 数据库会在 alert 子目录中创建一个警报日志。下面的示例演示一个纯文本警报日志的一部分:
【纯文本警报日志的一部分】
跟踪文件
跟踪文件是一个管理性文件,其中包含用于调查问题的诊断数据。此外,跟踪文件也可以为优化应用程序或实例提供指导。
跟踪文件的类型
每个服务器和后台进程可以定期写入一个关联的跟踪文件。这些文件包括进程环境、 状态、 活动、和错误等信息。SQL 跟踪设施还会为单个 SQL 语句创建跟踪文件,以提供性能信息。若要为客户端标识、 服务、 模块、 动作、 会话、 实例、或数据库等启用跟踪,必须执行 DBMS_MONITOR 包中适当的过程,或使用 Oracle 企业管理器。
转储是一种特殊类型的跟踪文件。跟踪往往是诊断数据的连续输出,而转储通常是响应某个事件的一次性诊断数据输出。当事件发生时,数据库会将一个或多个转储写入为事件创建的目录。事件转储还在文件名称中包含了事件号。
跟踪文件的位置
ADR 将跟踪文件存储在 trace 子目录中,如图 13-8 所示。跟踪文件的名称取决于其运行平台,并使用扩展名.trc。通常,数据库后台进程的跟踪文件名称中包含 Oracle SID、 后台进程名称、和操作系统进程号。 RECO 进程的跟踪文件的一个示例是mytest_reco_10355.trc。服务器进程跟踪文件名称包含 Oracle SID、字符串 ora 和操作系统进程号。服务器进程跟踪文件名称的一个示例是 mytest_ora_10304.trc。
有时跟踪文件有相应的跟踪位图 (.trm) 文件。这些文件包含跟踪文件的相关结构信息,并用于搜索和导航。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30310891/viewspace-1730075/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30310891/viewspace-1730075/