WEB开发网
开发学院数据库Oracle Oracle数据库11g新特性:弹性特性 阅读

Oracle数据库11g新特性:弹性特性

 2008-12-16 13:01:23 来源:WEB开发网   
核心提示:自动运行情况监视 您如何知道您的数据库是否正在顺畅地运转?一种方法是进行“全面”检查,这个过程既耗时又容易出错,Oracle数据库11g新特性:弹性特性,在某些机构是由专门的 DBA 反复执行相同的任务来评估和报告数据库的运行情况,但是大多数机构没有能力雇佣全职员工专门从事此项工作,&ldquo

自动运行情况监视

您如何知道您的数据库是否正在顺畅地运转?一种方法是进行“全面”检查,这个过程既耗时又容易出错。在某些机构是由专门的 DBA 反复执行相同的任务来评估和报告数据库的运行情况,但是大多数机构没有能力雇佣全职员工专门从事此项工作。另一种方法是由 DBA 员工定期执行运行情况检查,但结果往往不尽如人意。一个人的注意力分散到太多的事情上会导致遗漏某些可能危险的东西。

在 Oracle 数据库 11g 中,由于引入了自动运行情况监视而使这项工作变得简单一些。与 Oracle 数据库 10g 中引入的某些顾问工具类似,自动运行情况监视“检查器”(在故障后自动或根据需要)监视各种组件(如数据文件和字典)以确保它们在物理或逻辑上没有受到损坏。当检查器发现情况时,会向各种恢复顾问工具报告和提供信息。至少新的事件打包服务(稍后介绍)允许您将所有问题和支持文件打包到一起以便向 Oracle Support 报告。

与 Oracle 数据库 11g 的许多其他特性一样,可以通过命令行或 Oracle 企业管理器 GUI 管理此过程。下面将向您介绍如何使用后者管理该过程。

在主 Database 页面上,向下一直滚动到 Related Links 部分,如下所示。

Oracle数据库11g新特性:弹性特性

在该超链接列表中,单击 Advisor Central.显示 Advisors 和 Checkers 屏幕。单击 Checkers 选项卡。屏幕的顶部显示如下。

Oracle数据库11g新特性:弹性特性

这是一个非常重要的屏幕,它显示多个可用的检查器以及已经执行的自动检查器运行。

首先,我们关注多个可用的检查器。

DB Structure Integrity Check. 该检查器可以通过一个示例得到很好的解释。首先,单击 DB Structure Integrity Check.出现一个小屏幕,例如,您可以在该屏幕中将此运行命名为“DB_Struct_Int1”。您在此处所做的另一个输入是为了限制该运行的时间,您可以忽略它们以表明实际没有限制。

运行情况检查成功运行后,屏幕顶部将出现确认信息,如下所示:

Oracle数据库11g新特性:弹性特性

屏幕底部也显示刚刚运行的检查。名称是您在前面输入的:DB_Struct_Int1.重要的区别是 Run Type 列,它针对此运行显示“Manual”,而针对其他运行则显示“Reactive”。可通过选中左侧的单选按钮然后单击 Details 按钮来选择该运行。结果屏幕显示该运行的详细信息,如检测到的损坏类型等等。

在本例中,数据文件由于某种原因受到损坏,该检查器将对此进行识别。该信息随后提供给 Data Recovery Advisor(在有关 RMAN 的部分中讨论)以采取相应的措施。您可以随时调用该检查器以检查数据文件的完整性。

这个检查器很可能是您最喜欢的。在显示以往运行的屏幕上,选择该类型的任一运行并单击 Details 按钮,您将看到如下所示的屏幕:

Oracle数据库11g新特性:弹性特性

该屏幕显示关于此问题的所有发现:7 号数据文件已损坏。如果您想获得有关接下来所需采取的措施的建议,可以启动 Recovery Advisor. Data Block Integrity Check.

Data Block Integrity Check 与 DB Structure Integrity Check 类似,但它只检查特定的块而不是整个文件。和前面一样,您为它指定名称和其他相关的详细信息。此屏幕如下所示:

Oracle数据库11g新特性:弹性特性

注意,您需要输入数据文件编号和块编号。(我分别输入了 7 和 20.)输入详细信息后,按 OK.这将启动检查过程,屏幕底部将反映该运行的状态,如下所示:

Oracle数据库11g新特性:弹性特性

同样,如果该块存在问题,检查器应该会发现。使用超链接,您可以导航到详细信息页面以了解问题的相关信息。

Redo Integrity Check. 该检查器扫描重做日志和存档日志的内容是否可以访问以及是否受到损坏。

Undo Segment Integrity Check. 该检查发现逻辑撤消损坏,在回滚操作期间有时会发现该损坏。找到撤消损坏的位置后,该检查使用 PMON 和 SMON 尝试恢复损坏的事务。如果该恢复失败,则自动运行情况监视将有关损坏的信息存储在 V$CORRUPT_XID_LIST 中。大多数撤消损坏可以通过强制提交进行恢复。

Transaction Integrity Check. Transaction Integrity Check 与 Undo Segment Check 基本相同,只是它仅检查作为输入参数传递给该检查的特定事务。找到撤消损坏的位置后,该检查使用 PMON 和 SMON 尝试恢复损坏的事务。如果该恢复失败,则自动运行情况监视将有关损坏的信息存储在 V$CORRUPT_XID_LIST 中。大多数撤消损坏可以通过强制提交进行恢复。

Dictionary Integrity Check. 该检查将检查核心字典对象(如 tab$ 和 col$)的完整性。它验证每个字典对象的字典条目内容是否符合以下条件:字典中行的逻辑约束为强制,并且字典对象间的父子关系为强制。

自动运行情况检查

还记得检查器主屏幕?注意页面底部的 Checker Runs 列表,它显示已经发生的各种检查器运行及其 Run Type.如果您手动运行了一个检查器(如在本部分前面所做的那样),Run Type 将显示“Manual”。作为“Reactive”列出的检查器运行表明它们是在某处检测到错误时自动运行的。如果运行发现情况,将进行记录,您可以单击这些超链接来访问相关发现。例如,单击第一个运行 HM_RUN_140013 将显示该检查器运行的详细信息:

Oracle数据库11g新特性:弹性特性

该屏幕清楚地显示了故障原因。实际上,至少有两种类型的故障:损坏的联机重做日志文件和数据文件。您首先需要单击 Launch Recovery Advisor 按钮寻求建议。显示一个基于向导的界面后,您将看到一个屏幕,其中的顾问工具指导您执行一个特定操作:

Oracle数据库11g新特性:弹性特性

该操作应为运行 /home/oracle/diag/rdbms/odel11/ODEL11/hm 目录中的 SQL 文件 reco_767216331.hm.如果您打开该文件,将看到以下内容:

begin
/*Clear the Log Group*/
execute immediate 'ALTER DATABASE CLEAR LOGFILE GROUP 3';
end;

损坏的日志文件属于一个未激活的组,因此最好将其清除 — 这是来自 Recovery Advisor 的建议。如果您决定采纳该建议,按 Continue 按钮,恢复将继续。完成后,如果您返回 Support Workbench,您将看到重做损坏已经不见,但是在存档日志中已检测到一个新的损坏。

Oracle数据库11g新特性:弹性特性

与往常一样,您可以启动建议工具来修复这些错误。

自动诊断信息库

当检查器发现情况时,它们需要将它记录到某个地方以便进一步的分析和后续的处理。所有相关元数据都记录在一个称为自动诊断信息库的新工具中,该工具记录所有重要事件而不只是检查器检测到的事件。它类似于数据库中重要事件的 SYSTEM 表空间。下面我们来看看如何通过企业管理器使用它。

在 Enterprise Manager 主 Database 页面 中,单击 Software and Support 选项卡,然后单击 Support Workbench,将显示一个类似如下所示的屏幕。

Oracle数据库11g新特性:弹性特性

该屏幕只显示了检查器报告的情况汇总:出现了 ORA-603 错误。单击错误左侧的 + 号将显示这些错误的详细信息。

Oracle数据库11g新特性:弹性特性

如果单击 Incidents 标题下每个事件 id 对应的链接,您可以查看这些事件。例如,单击事件 14435 对应的链接将在如下所示的屏幕中显示该事件的详细信息:

Oracle数据库11g新特性:弹性特性

屏幕顶部显示的详细信息可能具有自我说明性。屏幕底部显示该事件的支持详情(如跟踪文件)。这些文件将发往 Oracle Support 进行分析(但仅当您使用事件打包服务将它们打包到一起并且 Oracle 配置管理器配置了合适的证书时)。单击第一个跟踪文件旁边的眼镜图标将显示该跟踪文件,如下所示:

Oracle数据库11g新特性:弹性特性

注意文件中的行如何以十分用户友好的方式进行分析和显示的。企业管理器读取每行,识别每行,然后以适当的缩进显示它们。如果单击文件中的超链接,您将看到跟踪文件中的原始部分。

您可以将事件组成一个“信封”发往 Oracle Support,这也是您下一步应该做的:将它们打包到一起。为此,在 Select 下的复选框中单击并单击 Package 按钮。这将显示一个类似如下所示的屏幕:

Oracle数据库11g新特性:弹性特性

此时,忽略 Custom Packaging.单击 Quick Packaging 并按 Continue,将显示一个如下所示的屏幕:

Oracle数据库11g新特性:弹性特性

输入所有详细信息并按 Next。后续的屏幕确认正在打包的事件、程序包清单等等。这里,您会看到所有与该错误相关的跟踪文件都已发现并添加到程序包中。该过程使您从识别特定错误的正确跟踪文件集这一容易出错的任务中解放出来,同时该工具还具有将相关错误的跟踪文件收集到同一程序包中的智能。这很重要,因为 Oracle 需要利用所有相关错误的跟踪文件来确定问题的根本原因;您决定打包的错误可能是一个症状而非根本原因。最后,您可以按 Submit 将其发送到 Oracle。一旦提交,屏幕便会发生变化,如下所示:

Oracle数据库11g新特性:弹性特性

注意 Packaged 列下现在是如何出现了一个条目(“Yes”)。这确认事件已打包。再注意一个部分:

Oracle数据库11g新特性:弹性特性

这表明上载文件已生成并附带相应的详细信息,如生成时间、程序包中的主要问题等。但是,文件并未上载到 Oracle Support,因为您尚未安装配置管理器或尚未对其进行配置。您将在以后了解该特性;现在,如果您单击该名称,您将看到有关该程序包的更多详细信息:

Oracle数据库11g新特性:弹性特性

详细信息都具有自我说明性。事件都以超链接的形式显示,单击它们将转至您在前面看到的事件页面。单击 Files 选项卡将打开一个页面,显示程序包中包含的所有文件。单击最右侧的小眼镜图标可以查看文件。

Oracle数据库11g新特性:弹性特性

现在,单击 Activity Log 选项卡将显示程序包的历史记录,如创建时间、发送到 Oracle 的时间(如果发送)等。

Oracle数据库11g新特性:弹性特性

定制程序包

该工具最有用的特性之一是能够定制发往 Oracle 的程序包内容。要实现该任务,单击 Customize 按钮。单击该按钮将显示如下所示的屏幕:

Oracle数据库11g新特性:弹性特性

注意右侧的 Packaging Tasks 面板。在该面板中,您将看到用于执行与该程序包相关的各种任务的超链接。下面是一些主要的任务:

■ Edit Contents

a、Add Problems:允许您向同一程序包中添加更多问题。当您认为这些问题相关时,该链接有用。

b、Exclude Problems:允许您删除问题;当您认为这些问题与程序包中的其他问题不相关时,该链接有帮助。

c、View Package Manifest:清单是一个描述程序包内容(描述的内容、涉及的问题、包含的各种跟踪文档等)的文档。这是一个文本文件。单击该链接将显示清单。

■ Scrub User Data

a、Copy out Files to Edit Contents:通过该链接,您可以将程序包中包括的跟踪文件和其他文件复制到一个本地 OS 文件夹并对进行编辑(如果需要)。如果文件包含敏感数据,您可能希望执行该任务。

b、Copy in Files to Replace Contents:编辑文件后,您可以用编辑的副本替换程序包中的副本。

■ Additional Diagnostic Data

a、Gather Additional Dumps:允许您添加几个其他尚未包含的转储(如设置 sql_trace = true 后生成的跟踪文件)和测试案例。

b、Add External Files:您可以向该程序包添加 Oracel Support(或其他相关部门)要求的任何其他文件(如 init.ora 或 listener.ora)。

■ Send to Oracle Support

a、Finish Contents Preparation:顾名思义,您可以确认内容正常并可以发往 Oracle Support。

b、Generate Upload File:允许您再次生成上载文件,并附带您在文件列表中添加和删除的内容。

c、View/Send Upload Files:允许您将文件上载到 Oracel Support(如果您已经配置了配置管理器)。

配置管理器

如果可以通过您的 CSI 和 MetaLink 用户 ID 等相关详细信息创建程序包并发往 Oracle Support 以及创建草拟的服务请求 (TAR) 该多好啊?使用一个名为 Oracle 配置管理器的工具可以实现此目的。

在 Oracle 数据库 11g 安装期间,系统询问您是否希望安装和配置该工具。如果您回答了“yes”,则已经安装并配置了该工具;如果您回答了“no”,您可以现在配置它。

转至 Oracle 主目录并使用 cd 命令进入 ccr/bin.然后,运行 setupCCR 文件对配置管理器进行首次设置。它显示一个许可消息,最后系统将询问您是接受还是拒绝该许可。随后,系统将询问您一些问题,如 CSI 编号、MetaLink 用户 ID 等。以下文本显示了交互式会话。用户输入以粗体显示。

*** Do you accept this license agreement? (Y/N) [Y]: Y
Configuration requires the following piece(s) of information.
  Customer Support Identifier (CSI): XXXXXXX
  Oracle MetaLink User Name: arup@proligence.com
  The two character country code: US
** Installing base package **
Deploying core - Version 10.2.6.0.0
** Registering installation with Oracle Configuration Manager server(s) **
Deploying engines - Version 10.2.2.0.3
Deploying metricdata - Version 10.2.4.0.2
Deploying scripts - Version 10.2.6.0.0
** Getting package updates from ContentServer **
** Starting the Oracle Configuration Manager Scheduler **
Oracle Configuration Manager - Release: 10.2.6.0.0 - Production
Copyright (c) 2005, 2007, Oracle. All rights reserved.
------------------------------------------------------------------
Starting Oracle Configuration Manager...
Waiting for status from Oracle Configuration Manager....
Start Date                 16-Oct-2007 09:28:46
Last Collection Time        -
Next Collection Time        17-Oct-2007 09:28:00
Collection Frequency       Daily at 09:28
Collection Status           scheduled collection running
Log Directory             /home/oracle/app/oracle/product/11.1/db_1/ccr/log
Registered At              16-Oct-2007 09:28:17
Automatic Update          On
Collector Mode            Connected
Oracle Configuration Manager successfully started.

设置完配置管理器后,您可以使用同一目录中的 configCCR 脚本更改参数。

ADR 主目录

既然所有的焦点都集中于数据库的诊断能力,那么 Oracle 数据库是不是应该存储以结构化方式组织的所有跟踪文件、日志文件等等?在 Oracle 数据库 11g 中确实如此。自动诊断信息库 (ADR) 文件位于一个指定为诊断目标(或 ADR 基目录)的常用目录下的目录中。该目录由初始化参数 (diagnostic_dest) 设置。默认情况下,它设置为 $ORACLE_BASE,但是您可以将其显式设置为某些独占目录。(但是不建议这样做。)该目录下有一个 diag 子目录,您将在这个子目录中发现存储诊断文件的子目录。

ADR 存储所有组件(ASM、CRS、监听器等)的日志和跟踪文件,包括数据库本身的日志和跟踪文件。这使您可以方便地在一个位置查找特定的日志。

在 ADR 基目录中,可以有多个 ADR 主目录,每个组件和实例一个。例如,如果服务器有两个 Oracle 实例,则有两个 ADR 主目录。下面是数据库实例的 ADR 主目录的目录结构。

目录名称

说明

<在 DIAGNOSTIC_DEST 参数中提到的目录>

→diag

→rdbms

→<数据库名称>

→<实例名称>

→alert

XML 格式的警报日志存储在这里。

→cdump

核心转储存储在这里,相当于早期版本中的 core_dump_dest。

→hm

运行情况监视对多个组件运行检查,它在这里存储某些文件。

→incident

所有事件转储都存储在这里。

→<所有事件目录存在这里>

每个事件存储在一个不同的目录中,这些目录都存储在这里。

→incpkg

当您打包事件时(在本文中可以了解打包),某些支持文件存储在这里。

→metadata 

有关问题、事件、程序包等的元数据存储在这里。

→trace

用户跟踪文件和背景跟踪文件存储在这里,并附带警报日志的文本版本。

例如,如果您的数据库名称为 ODEL11 并且实例名称也为 ODEL11(大写),则 ADR 主目录的路径为 /home/oracle/diag/rdbms/odel11/ODEL11.现在,您会在该 ADR 主目录下看到不同的子目录:

$ ls
alert cdump hm incident incpkg ir lck metadata stage sweep trace

要支持这个新结构,忽略以前版本中的 *_dest 参数(background_dump_dest 和 user_dump_dest)。(core_dump_dest 未被忽略;实际上,Oracle 建议您将其设置为很大的核心转储。)如果您要 10g 升级到 11g,则根本不应设置它们,应该将它们从初始化参数文件中删除以免以后发生冲突。

其他组件的 ADR 目录结构与此相似。例如,对于 ASM 实例,“diag”下的目录名为 asm 而不是 rdbms.目录结构的其他部分保持不变。asm 的目标名称为 +asm.例如,我的 ASM 的 ADR 主目录如下所示:

$ pwd
/home/oracle/diag/asm/+asm/+ASM
$ ls
alert cdump hm incident incpkg ir lck metadata stage sweep trace

对于监听器,diag 下的目录为 tnslsnr,在该目录下是另一个以主机名命名的目录,然后在该主机名目录下是另一个以监听器名称命名的目录。在该监听器名称目录下,您会看到其他目录。

<在 DIAGNOSTIC_DEST 参数中提到的目录>

→ diag

→ tnslsnr

→ <服务器的主机名>

→ <监听器名称>

→ alert

→ trace ...

例如,如果主机名为 oradba3 并且监听器名称为“listener”(默认名称),则该目录为 /home/oracle/diag/tnslsnr/oradba3/listener。在该目录下创建所有其他目录(alert、trace、metadata 等)。与警报日志一样,监听器日志文件也作为 XML 条目存储在 alert 子目录下。普通的文本监听器日志文件仍然在 trace 目录下创建。

新视图 V$DIAG_INFO 显示有关 ADR 主目录的所有详细信息。在我的 RDBMS 主目录中,它显示如下:

SQL> select * from v$diag_info;
INST_ID NAME              VALUE
-------- ------------------------------ -----------------------------------------------------------------
    1 Diag Enabled             TRUE
    1 ADR Base               /home/oracle
    1 ADR Home              /home/oracle/diag/rdbms/odel11/ODEL11
    1 Diag Trace               /home/oracle/diag/rdbms/odel11/ODEL11/trace
    1 Diag Alert               /home/oracle/diag/rdbms/odel11/ODEL11/alert
    1 Diag Incident             /home/oracle/diag/rdbms/odel11/ODEL11/incident
    1 Diag Cdump             /home/oracle/diag/rdbms/odel11/ODEL11/cdump
    1 Health Monitor           /home/oracle/diag/rdbms/odel11/ODEL11/hm
    1 Default Trace File         /home/oracle/diag/rdbms/odel11/ODEL11/trace/ODEL11_ora_3908.trc
    1 Active Problem Count      3
    1 Active Incident Count     37
11 rows selected.

这只显示了有关该实例的 ADR 信息。要查看其他实例的该信息,只需连接到该实例并从 v$diag_info 中选择。视图中的各列都具有自我说明性。Default Trace File 指明当前会话的跟踪文件。Active Problem Count 和 Incident Count 针对以前描述的问题和事件。

您可以通过两种方式在 ADR 中访问文件和执行其他操作。最简单的方法是通过您在前面看到的企业管理器。另一种方法是使用命令行工具 asrci.下面我们来看看如何使用该工具。在 UNIX(或 Windows)命令提示符下,键入“adrci”:

$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on Sun Sep 23 23:22:24 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = ”/home/oracle”

如您在前面所了解的那样,存在多个 ADR 主目录,Oracle 组件的每个实例一个。因此,第一个任务是显示存在多少个主目录。该命令为 show homes.

adrci> show homes
ADR Homes:
diag/rdbms/odel11/ODEL11
diag/rdbms/dbeng1/DBENG1
diag/clients/user_unknown/host_411310321_11
diag/tnslsnr/oradba3/listener

如您所见,存在多个主目录。要在特定主目录上进行操作,您应该使用 set homepath 命令:

adrci> set homepath diag/rdbms/odel11/ODEL11

设置后,您可以在提示符下发出许多命令。您可以尝试的第一个命令是 help,它将显示所有可用的命令。下面是输出的简要摘录:

adrci> help
HELP [topic]
  Available Topics:
    CREATE REPORT
    ECHO
    EXIT
    HELP
    HOST
    IPS
    ...

如果您希望了解有关特定命令的更多信息,执行 help <命令>.例如,如果您希望获得有关 show incident 命令的使用帮助,执行:

adrci> help show incident      
 Usage: SHOW INCIDENT [-p <predicate_string>]
            [-mode BASIC|BRIEF|DETAIL]
            [-last <num> | -all]
            [-orderby (field1, field2, ...) [ASC|DSC]]
 Purpose: Show the incident information. By default, this command will
      only show the last 50 incidents which are not flood controlled.
 Options:
  [-p <predicate_string>]: The predicate string must be double-quoted.
  [-mode BASIC|BRIEF|DETAIL]: The different modes of showing incidents.
[... and so on ...]

这种将统计信息的收集和发布相分开的方法也可用于分区的表。假定您正在逐个分区地加载一个表。您不希望只提供部分信息给优化程序,您更希望所有分区的统计信息能够同时被优化程序看到。但是您还想在加载分区后立刻利用这一时间。那么,您可以在加载分区后立即收集它的统计信息,但不发布这些信息。分析完所有分区后,您可以一次性发布这些统计信息。

通过输出,您可以了解命令的用法。现在要了解已经记录了多少事件,您可以执行:

adrci> show incident -mode basic 
ADR Home = /home/oracle/diag/rdbms/odel11/ODEL11:
******************************************************************
INCIDENT_ID     PROBLEM_KEY                     CREATE_TIME               
-------------------- ---------------------------------------------------- ----------------------------------------
14556        ORA 600 [KSSRMP1]                  2007-10-17 04:01:57.725620 -04:00   
14555        ORA 600 [KSSRMP1]                  2007-10-16 18:45:03.970884 -04:00   
14435        ORA 603                             2007-10-16 06:06:46.705430 -04:00   
14427        ORA 603                             2007-10-16 06:06:42.007937 -04:00   
14419        ORA 603                             2007-10-16 06:06:30.069050 -04:00   
6001         ORA 4031                             2007-08-28 14:50:01.355783 -04:00   
5169         ORA 4031                             2007-09-04 19:09:36.310123 -04:00   
5121         ORA 4031                             2007-09-03 14:40:14.575457 -04:00   
5017         ORA 4031                             2007-09-04 19:09:30.969226 -04:00   
4993         ORA 4031                             2007-09-04 19:09:33.179857 -04:00   
4945         ORA 4031                             2007-09-04 19:09:30.955524 -04:00   
4913         ORA 4031                             2007-09-04 19:09:31.641990 -04:00

将显示所有事件的列表。现在,您可以获得特定事件的详细信息,如下所示:

adrci> show incident -mode detail -p "incident_id=14556"
ADR Home = /home/oracle/diag/rdbms/odel11/ODEL11:
*************************************************************************
**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
  INCIDENT_ID          14556
  STATUS            ready
  CREATE_TIME          2007-10-17 04:01:57.725620 -04:00
.
[... and so on ...]
.
  INCIDENT_FILE         /home/oracle/diag/rdbms/odel11/ODEL11/trace/ODEL11_mmon_14831.trc
  OWNER_ID           1
  INCIDENT_FILE         /home/oracle/diag/rdbms/odel11/ODEL11/incident/incdir_14556/ODEL11_mmon_14831_i14556.trc
1 rows fetched

adcri 命令行中显示的信息与您将在企业管理器屏幕中看到的内容相似。但是后者可能更加简单,用户友好得多。当您由于某种原因无法访问 EM Support Workbench 时,adcri 很有用。您还可以使用 adcri 缩减警报日志文件或搜索某些日志(监听器、css、crs、警报等)中的特定模式等。如果您希望以编程方式使用 ADR,adcri 也很有用。

新的警报日志

在 Oracle 数据库 11g 中,警报日志是用 XML 格式编写的。为了与以前的工具兼容,传统的警报日志也在 trace 目录下的 ADR 主目录中提供。例如,在上述示例中,您可以在 /home/oracle/diag/rdbms/odel11/ODEL11/trace 目录中找到 alert_ODEL11.log.但是其他警报日志为 XML 格式,位于 ADR 主目录下的 alert 子目录中。我们来看文件:

$ pwd
/home/oracle/diag/rdbms/odel11/ODEL11/alert
$ ls -ltr
total 60136
-rw-r----- 1 oracle oinstall 10485977 Sep 13 17:44 log_1.xml
-rw-r----- 1 oracle oinstall 10486008 Oct 16 06:35 log_2.xml
-rw-r----- 1 oracle oinstall 10485901 Oct 16 07:27 log_3.xml
-rw-r----- 1 oracle oinstall 10485866 Oct 16 08:12 log_4.xml
-rw-r----- 1 oracle oinstall 10486010 Oct 17 23:56 log_5.xml
-rw-r----- 1 oracle oinstall 9028631 Oct 21 20:07 log.xml

注意,有多个文件:log_1.xml、log_2.xml 等。当 log.xml 达到一定大小时,该文件重命名为 log_?。xml,系统启动一个新文件。这可以防止警报日志变得过大而无法管理。

新的警报日志通过 adrci 实用程序 — ADR 命令行工具进行访问,您已经在前面的部分对它有所了解。通过 adrci 工具发出:

adrci> show alert Choose the alert log from the following homes to view: 1: diag/rdbms/odel11/ODEL11 2:diag/clients/user_oracle/host_1967384410_11 3:diag/clients/user_unknown/host_411310321_11 4:diag/tnslsnr/oradba3/listener Q:to quit Please select option:

您可以从菜单中选择一个主目录或者自己提供一个特定的主目录:

adrci> set homepath diag/rdbms/odel11/ODEL11
adrci> show alert
ADR Home = /home/oracle/diag/rdbms/odel11/ODEL11:
[... and the whole alert log show up here ...]

您可能不想选择整个警报日志,只是希望指定结尾的几行,例如 10 行(类似于 UNIX 中的 tail -10 命令):

adrci> show alert -tail 10
2007-09-23 19:57:44.502000 -04:00
Errors in file /home/oracle/diag/rdbms/odel11/ODEL11/trace/ODEL11_arc1_20810.trc:
[... the rest of the 10 lines ...]

或许它最常用的是不断地显示警报日志的后几行,有点类似于 UNIX 中的 tail -f 命令。

adrci> show alert -tail -f

您可以在 adrci 命令行提示符下执行脚本。下面是一个 Windows 脚本示例,它设置主目录并显示警报日志的最后 10 行:

C:>type show_alert_10lines.cmd
set homepath diagrdbmslapdb11lapdb11
show alert -tail 10

您可以按以下方式调用该脚本:

adrci script=show_alert_10lines.cmd

类似的功能是 exec 参数,它允许您直接从命令行运行命令:

adrci exec=”show homes; show catalog”

在 adrci 提示符下,您还可以使用“run”命令或“@”符号运行命令:

adrci>> @show_alert_10lines.cmd

警报日志为 XML 文件的一个最大好处是信息以结构化方式编写。警报日志不再是非结构化数据的信息库。XML 格式使文件可以作为表通过 adrci 进行查看。要查看该“表”的字段,使用 describe 命令:

adrci>>describe alert_ext
Name                                 Type                     NULL?
------------------------------------------------------- --------------------------------------- -----------
ORIGINATING_TIMESTAMP            timestamp
NORMALIZED_TIMESTAMP            timestamp
ORGANIZATION_ID                    text(65)
COMPONENT_ID                       text(65)
HOST_ID                              text(65)
HOST_ADDRESS                       text(17)
MESSAGE_TYPE                       number
MESSAGE_LEVEL                      number
MESSAGE_ID                          text(65)
MESSAGE_GROUP                     text(65)
CLIENT_ID                            text(65)
MODULE_ID                           text(65)
PROCESS_ID                           text(33)
THREAD_ID                           text(65)
USER_ID                               text(65)
INSTANCE_ID                         text(65)
DETAILED_LOCATION                  text(161)
UPSTREAM_COMP_ID                  text(101)
DOWNSTREAM_COMP_ID              text(101)
EXECUTION_CONTEXT_ID              text(101)
EXECUTION_CONTEXT_SEQUENCE      number
ERROR_INSTANCE_ID                  number
ERROR_INSTANCE_SEQUENCE          number
MESSAGE_TEXT                       text(2049)
MESSAGE_ARGUMENTS                text(129)
SUPPLEMENTAL_ATTRIBUTES          text(129)
SUPPLEMENTAL_DETAILS             text(129)
PARTITION                            number
RECORD_ID                           number
FILENAME                            text(513)
PROBLEM_KEY                        text(65)

由于信息是非结构化的,您可以进行精度搜索。假设您希望搜索警报日志中与某个字段中的特定值匹配的行。示例如下:

adrci>> show alert -p "module_id='DBMS_SCHEDULER'"

这显示模块 id 为 dbms_scheduler 的进程编写的所有行。您还可以使用不等式运算符(不包含 DBMS_SCHEDULER):

adrci>>show alert -p "module_id != 'DBMS_SCHEDULER'"

否则,可以使用模式匹配运算符:

adrci>>show alert -p "module_id like '%SCHEDULER'"

spool 命令的作用与它在 SQL*Plus 中的同名命令一样。您可以删除输出中的多余行并生成一个文件:

adrci>> spool a
adrci>> show alert -tail 50
adrci>> spool off

它创建一个包含警报日志的后 50 行的文件 (a.ado)。该选项的一大用途是从警报日志中提取特定类型的消息。如果您希望从警报日志中提取与流相关的语句,使用以下命令:

adrci> show alert -p "message_text like '%STREAM%'"

您也可以通过 adrci 命令提示符查看在 ADR 基目录中生成的所有跟踪文件。

adrci>> show tracefile

上述命令显示在 ADR 目录中生成的所有跟踪文件的列表。要按相反的顺序显示特定类型的跟踪文件(例如,“reco”),使用以下命令:

adrci>>show tracefile %reco% -rt
  18-JUL-07 22:59:50 diagrdbmslapdb11lapdb11tracelapdb11_reco_4604.trc
  12-JUL-07 09:48:23 diagrdbmslapdb11lapdb11tracelapdb11_reco_4236.trc
  11-JUL-07 10:30:22 diagrdbmslapdb11lapdb11tracelapdb11_reco_3256.trc

adrci 提供了许多其他选项,可通过最高效的方式查看警报日志和相关文件。

Tags:Oracle 数据库 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接