Oracle SQLT - Amazon Relational Database Service

Oracle SQLT

Amazon RDS 通过使用 SQLT 选项来支持 Oracle SQLTXPLAIN (SQLT)。

Oracle EXPLAIN PLAN 语句可以确定 SQL 语句的执行计划。它可以验证 Oracle 优化程序是否选择某个执行计划,例如嵌套循环联接。它还可以帮助您了解优化程序的决定,例如为什么选择嵌套循环联接而不是哈希联接。所以 EXPLAIN PLAN 可帮助您了解该语句的效果。

SQLT 是一个生成报告的 Oracle 实用程序。报告包括对象统计信息、对象元数据、与优化程序相关的初始化参数,以及数据库管理员可用于调整 SQL 语句以获得最佳性能的其他信息。SQLT 会生成一个 HTML 报告,其中包含报表中所有部分的超链接。

与 Automatic Workload Repository 或 Statspack 报告不同,SQLT 适用于单个 SQL 语句。SQLT 是收集、存储和显示性能数据的 SQL、PL/SQL 和 SQL*Plus 文件的集合。

下面是每个 SQLT 版本支持的 Oracle 版本。

SQLT 版本 Oracle Database 21c Oracle Database 19c Oracle Database 12c 第 2 版 (12.2) Oracle Database 12c 第 1 版 (12.1)

2018-07-25.v1

支持

支持

支持

支持

2018-03-31.v1

不支持

不支持

支持

支持

2016-04-29.v1

不支持

不支持

支持

支持

下载 SQLT 并了解它的使用说明:

您可对下列任一 Oracle 数据库版本使用 SQLT:

  • Oracle Database 21c (21.0.0.0)

  • Oracle Database 19c (19.0.0.0)

  • Oracle Database 12c 第 2 版 (12.2.0.1)

  • Oracle Database 12c 第 1 版 (12.1.0.2)

Amazon RDS 不支持以下 SQLT 方法:

  • XPLORE

  • XHUME

SQLT 的先决条件

以下是使用 SQLT 的先决条件:

  • 您必须删除 SQLT 所需的用户和角色 (如果存在)。

    SQLT 选项将在数据库实例上创建以下用户和角色:

    • SQLTXPLAIN 用户

    • SQLTXADMIN 用户

    • SQLT_USER_ROLE 角色

    如果数据库实例具有这些用户或角色中的任意一个,请使用 SQL 客户端登录到数据库实例,并使用以下语句将其删除:

    DROP USER SQLTXPLAIN CASCADE; DROP USER SQLTXADMIN CASCADE; DROP ROLE SQLT_USER_ROLE CASCADE;
  • 您必须删除 SQLT 所需的表空间 (如果存在)。

    SQLT 选项将在数据库实例上创建以下表空间:

    • RDS_SQLT_TS

    • RDS_TEMP_SQLT_TS

    如果数据库实例有这些表空间,请使用 SQL 客户端登录数据库实例,并将其删除。

SQLT 选项设置

SQLT 可以使用由 Oracle Tuning Pack 和 Oracle Diagnostics Pack 提供的许可功能。Oracle Tuning Pack 包括 SQL Tuning Advisor,Oracle Diagnostics Pack 包括 Automatic Workload Repository。SQLT 设置可允许或禁止从 SQLT 访问这些功能。

Amazon RDS 支持 SQLT 选项的以下设置。

选项设置 有效值 默认值 描述

LICENSE_PACK

T, D, N

N

要使用 SQLT 访问的 Oracle 管理包。输入以下值之一:

  • T 指示您拥有 Oracle Tuning Pack 和 Oracle Diagnostics Pack 的许可,并且希望从 SQLT 访问 SQL Tuning Advisor 和 Automatic Workload Repository。

  • D 指示您拥有 Oracle Diagnostics Pack 的许可,并且希望从 SQLT 访问 Automatic Workload Repository。

  • N 指示您没有 Oracle Tuning Pack 和 Oracle Diagnostics Pack 的许可,或者您拥有其中一项或两项的许可,但不希望 SQLT 访问它们。

注意

Amazon RDS 不提供这些 Oracle 管理包的许可。如果您指示要使用未包含在数据库实例中的包,则可以对数据库实例使用 SQLT。不过,SQLT 无法访问该包,并且 SQLT 报告不包括该包的数据。例如,如果您指定 T,但数据库实例不包括 Oracle Tuning Pack,则 SQLT 可用于数据库实例,但其生成的报告不包含与 Oracle Tuning Pack 相关的数据。

VERSION

2016-04-29.v1

2018-03-31.v1

2018-07-25.v1

2016-04-29.v1

要安装的 SQLT 版本。

注意

对于 Oracle Database 19c 和 21c,唯一受支持的版本是 2018-07-25.v1。此版本是这些发布的默认版本。

添加 SQLT 选项

下面是将 SQLT 选项添加到数据库实例的一般过程:

  1. 创建新的选项组,或者复制或修改现有选项组。

  2. 向选项组添加 SQLT 选项。

  3. 将选项组与数据库实例相关联。

在添加 SQLT 选项后,一旦激活该选项组,就会激活 SQLT。

将 SQLT 选项添加到数据库实例
  1. 确定您要使用的选项组。您可以创建新的选项组,或使用现有选项组。如果您想使用现有选项组,请跳到下一步。或者,通过以下设置创建自定义数据库选项组:

    1. 对于 Engine,请选择要使用的 Oracle 版本。所有版本均支持 SQLT 选项。

    2. 对于主引擎版本,选择数据库实例的版本。

    有关更多信息,请参阅“创建选项组”。

  2. SQLT 选项添加到该选项组。有关添加选项的更多信息,请参阅 将选项添加到选项组

  3. 将选项组应用到新的或现有的数据库实例:

  4. (可选) 使用 SQLT 选项验证每个数据库实例上的 SQLT 安装。

    1. 使用 SQL 客户端以主用户身份连接到数据库实例。

      有关使用 SQL 客户端连接到 Oracle 数据库实例的信息,请参阅连接到 RDS for Oracle 数据库实例

    2. 运行以下查询:

      SELECT sqltxplain.sqlt$a.get_param('tool_version') sqlt_version FROM DUAL;

      查询返回 Amazon RDS 上的 SQLT 选项的当前版本。12.1.160429 是 Amazon RDS 上可用的 SQLT 版本的一个例子。

  5. 更改由 SQLT 选项创建的用户的密码。

    1. 使用 SQL 客户端以主用户身份连接到数据库实例。

    2. 运行以下 SQL 语句更改 SQLTXADMIN 用户的密码:

      ALTER USER SQLTXADMIN IDENTIFIED BY new_password ACCOUNT UNLOCK;
      注意

      作为安全最佳实践,请指定除此处所示提示以外的密码。

    3. 运行以下 SQL 语句更改 SQLTXPLAIN 用户的密码:

      ALTER USER SQLTXPLAIN IDENTIFIED BY new_password ACCOUNT UNLOCK;
      注意

      作为安全最佳实践,请指定除此处所示提示以外的密码。

注意

升级 SQLT 需要卸载 SQLT 的旧版本然后安装新版本。因此,在升级 SQLT 时,所有 SQLT 元数据都可能会丢失。数据库的主要版本升级也会卸载并重新安装 SQLT。主版本升级的示例是从 Oracle Database 12c 第 2 版(12.2)升级到 Oracle Database 19c。

使用 SQLT

SQLT 可与 Oracle SQL*Plus 实用程序一起使用。

使用 SQLT
  1. 从 My Oracle Support 网站上的文档 215187.1 下载 SQLT .zip 文件。

    注意

    您无法从 My Oracle Support 网站中下载 SQLT 12.1.160429。Oracle 已弃用该旧版本。

  2. 解压缩 SQLT .zip 文件。

  3. 从命令提示符处,转到文件系统上的 sqlt/run 目录。

  4. 从命令提示符处,打开 SQL*Plus,并以主用户身份连接到数据库实例。

    有关使用 SQL*Plus 连接到数据库实例的信息,请参阅 连接到 RDS for Oracle 数据库实例

  5. 获取 SQL 语句的 SQL ID:

    SELECT SQL_ID FROM V$SQL WHERE SQL_TEXT='sql_statement';

    输出类似于以下内容:

    SQL_ID ------------- chvsmttqjzjkn
  6. 使用 SQLT 分析 SQL 语句:

    START sqltxtract.sql sql_id sqltxplain_user_password

    例如,对于 SQL ID chvsmttqjzjkn,输入以下内容:

    START sqltxtract.sql chvsmttqjzjkn sqltxplain_user_password

    SQLT 在运行 SQLT 命令的目录中生成 HTML 报告和相关资源作为 .zip 文件。

  7. (可选) 要允许应用程序用户使用 SQLT 诊断 SQL 语句,请使用以下语句向每个应用程序用户授予 SQLT_USER_ROLE

    GRANT SQLT_USER_ROLE TO application_user_name;
    注意

    Oracle 不建议对 SYS 用户或具有 DBA 角色的用户运行 SQLT。最佳实践是通过向应用程序用户授予 SQLT_USER_ROLE,使用应用程序用户账户运行 SQLT 诊断。

升级 SQLT 选项

对于 Amazon RDS for Oracle,您可以将 SQLT 选项从现有版本升级到更高版本。要升级 SQLT 选项,请完成使用 SQLT中的步骤 1–3 以升级到新的 SQLT 版本。此外,如果您在本节的步骤 7 中为以前版本的 SQLT 授予了权限,请再次为新的 SQLT 版本授予权限。

升级 SQLT 选项将导致旧 SQLT 版本的元数据丢失。删除旧 SQLT 版本的架构和相关对象,并安装新版本的 SQLT。有关 SQLT 最新版本中的更改的更多信息,请参阅 My Oracle Support 网站上的文档 1614201.1

注意

不支持版本降级。

修改 SQLT 设置

在启用 SQLT 后,您可以修改该选项的 LICENSE_PACKVERSION 设置。

有关如何修改选项设置的更多信息,请参阅 修改选项设置。有关各项设置的更多信息,请参阅SQLT 选项设置

删除 SQLT 选项

您可以从数据库实例中删除 SQLT。

要从数据库实例中删除 SQLT,请执行下列操作之一:

  • 要从多个数据库实例中删除 SQLT,请从数据库实例所属的选项组中删除 SQLT 选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息,请参阅“从选项组中删除选项”。

  • 要从单个数据库实例中删除 SQLT,请修改该数据库实例,并指定另一个不包含 SQLT 选项的选项组。您可以指定默认(空)选项组,或指定其他自定义选项组。有关更多信息,请参阅 修改 Amazon RDS 数据库实例