Oracle database instance

Oracle database instance

Introduction to the Oracle Database Instance

数据库实例是一组用于管理数据库文件的内存结构。数据库是一组由CREATE DATABASE语句在磁盘上创建的物理文件。由实例管理其关联的数据,并为数据库用户提供服务。

每个正在运行的 Oracle 数据库至少与一个 Oracle 数据库实例相关联。因为实例存在于内存中,而数据库存在于磁盘上,所以实例可以在没有数据库时而存在,数据库也可以在没有实例时存在。

Database Instance Structure

当实例启动时, Oracle 数据库分配一个叫做系统全局区(SGA) 的内存区域,并启动一个或多个后台进程。SGA用于以下几个目的:

维护由很多进程和线程同时访问的内部数据结构

缓存从磁盘中读取的数据块

缓冲重做数据,然后再将其写入联机重做日志文件

存储 SQL 执行计划

SGA 由运行在一台单一计算机上的多个Oracle 进程共享,包括服务器进程和后台进程。Oracle 进程与 SGA 相关联的方式会因不同的操作系统而有所不同。

数据库实例包括多个后台进程。服务器进程和在这些的进程中分配的进程内存也存在于实例中。当服务器进程终止时,实例仍会继续运行。

Database Instance Configurations

您可以在以下两种互斥配置中的一种来运行 Oracle 数据库:

单实例配置

数据库和实例之间存在一对一关系。

Oracle 真正应用集群 (Oracle RAC)配置

数据库与实例之间存在一对多关系。

无论是在单实例还是在 Oracle RAC 配置中,一个数据库实例在同一时刻只与一个数据库相关联。您可以启动一个实例,并装载(与实例相关联)一个数据库,但不能同时将两个数据库装载到同一实例。

Duration of an Instance

实例在使用STARTUP命令创建时开始,在终止时结束。这此期间,实例能且只能与一个数据库相关联。此外,该实例只能装载数据库一次,关闭数据库一次、打开数据库一次。在数据库已关闭后,您必须启动一个不同实例来装载并打开此数据库。

Oracle System Identifier (SID)

系统标识符 (SID) 是特定主机上的某个 Oracle 数据库实例的唯一名称。在UNIX 及 Linux 上,Oracle 数据库使用 SID 和 Oracle Home的值来创建一个指向共享内存的键。此外,SID 在默认情况下用于定位参数文件,并使用参数文件来进一步定位其它相关文件,如数据库控制文件等。

Overview of Instance Startup and Shutdown

数据库实例提供了用户对数据库的访问。此部分说明了实例和数据库可能存在的状态。

Overview of Instance and Database Startup

当数据库从关闭状态推进到打开状态时,会经历以下几个阶段:

? 1 启动实例,但未装载数据库

实例已启动,但尚未与某个数据库相关联。

? 2 装载数据库

实例已启动,并且通过读取控制文件,来与数据库相关联。数据库对用户是关闭的。

? 3 打开数据库

实例已启动,并与一个打开的数据库相关联。授权的用户可以访问数据文件中包含的数据。

Connection with Administrator Privileges

数据库启动和关闭是功能强大的管理选项,仅限于能以管理员权限连接到 Oracle 数据库的用户来使用。一般用户对 Oracle 数据库的当前状态不具有控制权。

取决于不同的操作系统,使用下列条件之一来建立用户的管理员权限:

用户的操作系统权限使其能够使用管理员权限来连接。

用户被授予了 SYSDBA 或 SYSOPER 的系统权限,数据库通过网络使用密码文件对数据库管理员进行身份验证。

SYSDBA和SYSOPER是特殊的系统权限,使你甚至能够在数据库未打开时仍能访问数据库实例。这些权限控制处于数据库本身之外。当你使用SYSDBA系统权限连接时,你将处于SYS模式中。当你使用SYSOPER连接时,你将处于PUBLIC模式中。SYSOPER权限是 SYSDBA 权限的子集。

How an Instance Is Started

当Oracle 数据库启动一个实例时,它执行以下基本步骤:

1. 在特定于平台的默认位置搜索服务器参数文件,如果未找到 ,则搜索一个初始化参数文本文件(为STARTUP指定SPFILE 或 PFILE 参数将覆盖该默认行为)

2. 读取参数文件,以确定初始化参数值

3. 基于初始化参数设置,分配 SGA

4. 启动 Oracle 后台进程

5. 打开警报日志和跟踪文件,并以有效的参数语法将所有显式参数设置写入警报日志中

How a Database Is Mounted

由实例装载数据库,以将数据库与该实例相关联。为装载数据库,该实例获取由 CONTROL_FILES 初始化参数指定的数据库控制文件名称,并打开文件。Oracle 数据库读取控制文件,以查找数据文件和联机重做日志文件的名称,当打开数据库时,它会尝试访问这些文件。

在一个已装载的数据库中,该数据库是关闭的,且只有数据库管理员可以访问。管理员可以在完成某些特定的维护操作时保持数据库关闭。但是,数据库此时还不可用于常规操作。

如果 Oracle 数据库允许多个实例同时装载同一数据库,则 CLUSTER_DATABASE 初始化参数设置可以使数据库可用于多个实例。如果装入数据库的第一个实例的CLUSTER_DATABASE 为 false (默认),则仅此实例可以装入数据库。如果第一个实例的 CLUSTER_DATABASE 为true,则其他实例在其CLUSTER_DATABASE 参数也设置为 true时可以装载数据库。可以装载数据库的实例数量决定于在创建数据库时指定的预定最大值。

How a Database Is Opened

打开一个已装载的数据库,使其可用于常规的数据库操作。任何有效的用户可以连接到打开的数据库,并访问其信息。通常,由数据库管理员打开数据库,使其可用于一般用途。

在打开数据库时, Oracle 数据库执行下列操作:

打开除撤消表空间之外的其他的表空间中的联机数据文件

如果在之前数据库关闭时,某个表空间是脱机的,则该表空间及其相应的数据文件,在重新打开数据库时,仍将处于脱机状态。

获取一个撤消表空间

如果存在多个撤消表空间,则由 UNDO_TABLESPACE 初始化参数指定要使用的撤消表空间。如果尚未设置此参数,则会选择第一个可用的撤消表空间。

打开联机重做日志文件

Read-Only Mode

默认情况下,数据库打开为读/写模式。在这种模式下,用户可以对数据作出更改,并在联机重做日志中生成重做。或者,也可以打开为只读模式,以防止数据被用户事务修改。

默认情况下,物理备用数据库将以只读模式打开。(Data Guard)

只读模式限制数据库访问只能为只读事务,也就无法写入到数据文件或联机重做日志文件。但是,数据库能执行恢复,或更改数据库状态但不生成重做的操作。在只读模式:

数据文件可以被脱机和联机。但是,你不能将永久表空间脱机。

脱机数据文件和表空间是可以恢复的。

控制文件仍然可用,以更新有关数据库的状态。

使用CREATE TEMPORARY TABLESPACE语句创建的临时表空间是可读/写的。

可以继续往操作系统写入审计文件、跟踪文件、和警报日志。

Database File Checks

当实例尝试打开数据库时,如果任何数据文件或重做日志文件不存在,或者虽然文件存在,但一致性测试失败,则数据库将返回一个错误。此时可能需要介质恢复。

Overview of Database and Instance Shutdown

手动关闭数据库以执行维护或其他管理任务,这将使数据库对用户不可用。您可以使用 SQL * Plus的SHUTDOWN命令或企业管理器来执行这些步骤。图 13-4 显示从打开状态推进到一致关闭的过程。

1.数据库关闭

数据库仍处于装载状态,但数据文件和联机重做日志文件已被关闭。

2. 数据库卸载

实例仍处于启动状态,但已不再与数据库的控制文件相关联。

3. 数据库实例关闭

数据库实例不再处于启动状态。

当实例失败或遭遇SHUTDOWN ABORT时,Oracle 数据库不会经历之前这些所有步骤,而只是立即终止该实例。

Shutdown Modes

具有 SYSDBA 或 SYSOPER 权限的数据库管理员,可以使用 SQL*Plus的SHUTDOWN命令或企业管理器来关闭数据库。SHUTDOWN命令有几个决定关闭行为的选项。表总结了在各种不同关闭模式下的行为。

可能的几种SHUTDOWN语句选项是:

? SHUTDOWN ABORT

此模式用于紧急情况,如其他形式的关闭方式都未能成功时。这种模式的关闭是最快的。但是,随后打开该数据库可能时间会显著增加,因为必须执行实例恢复以使数据文件一致。

注意:

因为SHUTDOWN ABORT不对打开的数据文件执行检查点操作,所以在重新打开数据库之前,必须进行实例恢复。对于其他的关闭模式,在数据库重新打开之前不需要进行实例恢复。

? SHUTDOWN IMMEDIATE

这种模式通常是除SHUTDOWN ABORT之外最快的关闭模式了。Oracle 数据库终止任何正在执行的 SQL 语句,并断开用户连接。所有活动事务都将终止,并回滚所有未提交的更改。

  SHUTDOWN TRANSACTIONAL

这种模式可以防止用户启动新事务,但在关闭之前会等待所有的当前事务完成。这种模式可能会花费相当长的时间,这取决于当前事务的特征。

  SHUTDOWN NORMAL

这是默认的关闭模式。在关闭之前数据库会等待所有连接的用户断开连接。

How a Database Is Closed

数据库的关闭操作是在数据库停机中的一个隐含步骤。该操作的性质取决于数据库停机是正常还是非正常的。

How a Database Is Closed During Normal Shutdown

当数据库作为SHUTDOWN的一部分(不使用ABORT选项)而关闭时, Oracle 数据库将SGA中的数据写入数据文件和联机重做日志文件。然后数据库关闭联机数据文件和联机重做日志文件。脱机表空间中的任何脱机数据文件是本来就是已关闭的。当重新打开数据库时,任何本来脱机的空间仍然保持脱机状态。

这一阶段中,该数据库是关闭的,且无法进行正常操作访问。在数据库关闭后,控制文件仍保持打开状态。

How a Database Is Closed During Abnormal Shutdown

如果执行了SHUTDOWN ABORT,或出现异常终止,则打开数据库的实例会关闭,并在瞬间将数据库停机。Oracle 数据库不会将SGA缓冲区中的数据写入数据文件和重做日志文件。随后重新打开数据库需要实例恢复,这将由Oracle 数据库自动执行。

How a Database Is Unmounted

数据库关闭之后,Oracle将数据库卸载,并解除与实例的关联。数据库卸载后 ,Oracle 数据库关闭数据库的控制文件。这个时候,实例仍将保留在内存中

How an Instance Is Shut Down

关闭数据库的最后一步是关闭实例。当数据库实例关闭时,SGA被从内存中移除,且后台进程都将被终止。

在异常情况下,实例可能并未干净地关闭。内存结构可能未从内存中删除,或某个后台进程可能未被终止。当之前的实例存在残留物时,后续的实例启动可能会失败。在这样的情况下,为强制启动一个新实例,您可以通过删除之前实例的残留物并启动一个新实例、或通过在SQL*Plus中发出SHUTDOWN ABORT语句、或使用企业管理器。

Overview of Checkpoints

检查点是进行一致的数据库关闭、 实例恢复、和 Oracle 数据库通用操作的关键机制。术语检查点具有如下相关含义:

指示检查点位置的一个数据结构,该位置是在重做流中实例恢复必须开始处的SCN。检查点位置是由数据库缓冲区高速缓存中最旧的脏缓冲区来确定的。检查点位置作为一个指向重做流的指针,并存储在控制文件中,和在每个数据文件头中。

将数据库缓存中已修改的数据库缓冲区写入到磁盘中。

Purpose of Checkpoints

Oracle 数据库使用检查点,来实现以下目标:

?? 减少实例失败或介质故障情况下恢复所需的时间

? ?确保在缓冲区高速缓存中的脏缓冲区被定期写入磁盘

?? 确保在一致的关闭过程中所有已提交的数据都被写入磁盘

When Oracle Database Initiates Checkpoints

检查点进程 (CKPT) 负责将检查点写入数据文件头和控制文件。检查点会在多种情况下发生。例如, Oracle 数据库使用以下类型的检查点:

线程检查点

数据库将某个确定目标之前、被某个特定的重做线程所修改的所有缓冲区写入磁盘。数据库中所有实例的线程检查点的集合即为数据库检查点。线程检查点在下列情况下发生:

一致的数据库关闭

ALTER SYSTEM CHECKPOINT 语句

联机重做日志切换

ALTER DATABASE BEGIN BACKUP 语句

表空间和数据文件的检查点

数据库将某个确定目标之前、被重做线程所修改的所有缓冲区写入磁盘。表空间检查点是一组数据文件检查点,每个数据文件检查点对表空间中的某个数据文件做检查点操作。这些检查点发生在很多情况下,包括将一个表空间变为只读、将表空间脱机、收缩数据文件、或执行ALTER TABLESPACE BEGIN BACKUP等。

增量检查点

增量检查点是一种线程检查点,部分原因是为了避免在联机重做日志切换时写入大量的块。DBWn至少每隔三秒会进行检查以确定是否有工作要做。当DBWn 将脏缓冲区写入磁盘时, 它会向前推进检查点位置,导致CKPT将检查点位置写入控制文件,而不是数据文件头。

Overview of Instance Recovery

实例恢复是将联机重做日志中的记录应用到数据文件,以重建最近检查点之后所做更改的过程。当管理员尝试打开一个之前以不一致方式关闭的数据库时,会自动执行实例恢复。

Purpose of Instance Recovery

实例恢复可确保数据库在一个实例失败后仍能回到一个一致的状态。由于 Oracle 数据库对数据文件更改的管理方式所致,数据库的文件可以处于不一致的状态。

重做线程是对实例生成的所有更改的记录。单实例数据库拥有一个重做线程,而一个 Oracle RAC 数据库拥有多个重做线程——每个数据库实例有一个。

当事务提交时,日志写入器 (LGWR) 将内存中的重做条目和事务SCN同时写入联机重做日志。但是,数据库写入器 (DBWn) 进程只在最有利的时机将已修改的数据块写入数据文件。由于这个原因,未提交的更改可能会暂时存在于数据文件中,而已提交的更改也可能还不在数据文件中。

如果某个打开的数据库的实例失败,或者由于SHUTDOWN ABORT语句或异常终止,则可能会导致下列情况:

由某事务已提交的数据块更新还未写入数据文件,而仅写入了联机重做日志中。这些更改必须重新应用到数据库。

数据文件包含实例失败时尚未提交的更改。这些更改必须回滚,以确保事务一致性。

实例恢复只使用联机重做日志文件和当前在线的数据文件,以同步数据文件,并确保它们一致。

When Oracle Database Performs Instance Recovery

是否需要实例恢复取决于重做线程的状态。在数据库实例被打开为读/写模式时,重做线程在控制文件中被标记为打开,而当实例被一致关闭时,重做线程被标记为关闭。如果重做线程在控制文件中被标记为打开,但没有活动的实例持有对应于这些线程的线程队列,则数据库将需要实例恢复。

Oracle 数据库在以下情况下自动执行实例恢复:

单实例数据库或 Oracle RAC 数据库的所有实例失败后第一次打开数据库。这种形式的实例恢复也称为崩溃恢复。Oracle 数据库一起恢复所有已终止实例的联机重做线程。

只是Oracle RAC 数据库中的某些、但不是所有实例失败。实例恢复将由配置中的某个存活实例自动进行。

SMON 后台进程自动执行实例恢复并应用联机重做记录。而不需要任何用户干预。

Importance of Checkpoints for Instance Recovery

实例恢复使用检查点来确定必须将哪些更改应用到数据文件。检查点位置始终保证所有比其SCN低的检查点所对应的已提交更改都已保存到数据文件。

实例恢复期间,数据库必须应用检查点位置和重做线程结尾之间发生的更改。如图 13-5所示, 某些更改可能已经写入数据文件。但是,只有其SCN低于检查点位置的更改,才保证已被写到了磁盘上。

Instance Recovery Phases

实例恢复的第一阶段称为缓存恢复或前滚,这涉及将联机重做日志中记录的所有更改重新应用到数据文件。因为回滚数据记录在联机重做日志中,前滚也会重新生成相应的撤消段。

前滚会遍历各个必要的联机重做日志,以将数据库推进到一个更前的一致时间点。前滚之后,数据块包含记录在联机重做日志文件中的所有已提交更改。这些文件可能还包含未提交的更改,要么是在实例失败前保存到数据文件中的,或者是在缓存恢复过程中引入的。

前滚之后,任何未提交的更改必须被撤消。Oracle 数据库使用检查点位置,保证每个低于其SCN的已提交更改都已保存到磁盘。Oracle 数据库应用撤消块,以回滚数据块中在实例失败前写入的或缓存恢复过程中引入的未提交更改。这一阶段称为回滚或事务恢复。

Overview of Parameter Files

要启动数据库实例,Oracle 数据库必须读取一个(推荐的)服务器参数文件或一个(传统的)文本初始化参数文件。这些文件包含配置参数的列表。要手动创建一个数据库,必须用一个参数文件启动实例,然后发出CREATE DATABASE命令。因此,即使数据库本身还不存在,实例和参数文件即可以存在。

Initialization Parameters

初始化参数是会影响实例基本操作的配置参数。实例在启动时从一个文件读取初始化参数。Oracle 数据库提供了许多初始化参数,以优化其在不同环境中的操作。只需要显式设置几个参数,因为其默认值对大多数情况已经足够。

Functional Groups of Initialization Parameters

绝大多数的初始化参数属于以下功能分组之一:

名字条目参数,如文件或目录

限制设置参数,如进程、 数据库资源、或数据库本身等

影响容量的参数,如SGA的大小(这些参数也称为可变参数)

Basic and Advanced Initialization Parameters

初始化参数可以分为两组: 基本的和高级的。在大多数的情况下,你只需设置和调整大约 30个基本参数,就可以获得还不错的性能。基本参数设置的特性包括数据库名称、控制文件的位置、数据库的块大小、和撤消表空间等。

Server Parameter Files

服务器参数文件是Oracle 数据库用来管理初始化参数的一个存储库。服务器参数文件具有以下主要特征:

对于一个数据库,只存在一个服务器参数文件。此文件必须驻留在数据库主机上。

服务器参数文件只由 Oracle 数据库读取和写入,而不能由客户端应用程序读取和写入。

服务器参数文件是二进制的,且不能使用文本编辑器修改。

存储在服务器参数文件中的初始化参数是永久性的。数据库实例正在运行时对参数所做的任何更改,可以跨实例关闭和启动而存在。

服务器参数文件消除了为多个客户端应用程序维护多个文本初始化参数文件的需要。服务器参数文件最初可以从一个文本初始化参数文件,使用CREATE SPFILE 语句来生成。也可以直接由数据库配置助手创建。

Text Initialization Parameter Files

文本初始化参数文件是一个文本文件,其中包含初始化参数的列表。这是一种旧式参数文件,具有以下关键特征:

当启动或关闭数据库时,文本初始化参数文件必须驻留在连接到该数据库的客户端应用程序相同的主机上。

文本初始化参数文件是基于文本的,而非二进制。

Oracle 数据库可以读取,但不能写入文本初始化参数文件。若要更改参数值,必须使用文本编辑器手动更改文件。

通过ALTER SYSTEM对初始化参数值所做的更改,仅在当前实例中有效。您必须手动更新文本初始化参数文件,并重新启动实例以使更改生效。

Overview of Diagnostic Files

Oracle 数据库包括一个故障可诊断性基础设施,以预防、 检测、 诊断、并解决各种数据库问题。这些问题包括如代码错误、 元数据损坏、和客户数据损坏等严重错误。

这个先进的故障可诊断性基础设施的目标如下:

主动侦测问题

? 在检测到问题后,限制破坏和中断

? 减少问题诊断和解决时间

? 简化客户与 Oracle 支持的交互

Automatic Diagnostic Repository

自动诊断存储库 (ADR) 是一个基于文件的存储库,存储了如跟踪文件、 警报日志、和健康监测报告等数据库诊断数据。ADR的关键特征包括:

统一的路径结构

? 一致的诊断数据格式

? 统一的工具集

ADR 处于数据库之外,这使得即便物理数据库不可用时,也可以访问和管理ADR。在创建数据库之前,其实例就可以创建ADR。

Problems and Incidents

ADR 主动跟踪数据库中的严重错误问题。严重错误通常显示为内部错误,如ORA-600或其他严重错误。每个问题有一个问题键,它是一个描述此问题的文本字符串。

当一个问题出现多次时, ADR 为每次发生的错误创建一个带时间戳的事件。事件由一个数字事件id唯一标识。当事件发生时, ADR 发送一个事件警报到企业管理器中。对严重错误的诊断和解决,通常从一个事件警报开始。

因为一个问题可以在短时间内生成许多事件,ADR 在达到某些阈值时,将对事件生成应用防洪控制措施。防洪受控事件将生成一个警报日志条目,但不会生成事件转储。这样一来,ADR会通知您正在发生一个严重错误,而不会在系统中产生过量诊断数据。

ADR Structure

ADR base是 ADR 的根目录。ADR base可能包含多个ADR home,每个ADR home是一个Oracle 产品或组件实例的所有的诊断数据的根目录,包括跟踪、 转储、 和警报日志等等。

图说明了数据库实例的 ADR 目录层次结构。其他 Oracle 产品或组件(如 ASM 或 Oracle 网络服务)的ADR Home也可以存在于此层次结构中,在相同的 ADR base之下。

SELECT NAME, VALUE FROM V$DIAG_INFO;

Alert Log

每个数据库都有一个警报日志,它是一个XML文件,其中包含按时间排序的数据库信息和错误的日志。警报日志的内容包括如下:

所有的内部错误 (ORA-600)、 块损坏错误 (ORA-1578) 、和死锁错误 (ORA-60)

管理性操作,如 DDL 语句和STARTUP、SHUTDOWN、ARCHIVE LOG、和RECOVER等SQL*Plus命令

几个与共享服务器和调度器进程的功能有关的消息和错误

物化视图自动刷新过程中的错误

racle 数据库使用警报日志作为在企业管理器 GUI 中显示信息的一种替代。如果管理操作成功,则Oracle 数据库向警报日志写入一条带有时间戳的“completed”消息

Trace Files

跟踪文件是一个管理性文件,其中包含用于调查问题的诊断数据。此外,跟踪文件也可以为优化应用程序或实例提供指导。

Types of Trace Files

每个服务器和后台进程可以定期写入一个关联的跟踪文件。这些文件包括进程环境、 状态、 活动、和错误等信息。

SQL 跟踪设施还会为单个 SQL 语句创建跟踪文件,以提供性能信息。若要为客户端标识、 服务、 模块、 动作、 会话、 实例、或数据库等启用跟踪,必须执行DBMS_MONITOR 包中适当的过程,或使用 Oracle 企业管理器。

转储(dump)是一种特殊类型的跟踪文件。跟踪往往是诊断数据的连续输出,而转储通常是响应某个事件的一次性诊断数据输出。当事件发生时,数据库会将一个或多个转储写入为事件创建的目录。事件转储还在文件名称中包含了事件号。

Locations of Trace Files

ADR将跟踪文件存储在trace子目录中,跟踪文件的名称取决于其运行平台,并使用扩展名.trc。

通常,数据库后台进程的跟踪文件名称中包含 Oracle SID、 后台进程名称、和操作系统进程号。RECO进程的跟踪文件的一个示例是 mytest_reco_10355.trc。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25427762/viewspace-1061636/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25427762/viewspace-1061636/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值