数据库实例是一组用于管理数据库文件的内存结构。
Oracle 实例结构
SGA 用于以下几个目的:
-
维护由很多进程和线程同时访问的内部数据结构
-
缓存从磁盘中读取的数据块
-
缓冲重做数据,然后再将其写入联机重做日志文件
-
存储 SQL 执行计划
下图显示 Oracle 数据库实例的主要组件。
图 13-1 数据库实例
Description of "Figure 13-1 Database Instance"
另见:
-
"Overview of the System Global Area (SGA)"
-
"Overview of Background Processes"
数据库实例配置
Oracle数据库运行在单实例配置或Oracle实际应用程序集群(Oracle RAC)配置中。这些配置是互斥的。
在单实例配置中,数据库和实例之间存在一对一关系。在 Oracle RAC 中,数据库与实例之间存在一对多关系。
下图显示了这两种可能的数据库实例配置。
图 13-2 数据库实例的配置
Description of "Figure 13-2 Database Instance Configurations"
另见:
《Oracle Real Application Clusters Administration and Deployment Guide》关于 Oracle RAC 的特定信息
读/写实例和只读实例
每个数据库实例都是读/写或只读的。
默认的读/写数据库实例可以处理DML,并支持来自客户机应用程序的直接连接。相反,只读数据库实例可以处理查询,但不支持修改DML(更新、删除、插入和合并)或直接客户机连接。
在以前的版本中,所有数据库实例(除非访问了备用数据库)都是读/写的。从Oracle Database 12c Release 2(12.2)开始,只读和读/写实例可以在一个数据库中共存。这种配置对于同时查询和修改数据的并行SQL语句非常有用,因为读/写和只读实例都可以查询,而读/写实例可以修改。
与读/写实例不同,只读实例具有以下特征:
-
只能打开已被读/写实例打开的数据库
-
禁用许多后台进程,包括不需要的检查点和归档进程
-
可以挂载一个禁用的重做线程或一个没有任何 online redo log 的线程
要将实例指定为只读,请将INSTANCE_MODE初始化参数设置为READ_ONLY。参数的默认值是READ_WRITE。
另见:
-
"Overview of Background Processes"了解关于检查点和归档后台进程的更多信息
-
"Overview of the Online Redo Log"
-
《Oracle Database Reference》要了解有关INSTANCE_MODE初始化参数的更多信息
实例的持续时间
实例在使用 STARTUP 命令创建时开始,在终止时结束。
下表说明了一个数据库实例试图重新打开一个之前已关闭的数据库。
表 13-1 实例的持续时间
Statement | Explanation |
---|---|
SQL> STARTUP ORACLE instance started.Total System Global Area 468729856 bytes Fixed Size 1333556 bytes Variable Size 440403660 bytes Database Buffers 16777216 bytes Redo Buffers 10215424 bytes Database mounted. Database opened. |
STARTUP 命令创建一个实例,它会装载并打开数据库。
|
SQL> SELECT
TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS')
AS "Inst Start Time" FROM V$INSTANCE;Inst Start Time
------------------
JUN-18-14 13:14:48 |
此查询显示当前实例的启动时间。 |
SQL> SHUTDOWN IMMEDIATE |
在这一阶段, 唯一选择的是关闭实例,结束此实例的生命周期。
|
SQL> STARTUP Oracle instance started. . . . |
STARTUP 命令创建一个新的实例,装载并打开数据库。
|
SQL> SELECT
TO_CHAR(STARTUP_TIME, 'MON-DD-RR HH24:MI:SS')
AS "Inst Start Time" FROM V$INSTANCE;Inst Start Time
------------------
JUN-18-14 13:16:40 |
此查询显示当前实例的启动时间。不同的开始时间显示此实例不同于之前已关闭数据库的那个实例。
|
数据库实例标识符
多个数据库实例可以驻留在一个主机上。因此,必须有指定要访问哪个实例的方法。
Oracle Optimal Flexible Architecture (OFA)规则是一组配置指导原则,用于确保Oracle的安装组织良好。本节中的示例采用了OFA体系结构。
另见:
《Oracle Database Installation Guide for Linux》了解 OFA 的概述
Oracle Base 目录
Oracle Base 目录存储Oracle产品的二进制文件。
Oracle Base 目录是 Oracle 数据库安装所有者的数据库主目录。主机上可以安装许多Oracle数据库,也可以安装许多Oracle数据库软件。
下面的例子显示了操作系统用户帐户 Oracle 的 Base 基本目录::
/u01/app/oracle
在前面的路径中,/u01/是挂载点,/u01/app/是应用软件的子树。
另见:
《Oracle Database Installation Guide for Linux》有关Oracle Base的概述
Oracle Home 目录
Oracle Home 是 Oracle 数据库的软件位置。
必须为每次 Oracle 数据库软件的新安装指定一个新的 Oracle 主目录。默认情况下,Oracle主目录是Oracle Base (ORACLE_BASE)目录树中的派生目录。
您可以在同一台主机上,在同一个Oracle库中的不同Oracle主目录中,不止一次地安装这个版本,或者数据库软件的早期版本。不同版本、不同用户帐户拥有的多个数据库可以同时共存。
下面的示例显示了三个不同 Oracle Home 的完整路径名,它们都位于相同的 Oracle Base 目录 /u01/app/oracle/ 中:
/u01/app/oracle/product/12.1.0/dbhome_1
/u01/app/oracle/product/12.1.0/dbhome_2
/u01/app/oracle/product/18.0.0/dbhome_1
Oracle Base (/u01/app/oracle/)后面的路径名部分包括产品发布号(例如12.1.0)和Oracle Home相对应的目录(例如dbhome_1)。/u01/app/oracle/product/12.1.0/目录包含两个单独的Oracle Home: dbhome_1和dbhome_2。
从 Oracle Database 18c 开始,您可以创建一个只读 Oracle Home 作为软件映像。只读 Oracle Home 存储二进制文件等静态文件。Oracle Base Home (ORACLE_BASE_HOME)目录位于ORACLE_BASE/homes/home_name中,它存储特定于 Oracle Home 的动态文件。Oracle Base 配置目录(ORACLE_BASE_CONFIG)存储特定于实例的动态文件,它由 Oracle Base 中的所有 Oracle Base 共享。
在下面的例子中,第一个路径是只读 Oracle Home,第二个路径是这个 Oracle Home 的 Oracle Base Home:
/u01/app/oracle/product/18.0.0/ro_dbhome_1
/u01/app/oracle/homes/ro_dbhome_1
另见:
《Oracle Database Installation Guide for Linux》有关 Oracle Home 的概述
Oracle 系统标识符 (SID)
系统标识符 (SID) 是特定主机上的某个 Oracle 数据库实例的唯一名称。
传统的读写 Oracle Home 包含特定于实例的文件。但是,当 Oracle Home 是只读时,特定于实例的文件单独存储在 Oracle Base 中。在这两种情况下,名称包含SID的文件都位于Oracle基本配置目录(ORACLE_BASE_CONFIG)的dbs子目录中。由于这种分离,用户可以使用现有只读 Oracle Home 中的软件创建数据库,然后使用新的只读Oracle Home 中的软件启动该数据库的实例。
另见:
-
"Service Names"
-
《Oracle Database Administrator’s Guide》了解如何指定 Oracle SID
实例启动和关闭概述
数据库实例提供了用户对数据库的访问。实例和数据库可以处于不同的状态。
实例和数据库启动概述
典型的,您手动启动一个实例,然后装载并打开数据库,使其对用户可用。您可以使用 SQL*Plus 的 STARTUP 命令、 Oracle 企业管理器 (企业管理器) 、 或 SRVCTL 实用程序来执行这些步骤。
使用Oracle Net开启数据库实例,以下情况必须属实:
-
数据库被一个Oracle Net监听器静态注册。
-
您的客户机使用SYSDBA特权连接到数据库。
监听器创建一个专用服务器,该服务器可以启动数据库实例。
Figure 13-3 Instance and Database Startup Sequence
Description of "Figure 13-3 Instance and Database Startup Sequence"
当数据库从关闭状态推进到打开状态时,会经历以下几个阶段:
表 13-2 实例启动步骤
Phase | Mount 状态 | 描述 | 详见 |
---|---|---|---|
1 | 启动实例,但未装载数据库 |
实例已启动,但尚未与某个数据库相关联。 |
"How an Instance Is Started" |
2 | 装载数据库 |
实例已启动, 并且通过读取控制文件,来与数据库相关联。数据库对用户是关闭的。 |
"How a Database Is Mounted" |
3 | 打开数据库 |
实例已启动,并与一个打开的数据库相关联。授权的用户可以访问数据文件中包含的数据。
|
"How a Database Is Opened" |
另见:
-
"The Oracle Net Listener"
-
"Overview of Control Files"
-
《Oracle Database Administrator’s Guide》了解如何启动实例
-
《Oracle Database Administrator’s Guide》了解如何使用 SRVCTL
具有管理员权限的连接
-
用户的操作系统权限使其能够使用管理员权限来连接。
- 用户被授予了特殊的系统权限, 数据库通过网络使用密码文件对数据库管理员进行身份验证。
如下特殊的系统权限允许进入数据库实例,尽管数据库没有打开:
-
SYSDBA
-
SYSOPER
-
SYSBACKUP
-
SYSDG
-
SYSKM
对上述特权的控制位于数据库本身之外。当您使用SYSDBA系统特权连接到数据库时,您处于SYS拥有的模式中。当您作为SYSOPER连接时,您处于公共模式中。SYSOPER特权是SYSDBA特权的子集。
另见:
-
"SYS and SYSTEM Schemas"
-
"Overview of Database Security"了解数据库管理员的密码文件和身份验证
-
《Oracle Database Security Guide》学习管理管理权限
-
《Oracle Database Administrator’s Guide》了解系统特权
-
《Oracle Database Installation Guide》了解有关操作系统特权组的更多信息
实例是如何启动的
当 Oracle 数据库启动一个实例时,它是分阶段进行的。
各阶段如下:
- 在特定于平台的默认位置搜索服务器参数文件, 如果未找到 ,则搜索一个初始化参数文本文件(为 STARTUP 指定 SPFILE 或 PFILE 参数将覆盖该默认行为)
-
读取参数文件,以确定初始化参数值
-
基于初始化参数设置, 分配 SGA
-
启动 Oracle 后台进程
- 打开警报日志和跟踪文件,并以有效的参数语法将所有显式参数设置写入警报日志中
另见:
《Oracle Database Administrator’s Guide》了解如何使用服务器参数文件来管理初始化参数
数据库是如何装载的
由实例装载数据库,以将数据库与该实例相关联。
在一个已装载的数据库中,该数据库是关闭的,且只有数据库管理员可以访问。管理员可以在完成某些特定的维护操作时保持数据库关闭。 但是, 数据库此时还不可用于常规操作。
- 如果装入数据库的第一个实例的 CLUSTER_DATABASE 为 false (默认) ,则仅此实例可以装入数据库。
- 如果第一个实例的 CLUSTER_DATABASE 为 true,则其他实例在其 CLUSTER_DATABASE 参数也设置为 true 时可以装载数据库。可以装载数据库的实例数量决定于在创建数据库时指定的预定最大值。
另见:
-
《Oracle Database Administrator’s Guide》了解如何装载数据库
-
《Oracle Real Application Clusters Administration and Deployment Guide》关于如何将单个数据库和多个实例一起使用的详细信息
数据库是如何打开的
打开一个已装载的数据库,使其可用于常规的数据库操作。
在打开数据库时,Oracle 数据库执行下列操作:
-
打开除撤消表空间之外的其他的表空间中的联机数据文件
如果在之前数据库关闭时,某个表空间是脱机的,则该表空间及其相应的数据文件, 在重新打开数据库时,仍将处于脱机状态。
-
获取一个撤消表空间
如果存在多个撤消表空间,则由 UNDO_TABLESPACE 初始化参数指定要使用的撤消表空间。 如果尚未设置此参数,则会选择第一个可用的撤消表空间。 -
打开联机重做日志文件
另见:
-
"Online and Offline Tablespaces"
-
"Data Repair"
只读模式
-
数据文件可以被脱机和联机。但是,你不能将永久表空间脱机。
-
脱机数据文件和表空间是可以恢复的
-
控制文件仍然可用,以更新有关数据库的状态。
- 使用 CREATE TEMPORARY TABLESPACE 语句创建的临时表空间是可读/写的。
-
可以继续往操作系统写入审计文件、跟踪文件、 和警报日志。
另见:
-
《Oracle Database Administrator’s Guide》了解如何在只读模式下打开数据库
-
《Oracle Data Guard Concepts and Administration》
数据文件检查
另见:
"Backup and Recovery"
数据库和实例关闭概述
Figure 13-4 Instance and Database Shutdown Sequence
Description of "Figure 13-4 Instance and Database Shutdown Sequence"
当一致地关闭打开的数据库时, Oracle 数据库自动执行以下步骤。
Table 13-3 Steps in Consistent Shutdown
Phase | Mount 状态 | 描述 | 详见 |
---|---|---|---|
1 | 数据库关闭 |
数据库仍处于装载状态,但数据文件和联机重做日志文件已被关闭。 |
"How a Database Is Closed" |
2 | 数据库卸载 |
实例仍处于启动状态,但已不再与数据库的控制文件相关联。 |
"How a Database Is Unmounted" |
3 | 数据库实例关闭 |
数据库实例不再处于启动状态。 |
"How an Instance Is Shut Down" |
另见:
《Oracle Database Administrator’s Guide》了解如何关闭数据库
关闭模式
下表总结了在各种不同关闭模式下的行为。
表 13-4 数据库关闭模式
数据库行为 | ABORT | IMMEDIATE | TRANSACTIONAL | NORMAL |
---|---|---|---|---|
允许新用户连接 |
否 |
否 |
否 |
否 |
将等待,直到当前会话结束 |
否 |
否 |
否 |
是 |
将等待,直到当前事务结束 |
否 |
否 |
是 |
是 |
执行一个检查点,并关闭打开的文件 |
否 |
是 |
是 |
是 |
可能的几种 SHUTDOWN 语句选项是:
-
SHUTDOWN ABORT
此模式用于紧急情况, 如其他形式的关闭方式都未能成功时。这种模式的关闭是最快的。但是,随后打开该数据库可能时间会显著增加,因为必须执行实例恢复以使数据文件一致。因为 SHUTDOWN ABORT 不对打开的数据文件执行检查点操作,所以在重新打开数据库之前,必须进行实例恢复。 对于其他的关闭模式,在数据库重新打开之前不需要进行实例恢复。 -
SHUTDOWN IMMEDIATE
这种模式通常是除 SHUTDOWN ABORT 之外最快的关闭模式了。Oracle 数据库终止任何正在执行的 SQL 语句,并断开用户连接。 所有活动事务都将终止, 并回滚所有未提交的更改。 -
SHUTDOWN TRANSACTIONAL
这种模式可以防止用户启动新事务,但在关闭之前会等待所有的当前事务完成。这种模式可能会花费相当长的时间,这取决于当前事务的特征。 -
SHUTDOWN NORMAL
这是默认的关闭模式。 在关闭之前数据库会等待所有连接的用户断开连接。
另见:
-
《Oracle Database Administrator’s Guide》了解不同的关闭模式
-
《SQL*Plus User's Guide and Reference》了解 SHUTDOWN 命令
数据库是如何关闭的
正常停机过程中是如何关闭数据库的
当数据库作为 SHUTDOWN 的一部分(不使用 ABORT 选项)而关闭时,Oracle 数据库将 SGA 中的数据写入数据文件和联机重做日志文件。
之后,数据库关闭联机数据文件和联机重做日志文件。 脱机表空间中的任何脱机数据文件是本来就是已关闭的。当重新打开数据库时,任何本来脱机的空间仍然保持脱机状态。
非正常关机过程中是如何关闭数据库
非正常关机时,Oracle 数据库不会将 SGA 缓冲区中的数据写入数据文件和重做日志文件。随后重新打开数据库需要实例恢复,这将由 Oracle 数据库自动执行。
数据库是如何卸载的
数据库关闭之后,Oracle 将数据库卸载,并解除与实例的关联。
实例是如何关闭的
在某些情况下,进程清理本身可能会遇到错误,这可能导致进程监视器(PMON)或实例的终止。动态初始化参数INSTANCE_ABORT_DELAY_TIME指定延迟内部生成的实例失败的时间。这种延迟给了你一个回应的机会。当延迟终止启动时,数据库将向警报日志写入一条消息。在某些情况下,通过允许隔离某些数据库资源,实例可以避免终止。
另见:
-
《Oracle Database Administrator’s Guide》关于关闭数据库的更详细的信息
-
《Oracle Database Reference》了解有关 INSTANCE_ABORT_DELAY_TIME 初始化参数的更多信息
检查点概述
术语具有如下相关含义:
- 指示检查点位置的一个数据结构,该位置是在重做流中实例恢复必须开始处的 SCN检查点位置是由数据库缓冲区高速缓存中最旧的脏缓冲区来确定的。检查点位置作为一个指向重做流的指针,并存储在控制文件中, 和在每个数据文件头中。
-
将数据库缓存中已修改的数据库缓冲区写入到磁盘中
另见:
"System Change Numbers (SCNs)"
检查点的目的
Oracle数据库使用检查点来实现多个目标。
目标包括:
-
减少实例失败或介质故障情况下恢复所需的时间
-
确保数据库定期将缓冲区缓存中的脏缓冲区写入磁盘
-
确保数据库在一致关闭过程中将所有已提交的数据写入磁盘
Oracle 数据库何时启动检查点
检查点进程(CKPT)负责将检查点写入数据文件头和控制文件。
-
线程检查点
数据库将某个确定目标之前、 被某个特定的重做线程所修改的所有缓冲区写入磁盘。 数据库中所有实例的线程检查点的集合即为数据库检查点。线程检查点在下列情况下发生:-
一致的数据库关闭
-
ALTER SYSTEM CHECKPOINT 语句
-
联机重做日志切换
-
ALTER DATABASE BEGIN BACKUP 语句
-
-
表空间和数据文件的检查点
数据库将某个确定目标之前、 被重做线程所修改的所有缓冲区写入磁盘。表空间检查点是一组数据文件检查点,每个数据文件检查点对表空间中的某个数据文件做检查点操作。这些检查点发生在很多情况下, 包括将一个表空间变为只读、将表空间脱机、 收缩数据文件、 或执行 ALTER TABLESPACE BEGIN BACKUP 等。 -
增量检查点
增量检查点是一种线程检查点, 部分原因是为了避免在联机重做日志切换时写入大量的块。 DBWn 至少每隔三秒会进行检查以确定是否有工作要做。 当 DBWn 将脏缓冲区写入磁盘时, 它会向前推进检查点位置,导致 CKPT 将检查点位置写入控制文件, 而不是数据文件头。
另见:
-
"Checkpoint Process (CKPT)"
-
《Oracle Real Application Clusters Administration and Deployment Guide》了解在 Oracle RAC 中的全局检查点信息
实例恢复概述
实例恢复是将联机重做日志中的记录应用到数据文件, 以重建最近检查点之后所做更改的过程。
当管理员尝试打开一个之前以不一致方式关闭的数据库时,会自动执行实例恢复。
实例恢复的目的
- 由某事务已提交的数据块更新还未写入数据文件,而仅写入了联机重做日志中。 这些更改必须重新应用到数据库。
- 数据文件包含实例失败时尚未提交的更改。这些更改必须回滚,以确保事务一致性。
另见:
-
"Database Writer Process (DBW)"和"Database Buffer Cache"
-
"Introduction to Data Concurrency and Consistency"
Oracle 数据库何时执行实例恢复
是否需要实例恢复取决于重做线程的状态。
Oracle 数据库在以下情况下自动执行实例恢复:
- 单实例数据库或 Oracle RAC 数据库的所有实例失败后第一次打开数据库。这种形式的实例恢复也称为崩溃恢复。 Oracle 数据库一起恢复所有已终止实例的联机重做线程。
- 只是 Oracle RAC 数据库中的某些、 但不是所有实例失败。实例恢复将由配置中的某个存活实例自动进行。
另见:
-
"System Monitor Process (SMON)"
-
《Oracle Real Application Clusters Administration and Deployment Guide》了解在 Oracle RAC 数据库中的实例恢复
实例恢复检查点的重要性
下图描述了联机重做日志中的重做线程。
图 13-5 联机重做日志中的检查点位置
Description of "Figure 13-5 Checkpoint Position in Online Redo Log"
另见:
《Oracle Database Performance Tuning Guide》了解如何限制实例恢复时间
实例恢复阶段
下图说明了前滚和回滚,这是恢复数据库实例失败的两个必要步骤。
图 13-6 基本的实例恢复步骤:前滚和回滚
Description of "Figure 13-6 Basic Instance Recovery Steps: Rolling Forward and Rolling Back"
另见:
-
"Undo Segments"了解撤消数据的更多信息
-
《Oracle Database Performance Tuning Guide》关于实例恢复机制和调整的讨论
参数文件的概述
初始化参数
初始化参数是会影响实例基本操作的配置参数。实例在启动时从一个文件读取初始化参数。
Oracle 数据库提供了许多初始化参数,以优化其在不同环境中的操作。只需要显式设置几个参数,因为其默认值通常情况下是足够的
初始化参数的功能分组
初始化参数分为不同的功能组。
大多数初始化参数属于以下一组:
-
名字条目参数,如文件或目录
-
限制设置参数,如进程、数据库资源、或数据库本身等
-
影响容量的参数,如 SGA 的大小(这些参数也称为可变参数)
基本和高级的初始化参数
初始化参数可以分为两组:基本的和高级的。
通常,你只需设置和调整大约 30 个基本参数,就可以获得还不错的性能。基本参数设置的特性包括数据库名称、控制文件的位置、数据库的块大小和撤消表空间等。
另见:
-
"Tools for Database Installation and Configuration"
-
《Oracle Database Administrator’s Guide》了解如何指定初始化参数
-
《Oracle Database Reference》关于初始化参数类型的说明
-
《Oracle Database Reference》关于的 V$PARAMETER 和《SQL*Plus User's Guide and Reference》关于 SHOW PARAMETER 的语法
服务器参数文件
服务器参数文件是初始化参数的一个存储库。
-
只有Oracle数据库能读写服务器参数文件。
- 对于一个数据库, 只存在一个服务器参数文件。此文件必须驻留在数据库主机上。
-
务器参数文件是二进制的,且不能使用文本编辑器修改。
- 存储在服务器参数文件中的初始化参数是永久性的。数据库实例正在运行时对参数所做的任何更改, 可以跨实例关闭和启动而存在。
另见:
-
《Oracle Database Administrator’s Guide》了解服务器参数文件的更多信息
-
《Oracle Database SQL Language Reference》了解 CREATE SPFILE 命令
文本初始化参数文件
文本初始化参数文件是一个文本文件,其中包含初始化参数的列表。
- 当启动或关闭数据库时,文本初始化参数文件必须驻留在连接到该数据库的客户端应用程序相同的主机上。
-
文本初始化参数文件是基于文本的,而非二进制。
- Oracle 数据库可以读取,但不能写入文本初始化参数文件。若要更改参数值,必须使用文本编辑器手动更改文件。
- 通过 ALTER SYSTEM 对初始化参数值所做的更改, 仅在当前实例中有效。您必须手动更新文本初始化参数文件,并重新启动实例以使更改生效。
db_name=sample
control_files=/disk1/oradata/sample_cf.dbf
db_block_size=8192
open_cursors=52
undo_management=auto
shared_pool_size=280M
pga_aggregate_target=29M
.
.
.
图 13-7 多个初始化参数文件
Description of "Figure 13-7 Multiple Initialization Parameter Files"
另见:
-
《Oracle Database Administrator’s Guide》了解有关文本初始化参数文件的更多信息
-
《Oracle Database SQL Language Reference》了解 CREATE PFILE 命令
修改初始化参数的值
下表总结了的其中的差异。
表 13-5 静态和动态初始化参数
特征 | 静态 | 动态 |
---|---|---|
需要修改(文本或服务器) 参数文件 |
是 |
否 |
在设置生效之前数据库实例需要重启 |
是 |
否 |
在《Oracle Database Reference》 初始化参数条目中被描述为"可修改" |
否 |
是 |
仅对数据库或实例可修改 |
是 |
否 |
-
SCOPE=MEMORY
更改只应用于数据库实例。如果数据库关闭并重新启动,更改将不会保留。 -
SCOPE=SPFILE
更改应用于服务器参数文件,但不会影响当前实例。因此,所做的更改不会生效,直到重新启动该实例。
-
SCOPE=BOTH
Oracle数据库将更改写入内存和服务器参数文件。当数据库使用服务器参数文件时,这是默认的范围
另见:
-
"Locale-Specific Settings"
-
《Oracle Database Administrator’s Guide》了解如何更改初始化参数设置
-
《Oracle Database Reference》有关所有初始化参数的说明
-
《Oracle Database SQL Language Reference》关于 ALTER SYSTEM 的语法和语义
诊断文件概述
这个先进的故障可诊断性基础设施的目标如下:
-
主动侦测问题
-
在检测到问题后,限制破坏和中断
-
减少问题诊断和解决时间
-
通过支持对跟踪文件进行分区、允许用户定义每个块的大小和要保留的最大块数,以及在达到用户指定的磁盘空间限制后禁用跟踪,从而改进了可管理性
-
简化客户与 Oracle 支持的交互
另见:
《Oracle Database Administrator’s Guide》学习如何管理CDB中的诊断文件
自动诊断存储库
自动诊断存储库(ADR)是一个基于文件的存储库,存储了如跟踪文件、警报日志和健康监测报告等数据库诊断数据。
ADR 的关键特征包括:
-
统一的路径结构
-
一致的诊断数据格式
-
统一的工具集
问题和事件
ADR 主动跟踪数据库中的严重错误问题。
另见:
《Oracle Database Administrator’s Guide》有关故障可诊断性基础设施的详细信息
ADR 结构
ADR base 是 ADR 的根目录。
图 13-8 Oracle 数据库实例的 ADR 目录结构
Description of "Figure 13-8 ADR Directory Structure for an Oracle Database Instance"
例 13-1 创建 ADR
% setenv ORACLE_SID osi
% echo "DB_NAME=dbn" > init.ora
% sqlplus / as sysdba
.
.
.
Connected to an idle instance.SQL> STARTUP NOMOUNT PFILE="./init.ora"
ORACLE instance started.Total System Global Area 146472960 bytes
Fixed Size 1317424 bytes
Variable Size 92276176 bytes
Database Buffers 50331648 bytes
Redo Buffers 2547712 bytesSQL> COL NAME FORMAT a21
SQL> COL VALUE FORMAT a60
SQL> SELECT NAME, VALUE FROM V$DIAG_INFO;NAME VALUE
--------------------- --------------------------------------------------------
Diag Enabled TRUE
ADR Base /d1/3910926111/oracle/log
ADR Home /d1/3910926111/oracle/log/diag/rdbms/dbn/osi
Diag Trace /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace
Diag Alert /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/alert
Diag Incident /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/incident
Diag Cdump /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/cdump
Health Monitor /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/hm
Default Trace File /d1/3910926111/oracle/log ... osi/trace/osi_ora_6825.trc
Active Problem Count 0
Active Incident Count 0
警报日志
警报日志的内容包括如下:
- 所有的内部错误 (ORA-600)、块损坏错误 (ORA-1578) 、和死锁错误 (ORA-60)
- 管理性操作,如 DDL 语句和 STARTUP、SHUTDOWN、ARCHIVE LOG 和 RECOVER 等 SQL*Plus 命令
-
几个与共享服务器和调度器进程的功能有关的消息和错误
-
物化视图自动刷新过程中的错误
Fri Nov 02 12:41:58 2014
SMP system found. enable_NUMA_support disabled (FALSE)
Starting ORACLE instance (normal)
CLI notifier numLatches:3 maxDescs:189
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Initial number of CPU is 2
Number of processor cores in the system is 2
Number of processor sockets in the system is 2
Shared memory segment for instance monitoring created
Picked latch-free SCN scheme 3
Using LOG_ARCHIVE_DEST_1 parameter default value as /disk1/oracle/dbs/arch
Autotune of undo retention is turned on.
IMODE=BR
ILAT =10
LICENSE_MAX_USERS = 0
SYS auditing is disabled
NOTE: remote asm mode is local (mode 0x1; from cluster type)
Starting up:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Advanced Analytics and Real Application Testing options.
.
.
.
Using parameter settings in client-side pfile
System parameters with nondefault values:processes = 100sessions = 172
如例 13-1 所示,通过查询 V$DIAG_INFO 来定位警报日志。
DDL 日志
DDL日志具有与告警日志相同的格式和基本行为,但只包含DDL语句和详细信息。数据库将DDL信息写入自己的文件,以减少告警日志中的混乱。
DDL日志记录DDL文本,可以选择添加补充信息。每个DDL语句都有一条日志记录。DDL日志存储在ADR home的 log/ddl 子目录中。
跟踪文件
跟踪文件是一个文件,其中包含用于调查问题的诊断数据。此外,跟踪文件也可以为优化应用程序或实例提供指导。
另见:
"Performance and Tuning"
跟踪文件的类型
SQL 跟踪设施还会为单个 SQL 语句创建跟踪文件,以提供性能信息。可以通过各种方式启用对客户机标识符、服务、模块、操作、会话、实例或数据库的跟踪。例如,您可以在 DBMS_MONITOR 包或 set event 中执行适当的过程。
另见:
-
"Session Control Statements"
-
《Oracle Database Administrator’s Guide》了解跟踪文件、 转储和核心文件
-
《Oracle Database SQL Tuning Guide》了解应用程序跟踪
跟踪文件的位置
ADR 将跟踪文件存储在 trace 子目录中。跟踪文件的名称取决于其运行平台,并使用扩展名.trc。
另见:
-
"Figure 13-8"
-
《Oracle Database Administrator’s Guide》了解如何查找跟踪文件
跟踪文件分割
当跟踪文件大小受到限制时,数据库可以自动将其最多分割为五个段。段是独立的文件,它们具有与活动跟踪文件相同的名称,但是附加了段号,如ora_1234_2.trc中所示。
每个段通常是MAX_DUMP_FILE_SIZE设置的限制的20%。当所有段的合并大小超过限制时,数据库将删除最老的段(尽管从来没有删除第一个段,它可能包含关于进程初始状态的相关信息),然后创建一个新的空段。
另见:
《Oracle Database Administrator’s Guide》学习如何控制跟踪文件的大小
诊断转储
诊断转储文件是一种特殊类型的跟踪文件,它包含关于状态或结构的详细时间点信息。
跟踪往往是诊断数据的连续输出。相反,转储通常是响应事件的诊断数据的一次性输出。
跟踪转储和事故
大多数转储都是由事故引起的。
当发生事故时,数据库将一个或多个转储写入为该事件创建的事故目录。事故转储还包含文件名中的事故号。
在事故创建期间,应用程序可以将堆或系统状态转储作为操作的一部分。在这种情况下,数据库将转储名称附加到事故文件名,而不是默认的跟踪文件名。例如,由于进程中的事故,数据库创建文件prod_ora_90348.trc。事故中的转储生成文件prod_ora_90348_incident_id。,其中incident_id是事件的数字ID。作为事故的一部分创建的堆转储操作生成堆转储文件prod_ora_90348_incident_id_dump_id。其中dump_id是跟踪转储的数字ID。