18. 数据库管理员的概念
18.1. 数据库管理员的职责
数据库管理员(DBA)的主要责任是使企业数据对其用户可用。DBA必须与开发人员紧密合作,确保他们的应用程序有效地使用数据库,并与系统管理员合作,确保物理资源充足且使用高效。Oracle DBA负责了解Oracle数据库架构以及数据库的工作原理。DBA可以预期执行以下任务:
■ 安装、升级和打补丁Oracle数据库软件
■ 设计数据库,包括确定需求、创建逻辑设计(概念模型)和物理数据库设计
■ 创建Oracle数据库
■ 开发和测试备份和恢复策略,定期备份Oracle数据库,并在发生故障时恢复
■ 配置网络环境以使客户端能够连接到数据库
■ 启动和关闭数据库
■ 管理数据库的存储
■ 管理用户和安全性
■ 管理数据库对象,如表、索引和视图
■ 监控和调整数据库性能
■ 调查、收集诊断数据,并报告给Oracle支持服务任何关键数据库错误
■ 评估和测试新的数据库功能
上述任务以及许多其他任务在《Oracle Database 2 Day DBA》和《Oracle Database Administrator's Guide》中有描述。
用户类型以及他们的角色和职责取决于数据库环境。一个小数据库可能只有一个DBA。一个非常大的数据库可能会将DBA职责分配给几个专家,例如,安全员、备份操作员和应用管理员。
18.2. 数据库管理员使用的工具
Oracle为管理数据库提供了几种工具。本节描述了一些常用的工具:
■ Oracle Enterprise Manager
■ SQL*Plus
■ 数据库安装和配置工具
■ Oracle Net配置和管理工作的工具
■ 数据移动和分析工具
18.2.1. Oracle 企业管理
Oracle Enterprise Manager(企业经理)是一个系统管理工具,提供对数据库环境的集中管理。结合图形控制台、Oracle管理服务器、Oracle智能代理、通用服务和行政工具,企业经理为Oracle产品提供了一个全面的系统管理平台。基于Web的企业经理数据库控制(Database Control)是管理Oracle数据库的主要工具。它与Oracle数据库一起安装。您可以使用数据库控制来执行诸如以下管理任务:
■ 诊断、修改和调整数据库
■ 将相关目标分组,以便于管理任务,与其他管理员共享任务,并在不同时间间隔安排任务
■ 为Oracle home配置和管理Oracle Net服务(见第16-5页的“Oracle网络架构概述”)
■ 启动集成的Oracle和第三方工具
下图显示了数据库控制的数据库主页。页面顶部的子页面链接使您能够访问性能、可用性和其他数据库管理页面。数据库主页的子部分提供有关数据库环境和状态的信息。
下图显示了企业经理的基本架构。管理存储库存储在数据库内。代理和管理服务都运行在数据库主机上。您可以从任何可以安全连接到管理服务的Web浏览器运行数据库控制台。
18.2.2. SQL*Plus
SQL*Plus是每个Oracle数据库安装中包含的交互式和批处理查询工具。它具有命令行用户界面,在连接到数据库时充当客户端。
SQLPlus有自己的命令和环境。它使您能够输入和执行SQL、PL/SQL、SQLPlus和操作系统命令来执行任务,例如:
■ 格式化查询结果,对查询结果进行计算、存储和打印
■ 检查表和对象定义
■ 开发和运行批处理脚本
■ 管理数据库
您可以使用SQL*Plus以交互方式生成报告,作为批处理进程生成报告,并将结果输出到文本文件、屏幕或HTML文件,以便在互联网上浏览。您可以使用HTML输出功能动态生成报告。
18.2.3. 数据库安装和配置工具
Oracle提供了几种工具来简化安装和配置Oracle数据库软件的任务。这些工具包括:
■ Oracle Universal Installer (OUI)
OUI是一个图形用户界面实用程序,使您能够查看、安装和卸载Oracle数据库软件。在线帮助可指导您完成安装过程。请参阅《Oracle Database Installation Guide》了解如何安装Oracle数据库软件。
■ Database Upgrade Assistant (DBUA)
DBUA交互式地引导您完成数据库升级,并为新版本配置数据库。DBUA通过执行通常手动执行的所有任务来自动化升级过程。DBUA为表空间和在线重做日志等配置选项提供建议。请参阅《Oracle Database 2 Day DBA》了解如何使用DBUA升级数据库。
■ Database Configuration Assistant (DBCA)
DBCA提供了一个图形界面和引导工作流程,用于创建和配置数据库。这个工具使您能够根据Oracle提供的模板创建数据库,或者创建自己的数据库和模板。请参阅《Oracle Database Administrator's Guide》了解如何使用DBCA创建数据库。
18.2.4. Oracle Net配置和管理工作的工具
Oracle Net Services在分布式、异构计算环境中提供全企业的连接解决方案。Oracle Net是Oracle Net Services的一个组件,它支持从客户端应用程序到数据库的网络会话。您可以使用以下工具来配置和管理工作:
■ Oracle Net Manager
此工具使您能够为本地客户端或服务器主机上的Oracle home配置Oracle Net Services。您可以使用Oracle Net Manager配置命名、命名方法、配置文件和监听器。您可以使用Oracle Enterprise Manager控制台启动Oracle Net Manager,或者将其作为独立应用程序启动。
■ Oracle Net Configuration Assistant
此工具在软件安装期间自动运行。该助理使您能够在安装期间配置基本网络组件,包括监听器名称和协议地址、命名方法、tnsnames.ora文件中的网络服务名称以及目录服务器的使用。
■ Listener Control Utility
监听器控制实用程序使您能够配置监听器以接收客户端连接(见第16-6页的“Oracle Net监听器”)。您可以通过企业经理或作为独立命令行应用程序访问该实用程序。
■ Oracle Connection Manager Control Utility
这个命令行实用程序使您能够管理工作站,这是一个路由器,客户端连接请求可以发送到下一个跳转或直接发送到数据库。您可以使用实用程序命令在一台或多台Oracle Connection Managers上执行基本管理功能。此外,您还可以查看和更改参数设置。
18.2.5. 数据移动和分析工具
Oracle数据库包括多个用于数据库移动和分析的实用工具。例如,您可以使用数据库实用工具来:
■ 从操作系统文件加载数据到Oracle数据库表中,如第18-5页的“SQL*Loader”中所解释的
■ 将数据和元数据从一个数据库移动到另一个数据库,如第18-7页的“Oracle Data Pump Export和Import”中所解释的
■ 通过SQL接口查询重做日志文件,如第18-8页的“Oracle LogMiner”中所解释的
■ 管理Oracle数据库诊断数据,如第18-8页的“ADR Command Interpreter (ADRCI)”中所解释的
其他任务包括使用DBVERIFY在离线数据库或数据文件上执行物理数据结构完整性检查,或者使用DBNEWID实用工具更改运营数据库的数据库标识符(DBID)或数据库名称。
18.2.5.1. SQL*Loader
SQLLoader从外部文件(称为数据文件)加载数据到数据库表中。它有一个强大的数据解析引擎,对数据文件中数据的格式几乎没有限制。您可以使用SQLLoader执行以下任务:
■ 将多个数据文件中的数据加载到多个表中
您将待加载的数据存储在SQLLoader数据文件中。SQLLoader控制文件是一个文本文件,包含SQL*Loader用于确定在哪里找到数据、如何解析和解释数据、在哪里插入数据等的DDL指令。
注意:SQL*Loader数据文件和控制文件与Oracle数据库数据文件和控制文件无关。
■ 控制加载操作的各个方面
例如,您可以有选择地加载数据,指定数据字符集(见第19-9页的“字符集”),使用SQL函数操作数据,在指定列生成唯一的顺序键值等。您还可以生成复杂的错误报告。
■ 使用传统或直接路径加载
传统路径加载执行SQL INSERT语句来填充表。相比之下,直接路径加载通过格式化数据块并将它们直接写入数据库文件来消除大部分数据库开销。直接写入操作在高位标记之上的数据块上进行,并直接写入磁盘,绕过数据库缓冲区缓存。直接读取直接从磁盘读取到PGA,再次绕过缓冲区缓存。
一个典型的SQLLoader会话接收一个SQLLoader控制文件和一个或多个数据文件作为输入。输出包括一个Oracle数据库、一个日志文件、一个坏文件,以及可能的丢弃文件。图18-1说明了典型的SQL*Loader会话的流程。
18.2.5.2. Oracle Data Pump 导出和导入
Oracle Data Pump允许高速将数据和元数据从一个数据库移动到另一个数据库。这项技术是以下Oracle数据库数据移动实用工具的基础:
■ Data Pump导出(Export)
导出是一个实用工具,用于将数据和元数据卸载到一组称为转储文件集的操作系统文件中。转储文件集由一个或多个包含表数据、数据库对象元数据和控制信息的二进制文件组成。
■ Data Pump导入(Import)
导入是一个实用工具,用于将导出的转储文件集加载到数据库中。您还可以使用导入工具直接从源数据库加载目标数据库,无需中间文件,这允许导出和导入操作同时运行,从而最小化总耗时。
Oracle Data Pump由以下不同部分组成:
■ 命令行客户端expdp和impdp
这些客户端调用DBMS_DATAPUMP包来执行Oracle Data Pump操作(见第8-6页的“PL/SQL包”)。
■ DBMS_DATAPUMP PL/SQL包,也称为Data Pump API
这个API提供高速导入和导出功能。
■ DBMS_METADATA PL/SQL包,也称为元数据API
这个API以XML格式存储对象定义,被所有加载和卸载元数据的过程使用。
图18-2显示了Oracle Data Pump如何与SQLLoader和外部表集成。如图所示,SQLLoader与外部表API和Data Pump API集成,以将数据加载到外部表中(见第2-16页的“外部表”)。数据库控制台和可传输表空间等客户端可以使用Oracle Data Pump基础设施。
18.2.5.3. Oracle LogMiner
Oracle LogMiner允许您通过SQL界面查询重做日志文件。重做日志文件中包含的数据的潜在用途包括:
■ 确定数据库逻辑损坏(例如应用程序层面的错误)可能开始的时间点
■ 检测用户错误
■ 确定执行事务级别细粒度恢复所需采取的操作
■ 通过趋势分析确定哪些表收到最多的更新和插入操作
■ 通过LogMiner全面的关系到重做日志文件的界面,分析系统行为和审计数据库使用情况
LogMiner可以通过命令行界面或Oracle LogMiner Viewer GUI访问,后者是企业经理的一部分。
18.2.5.4. ADR命令解释器(ADRCI)
ADRCI是一个命令行实用程序,使您能够调查问题、查看健康检查报告,并将首次故障诊断数据打包并上传到Oracle支持。您还可以使用该实用程序查看自动诊断库(ADR)中的跟踪文件名称以及查看告警日志。ADRCI具有丰富的命令集,可以交互式使用或在脚本中使用。
18.3. 数据库管理员的主题
第17章描述了对开发人员和数据库管理员(DBAs)都很重要的主题。这一节涵盖了对DBAs来说最本质的主题,这些主题在手册的其他部分没有讨论过。本节包含以下主题:
■ 备份和恢复
■ 内存管理
■ 资源管理与任务调度
■ 性能诊断与调优
18.3.1. 备份与恢复
备份和恢复是一系列概念、程序和策略,涉及保护数据库免受媒体故障或用户错误造成的数据丢失。通常,备份和恢复策略的目的是保护数据库免受数据丢失的威胁,并重建丢失的数据。
备份是数据的副本。备份可以包括数据库的关键部分,如数据文件、服务器参数文件和控制文件。一个典型的备份和恢复场景是失败的磁盘驱动器导致数据文件丢失。如果存在丢失文件的备份,那么您可以恢复和恢复它。媒体恢复指的是涉及将数据恢复到丢失发生前状态的操作。
18.3.1.1. 备份与恢复技术
您可以使用以下手段来备份和恢复Oracle数据库:
■ 恢复管理器(Recovery Manager, RMAN)
RMAN是Oracle数据库的实用工具,与Oracle数据库集成以执行备份和恢复活动,包括在它备份的每个数据库的控制文件中维护历史备份元数据的存储库。RMAN还可以在不同的数据库中维护一个称为恢复目录的集中备份存储库。RMAN是Oracle数据库的特性,不需要单独安装。
RMAN与Oracle Secure Backup集成,提供可靠、集中的磁带备份管理,保护文件系统数据和Oracle数据库文件。Oracle Secure Backup SBT接口使您能够使用RMAN将数据库文件备份和恢复到磁带和基于互联网的Web服务,如Amazon S3。Oracle Secure Backup支持几乎所有SAN和SCSI环境中的磁带驱动器和磁带库。
RMAN和Oracle Secure Backup都可以通过命令行和企业经理访问。
■ 用户管理技术
作为RMAN的替代方案,您可以使用操作系统命令(如Linux的dd命令)来备份和恢复文件,以及使用SQL*Plus的RECOVER命令进行媒体恢复。Oracle完全支持用户管理的备份和恢复,尽管推荐使用RMAN,因为它与Oracle数据库集成并简化了管理。
图18-3显示了基本的RMAN架构。通过企业经理访问的RMAN客户端使用目标数据库上的服务器会话将数据备份到磁盘或磁带。RMAN可以使用备份元数据更新外部恢复目录。
无论您使用哪种备份和恢复技术,Oracle都建议您配置一个快速恢复区。这个由数据库管理的目录、文件系统或Oracle ASM磁盘组集中了备份和恢复文件,包括活动控制文件、在线和归档的重做日志文件以及备份。Oracle数据库恢复组件与快速恢复区交互,以确保数据库的可恢复性。
18.3.1.2. 数据库备份
数据库备份可以是物理的或逻辑的。物理备份是备份和恢复策略中的主要关注点,它们是物理数据库文件的副本。您可以使用RMAN或操作系统实用工具进行物理备份。
相比之下,逻辑备份包含逻辑数据,如表和存储过程。您可以使用Data Pump Export等Oracle数据库实用工具提取逻辑数据,并将其存储在二进制文件中。逻辑备份可以补充物理备份。
物理备份具有较大的粒度和有限的可传输性,但速度非常快。逻辑备份具有细粒度和完全的可传输性,但比物理备份慢。
整个数据库和部分数据库备份:整个数据库备份是备份数据库中的每个数据文件以及控制文件。整个数据库备份是最常见的备份类型。
部分数据库备份包括数据库的一个子集:个别的表空间或数据文件。表空间备份是备份一个或多个表空间中的所有数据文件。无论表空间备份是一致的还是不一致的,只有当数据库在ARCHIVELOG模式下运行时才有效,因为需要重做日志来使恢复的表空间与数据库的其他部分保持一致。
一致和不一致备份:整个数据库备份可以是一致的或不一致的。在一致备份中,所有可读写的数据文件和控制文件具有相同的检查点SCN,保证这些文件包含直到该SCN的所有更改。这种类型的备份在恢复后不需要恢复。
数据库的一致备份只有在一致关闭之后才有可能(见第13-9页的“关闭模式”),并且是数据库在NOARCHIVELOG模式下运行时唯一有效的备份选项。其他备份选项需要媒体恢复以实现一致性,这在不应用归档的重做日志文件的情况下是不可能的。
注意:如果您在不应用重做的情况下恢复一个一致的整个数据库备份,那么您将丢失备份之后进行的所有事务。
在不一致备份中,可读写的数据文件和控制文件不一定具有相同的检查点SCN,因此可能会丢失更改。所有在线备份必然是不一致的,因为备份进行时数据文件可能会被修改。
不一致备份提供了更好的可用性,因为您不必关闭数据库就可以进行完全保护数据库的备份。如果数据库在ARCHIVELOG模式下运行,并且如果您备份了归档的重做日志和数据文件,那么不一致备份可以成为可靠的备份和恢复策略的基础。
备份集和映像副本:RMAN BACKUP命令生成映像副本或备份集。映像副本是数据文件、控制文件或归档重做日志文件的逐位复制的磁盘副本。您可以使用操作系统实用工具或RMAN创建物理文件的映像副本,并使用任一工具恢复它们。
注意:与操作系统副本不同,RMAN会验证文件中的块,并将映像副本记录在RMAN存储库中。
RMAN还可以以专有格式创建备份,称为备份集。备份集包含一个或多个数据文件、归档重做日志文件或控制文件或服务器参数文件的数据。备份集的最小单位是一个称为备份片的二进制文件。备份集是RMAN唯一可以写入到如磁带驱动器这样的顺序设备上的备份形式。
备份集使磁带设备能够连续流式传输。例如,RMAN可以将来自慢速、中速和快速磁盘的块混合到一个备份集中,以便磁带设备有持续不断的块输入。映像副本对磁盘很有用,因为您可以对它们进行增量更新,并且也可以在原地恢复它们。
18.3.1.3. 数据修复
虽然许多问题可能导致数据库的正常操作中断或影响I/O操作,但通常只有以下问题需要DBA干预和数据修复:
■ 媒体故障
当数据库外部的问题阻止它从文件读取或写入时,就会发生媒体故障。典型的媒体故障包括物理故障(如磁头崩溃)以及数据库文件的覆盖、删除或损坏。媒体故障比用户或应用程序错误少见,但一个健全的恢复策略必须为它们做好准备。
■ 用户错误
用户或应用程序可能会对数据库进行不想要的更改,例如错误地更新、删除表的内容或删除数据库对象(见第17-10页的“人为错误”)。一个好的备份和恢复策略使您能够将数据库恢复到期望的状态,对数据库可用性的最小影响,以及最小的DBA努力。
通常,您有多种方法来解决上述问题。本节总结了其中的一些解决方案。
数据恢复顾问:数据恢复顾问工具自动诊断持久性数据故障,提出适当的修复选项,并在用户请求时执行修复。通过提供自动化数据修复的集中工具,数据恢复顾问提高了Oracle数据库的可管理性和可靠性,从而有助于减少恢复时间。数据库包括一个名为健康监视器的框架,用于运行诊断检查。检查器是向健康监视器注册的诊断操作或过程,用于评估数据库或其组件的健康状况。健康评估被称为数据完整性检查,可以被动地或主动地调用。故障是数据完整性检查检测到的持久数据损坏。故障通常被被动地检测到。涉及损坏数据的数据库操作会导致错误,这会自动触发一个数据完整性检查,搜索与错误相关的故障。如果诊断出故障,数据库会将它们记录在自动诊断库(ADR)中。在数据库通过ADR检测到故障并存储后,数据恢复顾问自动确定最佳的修复选项及其对数据库的影响。通常,数据恢复顾问为每个故障或故障组生成手动和自动修复选项。在提出自动修复选项之前,数据恢复顾问会针对特定环境以及完成所提议修复所需的媒体组件的可用性进行验证。如果您选择自动修复,Oracle数据库将为您执行。数据恢复顾问工具验证修复成功并关闭相应的故障。
Oracle Flashback技术:Oracle数据库提供了一组称为Oracle Flashback技术的特性,支持查看数据的过去状态,并在时间上来回倒带,而无需恢复备份。根据数据库更改的情况,Flashback特性通常可以比媒体恢复更快地逆转不需要的更改,并且对可用性的影响更小。
以下Flashback特性与备份和恢复最相关:
■ Flashback Database
您可以将Oracle数据库回退到以前的时间来纠正逻辑数据损坏或用户错误导致的问题。Flashback Database也可以用来补充Data Guard、Data Recovery Advisor以及同步克隆数据库。Flashback Database不恢复或执行文件的媒体恢复,因此您不能使用它来纠正磁盘崩溃等媒体故障。
■ Flashback Table
您可以使用单个SQL语句将表回退到指定的时间点。您可以在数据库在线时恢复表数据以及相关的索引、触发器和约束,同时只撤销指定表的更改。Flashback Table不解决物理损坏,如坏盘或数据段和索引不一致性。
■ Flashback Drop
您可以逆转DROP TABLE操作的效果。Flashback Drop比点时间恢复等恢复机制要快得多,并且不会导致近期交易丢失或停机。
块媒体恢复:块损坏是数据块不处于公认的Oracle格式,或者其内容在内部不一致(见第17-9页的“数据损坏”)。块媒体恢复是一种在数据文件在线时恢复和修复损坏数据块的技术。如果只有少数几个块损坏,那么块恢复可能比数据文件恢复更可取。
数据文件恢复:数据文件恢复修复丢失或损坏的当前数据文件或控制文件。它还可以恢复在表空间离线时没有使用OFFLINE NORMAL选项而丢失的更改。
如果您恢复数据文件或控制文件的备份,或者在没有使用OFFLINE NORMAL选项的情况下将数据文件离线,则必须进行媒体恢复。如果在线数据文件需要媒体恢复,数据库无法打开,需要媒体恢复的数据文件在媒体恢复完成之前也无法联机。
恢复物理备份的数据文件或控制文件就是重建它并使其对Oracle数据库可用。恢复备份就是应用归档的重做日志文件,从而重建丢失的更改。RMAN还可以使用增量备份恢复数据文件,增量备份只包含在先前备份之后修改的块。
与实例恢复(自动将更改应用到在线文件)不同,媒体恢复必须由用户调用,并将归档的重做日志文件应用到恢复的备份上。数据文件媒体恢复只能对离线数据文件或数据库中未被任何实例打开的数据文件进行操作。
根据是否应用所有更改,数据文件媒体恢复有所不同:
■ 完全恢复
完全恢复将归档和在线日志中包含的所有重做更改应用到备份中。通常,在媒体故障损坏数据文件或控制文件后,您会执行完全媒体恢复。您可以对数据库、表空间或数据文件执行完全恢复。
■ 不完全恢复
不完全恢复,也称为数据库点时间恢复,会得到数据库的非当前版本。在这种情况下,您不应用恢复备份后生成的所有重做。通常,当Flashback Database不可能时,您执行点时间数据库恢复以撤销用户错误。要执行不完全恢复,您必须恢复在您想要恢复的时间之前创建的所有数据文件的备份,然后在恢复完成后使用RESETLOGS选项打开数据库。重置日志会创建一个新的日志序列号流,从日志序列号1开始。
注意:如果当前数据文件可用,那么Flashback Database是DBPITR(数据库点时间恢复)的替代方案。
表空间点时间恢复(TSPITR)功能允许您将一个或多个表空间恢复到比数据库其余部分更早的时间点。
18.3.2. 内存管理
内存管理涉及在数据库需求变化时维持Oracle实例内存结构的最佳大小。初始化参数设置决定了SGA(系统全局区)和实例PGA(程序全局区)内存的管理方式。图18-4显示了内存管理选项的决策树。以下各节将详细解释这些选项。
18.3.2.1. 自动内存管理
在自动内存管理中,Oracle数据库完全自动地管理SGA和实例PGA内存。这种方法最简单,并且强烈推荐使用。
用户指定的唯一控制是目标内存大小初始化参数(MEMORY_TARGET)和可选的最大内存大小初始化参数(MEMORY_MAX_TARGET)。Oracle数据库调整到目标内存大小,根据需要在SGA和实例PGA之间重新分配内存。图18-5显示了一个数据库,它有时处理在线用户提交的作业,有时处理批处理作业。使用自动内存管理,数据库根据正在运行的作业类型自动调整大池和数据库缓冲区缓存的大小。
如果您使用DBCA创建数据库并选择基本安装选项,则自动内存管理默认启用。
18.3.2.2. SGA的共享内存管理
如果自动内存管理未启用,则系统必须使用SGA的共享内存管理。共享内存管理可以采取以下形式之一:
■ 自动共享内存管理
这种模式使您能够更直接地控制SGA的大小,默认情况下,当自动内存管理被禁用时会使用这种模式。数据库将总SGA调整到目标大小,并动态调整SGA组件的大小。如果您使用的是服务器参数文件,数据库会在实例关闭后记住自动调整组件的大小。
■ 手动共享内存管理
在这种模式下,您设置几个单独的SGA组件的大小,并持续手动调整各个SGA组件的大小。您对各个SGA组件的大小有完全的控制权。当自动内存管理和自动共享内存管理都被禁用时,数据库默认使用这种模式。
注意:当自动内存管理被禁用时,在某些情况下,数据库可能会根据用户工作负载自动调整共享池和缓冲区缓存的相对大小。
18.3.2.3. PGA的内存管理
如果自动内存管理未启用,则PGA内存管理可能采用以下模式:
■ 自动PGA内存管理
当自动内存管理被禁用且PGA_AGGREGATE_TARGET设置为非零值时,数据库使用自动PGA内存管理。在这种模式下,PGA_AGGREGATE_TARGET指定了实例PGA的目标大小。数据库然后将实例PGA的大小调整到这个目标,并动态调整各个PGA的大小。如果您没有明确设置目标大小,那么数据库会自动配置一个合理的默认值。
■ 手动PGA内存管理
当自动内存管理被禁用且PGA_AGGREGATE_TARGET设置为0时,数据库默认使用手动PGA管理。以前的Oracle数据库版本要求DBA为每种类型的SQL操作符(如排序或哈希连接)手动指定最大的工作区大小。这种技术证明非常困难,因为工作负载总是在变化。尽管Oracle数据库支持手动PGA内存管理方法,但Oracle强烈推荐使用自动内存管理。
18.3.2.4. 内存管理方法总结
表18-1总结了各种内存管理方法。如果您不启用自动内存管理,那么您必须分别为SGA和PGA单独配置一种内存管理方法。
注意:当自动内存管理未启用时,实例PGA的默认方法是自动PGA内存管理。
18.3.3. 资源管理与任务调度
在有许多活跃用户的数据库中,资源管理是数据库管理的重要组成部分。消耗过多资源的会话可能会阻止其他会话执行工作。一个相关问题是如何安排任务以便它们在最佳时间运行。Oracle数据库提供了帮助解决这些问题的工具。
18.3.3.1. 数据库资源管理器
Oracle数据库资源管理器(资源管理器)是一个提供对分配给用户、应用程序和服务的数据库资源进行细粒度控制的基础设施。资源管理器解决了操作系统管理不善的许多资源分配问题,包括:
■ 过度开销
■ 低效的调度
■ 不适当的资源分配
■ 无法管理数据库特定资源
资源管理器通过让数据库对硬件资源的分配有更多的控制,并使您能够优先考虑数据库内的工作,从而帮助克服这些问题。您可以根据会话属性将会话分类到组中,然后向这些组分配资源以优化硬件利用率。
资源根据数据库管理员指定的资源计划分配给用户。该计划指定了资源如何在资源消费者组之间分配,资源消费者组是按资源需求分组的用户会话。资源计划指令将资源消费者组与计划相关联,并指定如何向该组分配资源。
图18-6显示了一个在白天同时运行OLTP应用程序和报告应用程序的组织的简单资源计划。当前活动的计划,DAYTIME,在三个资源消费者组之间分配CPU资源。具体来说,OLTP被分配了75%的CPU时间,REPORTS被分配了15%,OTHER_GROUPS接收剩余的10%。
18.3.3.2. Oracle计划器
Oracle计划器(Scheduler)使数据库管理员和应用程序开发人员能够在数据库环境中控制各种任务的执行时间和地点。计划器提供了复杂的企业级调度功能,您可以使用这些功能来:
■ 根据时间或事件安排作业执行
■ 以模拟您的业务需求的方式安排作业处理
■ 管理和监控作业
■ 在集群环境中执行和管理作业
程序对象(程序)包含计划器将运行的命令的元数据,包括任何参数的默认值。调度对象(计划)包含有关运行日期和时间以及复发模式的信息。作业对象(作业)将程序与计划关联。要定义执行内容和执行时间,您需要在程序、计划和作业之间分配关系。
计划器是作为DBMS_SCHEDULER PL/SQL包中的一组函数和过程实现的。您可以使用此包或企业经理创建和管理计划器对象。因为计划器对象是标准数据库对象,所以您可以使用系统和对象权限来控制对它们的访问。
图18-7显示了计划器的基本架构。作业表是所有作业的容器,每个数据库一个表。作业协调后台进程根据需要自动启动和停止。当必须运行作业时,协调器会唤醒作业奴隶(见第15-12页的“作业队列进程(CJQ0和Jnnn)”)。奴隶从作业表中收集元数据并运行作业。
18.3.4. 性能诊断与调优
作为数据库管理员(DBA),您负责Oracle数据库的性能。通常,性能问题是由不可接受的响应时间导致的,响应时间是指完成特定工作量所需的时间,或者是吞吐量,这是指在特定时间内可以完成的工作量。常见问题包括:
■ CPU瓶颈
■ 内存结构尺寸不足
■ I/O容量问题
■ 效率低下或负载过高的SQL语句
■ 在调优SQL语句后意外的性能下降
■ 并发和争用问题
■ 数据库配置问题
调优的一般目标通常是改善响应时间、提高吞吐量,或两者兼有。一个具体且可衡量的目标可能是“将指定的SELECT语句的响应时间减少到5秒以下。”这个目标是否可实现取决于DBA可能控制或无法控制的因素。总的来说,调优是为了通过尽可能高效地使用数据库资源来实现具体、可衡量且可实现的调优目标所做的努力。
Oracle性能方法基于识别和消除数据库中的瓶颈,并开发高效的SQL语句。应用Oracle性能方法涉及以下任务:
■ 执行调优前的准备工作
■ 定期主动对数据库进行调优
■ 当用户报告性能问题时,对数据库进行反应性调优
■ 识别、调优和优化高负载SQL语句
本节描述了Oracle数据库性能调优的基本方面,包括使用顾问工具。Oracle数据库顾问提供关于如何应对关键数据库管理挑战的具体建议,涵盖包括空间、性能和撤销管理在内的广泛领域。
18.3.4.1. 数据库自我监控
自我监控是在数据库执行常规操作时进行的,确保数据库能够实时意识到出现问题。Oracle数据库可以发送服务器生成的警报来通知您即将发生的问题。当出现问题或数据与预期的指标值不匹配时,例如每秒物理读取次数或SQL响应时间,系统会自动生成警报。指标是累积统计数据变化率的度量。服务器生成的警报可以基于用户指定的阈值水平或因为发生了某个事件。服务器生成的警报不仅可以识别问题,有时还建议如何解决报告的问题。例如,当快速恢复区域空间不足时,警报会建议删除过时的备份或添加额外的磁盘空间。
18.3.4.2. 自动工作负载存储库(AWR)
自动工作负载仓库(AWR)是一个历史性能数据的存储库,包括系统的累积统计信息、会话、单个SQL语句、段和服务。这些统计数据是性能调优的基础。通过自动化收集数据库统计信息以检测问题和进行调优,AWR成为数据库自我管理的基础。
如图18-8所示,数据库在SGA中存储最近的AWR统计信息。默认情况下,MMON进程每小时收集一次统计信息并创建一个AWR快照(见第15-11页的“可管理性监控进程(MMON和MMNL)”)。快照是在特定时间点捕获的一组性能统计数据。数据库将快照写入SYSAUX表空间。AWR管理快照空间,根据可配置的快照保留策略自动清除较旧的快照。
AWR基线是在系统在高峰负载下表现良好时收集的一组统计数据,通常在一段时间内获取。您可以指定一对或一系列AWR快照作为基线。通过使用AWR报告将性能不佳时期的统计数据与基线进行比较,您可以诊断问题。
一个称为自动任务(AutoTask)的自动化维护基础设施展示了Oracle数据库如何使用AWR进行自我管理。通过分析AWR数据,AutoTask可以确定维护任务的需求,并在Oracle Scheduler维护窗口中安排它们运行。任务的例子包括为优化器收集统计数据和运行自动段顾问。
18.3.4.3. 自动数据库诊断监视器(ADDM)
自动数据库诊断监视器(ADDM)是内置于Oracle数据库中的自诊断顾问。ADDM使用在AWR中捕获的统计数据,自动并主动地诊断数据库性能,并确定如何解决已识别的问题。您也可以手动运行ADDM。ADDM采用全面的方法来处理系统性能,使用时间作为组件之间的共同标准。ADDM识别消耗数据库最多时间的Oracle数据库区域。例如,数据库可能花费过多的时间等待空闲数据库缓冲区。ADDM深入挖掘以确定问题的根源,而不仅仅是症状,并且报告问题对Oracle数据库整体的影响。在诊断过程中产生的开销很小。
在许多情况下,ADDM会推荐解决方案,并量化预期的性能收益。例如,ADDM可能会建议对硬件、数据库配置、数据库架构或应用程序进行更改。如果提出了建议,那么ADDM会报告时间上的好处。使用时间作为衡量标准可以比较问题或建议。
除了报告潜在的性能问题外,ADDM还记录了数据库中没有问题的区域。在早期阶段,不会显著影响数据库性能的子组件,如I/O和内存,会从分类树中剪枝。ADDM列出了这些子组件,以便您可以快速看到在这些领域采取行动几乎没有好处。
18.3.4.4. 活动会话历史(ASH)
活动会话历史(ASH)每秒对活动数据库会话进行采样,将数据写入内存和持久存储。ASH是数据库自我管理框架的一个组成部分,对于诊断性能问题非常有用。与AWR收集的实例级统计数据不同,ASH统计数据是在会话级别收集的。活动会话是使用CPU并且不在空闲等待类中等待事件的会话。
您可以使用企业经理或SQL脚本生成ASH报告,这些报告收集了在指定持续时间内收集的会话统计数据。您可以使用ASH报告进行:
■ 分析ADDM未识别的短期性能问题
■ 通过各种维度或其组合进行范围或针对性的性能分析,例如时间、会话、模块、操作或SQL ID
例如,一个用户通知您数据库在晚上10:00到10:02之间运行缓慢。然而,这2分钟的性能下降在晚上10:00到11:00的AWR快照间隔中只占很小的一部分,并没有出现在ADDM的发现中。ASH报告可以帮助确定瞬态问题的来源。
18.3.4.5. 应用程序和SQL调优
Oracle数据库完全自动化了SQL调优过程。ADDM识别消耗异常高系统资源的SQL语句,因此导致性能问题。此外,AWR自动捕获在CPU和共享内存消耗方面的顶级SQL语句。高负载SQL语句的识别是自动进行的,不需要任何干预。
SQL自动调优通过SQL调优顾问公开。SQL调优顾问作为维护任务,在系统维护窗口期间自动运行。在每次自动运行期间,顾问会选择数据库中的高负载SQL查询,并为调优这些查询生成建议。SQL调优顾问的建议分为以下几类:
■ 统计分析
■ SQL分析
■ 访问路径分析
■ SQL结构分析
SQL分析包含特定于SQL语句的额外统计信息,并使优化器能够生成更好的执行计划。本质上,SQL分析是一种分析查询的方法。访问路径和SQL结构分析对于调优正在开发中的应用程序或自制的生产应用程序非常有用。
SQL调优顾问的一个主要好处是,解决方案来自优化器而不是外部工具(见第7-10页的“优化器概述”)。因此,调优由负责执行计划和SQL性能的数据库组件执行。调优过程可以考虑SQL语句的过去执行统计信息,并为此语句定制优化器设置。
SQL访问顾问提供关于如何优化数据访问路径的建议。具体来说,它建议可以通过分区、物化视图、索引和物化视图日志来提高数据库性能。
分区和索引等模式对象对于优化复杂、数据密集型的查询至关重要。然而,这些对象的创建和维护可能非常耗时,空间需求也可能很大。SQL访问顾问通过为指定的工作负载推荐数据结构来帮助实现性能目标。
SQL访问顾问可以通过使用SQL访问顾问向导从企业经理运行,或者通过调用DBMS_ADVISOR包来调用。DBMS_ADVISOR包包含一系列分析和顾问功能和过程,可以从任何PL/SQL程序调用。