执行 Oracle 数据库实例的其他任务 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

执行 Oracle 数据库实例的其他任务

下文中介绍了如何在运行 Oracle 的 Amazon RDS 数据库实例上执行其他 DBA 任务。为了提供托管服务体验,Amazon RDS 不允许通过 shell 访问数据库实例,而仅限访问某些需要高级权限的系统过程和表。

在主数据存储空间中创建和删除目录

要创建目录,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.create_directory。您可以创建最多 10000 个目录 (全部位于主数据存储空间中)。要删除目录,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.drop_directory

create_directorydrop_directory 过程具有以下必需参数。

参数名称 数据类型 默认值 是否必需 描述

p_directory_name

varchar2

目录的名称。

以下示例创建一个名为 PRODUCT_DESCRIPTIONS 的新目录。

exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'product_descriptions');

数据字典以大写形式存储目录名称。您可以通过查询 DBA_DIRECTORIES 列出目录。系统将自动选择实际主机路径名称。以下示例获取名为 PRODUCT_DESCRIPTIONS 的目录的目录路径:

SELECT DIRECTORY_PATH FROM DBA_DIRECTORIES WHERE DIRECTORY_NAME='PRODUCT_DESCRIPTIONS'; DIRECTORY_PATH ---------------------------------------- /rdsdbdata/userdirs/01

数据库实例的主用户名在新目录中拥有读取和写入权限,可以向其他用户授予访问权限。EXECUTE 权限不可用于数据库实例上的目录。目录在您的主数据存储空间中创建,将占用空间和 I/O 带宽。

以下示例删除名为 PRODUCT_DESCRIPTIONS 的目录。

exec rdsadmin.rdsadmin_util.create_directory(p_directory_name => 'product_descriptions');
注意

还可以使用 Oracle SQL 命令 DROP DIRECTORY 删除目录。

删除目录不会删除其内容。由于 rdsadmin.rdsadmin_util.create_directory 过程可重用路径名称,因此,删除的目录中的文件会显示在新创建的目录中。在您删除目录之前,我们建议您使用 UTL_FILE.FREMOVE 从目录中删除文件。有关更多信息,请参阅 Oracle 文档中的 FREMOVE 过程

列出数据库实例目录中的文件

要列出目录中的文件,请使用 Amazon RDS 过程 rdsadmin.rds_file_util.listdirlistdir 过程具有以下参数。

参数名称 数据类型 默认值 是否必需 描述

p_directory

varchar2

要列出的目录的名称。

以下示例列出名为 PRODUCT_DESCRIPTIONS 的目录中的文件。

SELECT * FROM TABLE(rdsadmin.rds_file_util.listdir(p_directory => 'PRODUCT_DESCRIPTIONS'));

读取数据库实例目录中的文件

要读取文本文件,请使用 Amazon RDS 过程 rdsadmin.rds_file_util.read_text_fileread_text_file 过程具有以下参数。

参数名称 数据类型 默认值 是否必需 描述

p_directory

varchar2

包含文件的目录的名称。

p_filename

varchar2

要读取的文件的名称。

以下示例在 PRODUCT_DESCRIPTIONS 目录中创建 rice.txt 文件。

declare fh sys.utl_file.file_type; begin fh := utl_file.fopen(location=>'PRODUCT_DESCRIPTIONS', filename=>'rice.txt', open_mode=>'w'); utl_file.put(file=>fh, buffer=>'AnyCompany brown rice, 15 lbs'); utl_file.fclose(file=>fh); end; /

以下示例读取目录 PRODUCT_DESCRIPTIONS 中的文件 rice.txt

SELECT * FROM TABLE (rdsadmin.rds_file_util.read_text_file( p_directory => 'PRODUCT_DESCRIPTIONS', p_filename => 'rice.txt'));

访问 Opatch 文件

Opatch 是一个 Oracle 实用程序,可用于将修补程序应用和回滚到 Oracle 软件。用于确定哪些修补程序已应用于数据库的 Oracle 机制是 opatch lsinventory 命令。为了向自带许可 (BYOL) 客户打开服务请求,Oracle 支持部门会请求 lsinventory 文件,有时还请求由 Opatch 生成的 lsinventory_detail 文件。

为提供托管服务体验,Amazon RDS 未提供对 Opatch 的 Shell 访问权限。相反,Oracle 数据库实例每小时都会在 BDUMP 目录中自动创建清单文件。您对此目录具有读写访问权限。如果在 BDUMP 中看不到您的文件,或者这些文件已过期,请等待一个小时,然后重试。

注意

本节中的示例假定 BDUMP 目录名为 BDUMP。在只读副本上,BDUMP 目录名称不同。要了解如何通过对只读副本查询 V$DATABASE.DB_UNIQUE_NAME 来获取 BDUMP 名称,请参阅列出文件

清单文件使用 Amazon RDS 命名约定 lsinventory-dbv.txtlsinventory_detail-dbv.txt,其中 dbv 是数据库版本的全名。lsinventory-dbv.txt 文件在所有数据库版本上均可用。相应的详细信息文件在以下数据库版本上可用:

  • 19.0.0.0,ru-2020-01.rur-2020-01.r1 或更高版本

  • 18.0.0.0,ru-2020-01.rur-2020-01.r1 或更高版本

  • 12.2.0.1,ru-2020-01.rur-2020-01.r1 或更高版本

  • 12.1.0.2,v19 或更高版本

例如,如果您的数据库版本为 19.0.0.0.ru-2020-04.rur-2020-04.r1,则您的清单文件具有以下名称。

lsinventory-19.0.0.0.ru-2020-04.rur-2020-04.r1.txt lsinventory_detail-19.0.0.0.ru-2020-04.rur-2020-04.r1.txt

确保下载与当前版本的数据库引擎匹配的文件。

使用控制台下载清单文件

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择要查看其日志文件的数据库实例的名称。

  4. 选择 Logs & events (日志和事件) 选项卡。

  5. 向下滚动到日志部分。

  6. 日志部分中,搜索 lsinventory

  7. 选择要访问的文件,然后选择下载

要在 SQL 客户端中读取 lsinventory-dbv.txt,您可以使用 SELECT 语句。对于此技术,请使用以下任一 rdsadmin 函数:rdsadmin.rds_file_util.read_text_filerdsadmin.tracefile_listing

在下面的示例查询中,将 dbv 替换为您的 Oracle 数据库版本。例如,您的数据库版本可能是 19.0.0.0.ru-2020-04.rur-2020-04.r1。

SELECT text FROM TABLE(rdsadmin.rds_file_util.read_text_file('BDUMP', 'lsinventory-dbv.txt'));

要在 SQL 客户端中读取 lsinventory-dbv.txt,您可以编写 PL/SQL 程序。此程序使用 utl_file 读取文件,并使用 dbms_output 打印文件。这些是 Oracle 提供的程序包。

在下面的示例程序中,将 dbv 替换为您的 Oracle 数据库版本。例如,您的数据库版本可能是 19.0.0.0.ru-2020-04.rur-2020-04.r1。

SET SERVEROUTPUT ON DECLARE v_file SYS.UTL_FILE.FILE_TYPE; v_line VARCHAR2(1000); v_oracle_home_type VARCHAR2(1000); c_directory VARCHAR2(30) := 'BDUMP'; c_output_file VARCHAR2(30) := 'lsinventory-dbv.txt'; BEGIN v_file := SYS.UTL_FILE.FOPEN(c_directory, c_output_file, 'r'); LOOP BEGIN SYS.UTL_FILE.GET_LINE(v_file, v_line,1000); DBMS_OUTPUT.PUT_LINE(v_line); EXCEPTION WHEN no_data_found THEN EXIT; END; END LOOP; END; /

或者,查询 rdsadmin.tracefile_listing,并将输出后台打印到一个文件。以下示例将输出后台打印到 /tmp/tracefile.txt

SPOOL /tmp/tracefile.txt SELECT * FROM rdsadmin.tracefile_listing WHERE FILENAME LIKE 'lsinventory%'; SPOOL OFF;

管理顾问任务

Oracle 数据库中包含许多顾问。每个顾问都支持自动化任务和手动任务。您可以使用 rdsadmin.rdsadmin_util 程序包中的过程来管理一些顾问任务。

以下引擎版本中提供了顾问任务过程:

设置顾问任务参数

要为某些顾问任务设置参数,请使用 Amazon RDS 程序 rdsadmin.rdsadmin_util.advisor_task_set_parameteradvisor_task_set_parameter 过程具有以下参数。

参数名称 数据类型 默认值 是否必需 描述

p_task_name

varchar2

要更改其参数的顾问任务的名称。有效值有:

  • AUTO_STATS_ADVISOR_TASK

  • INDIVIDUAL_STATS_ADVISOR_TASK

  • SYS_AUTO_SPM_EVOLVE_TASK

  • SYS_AUTO_SQL_TUNING_TASK

p_parameter

varchar2

任务参数的名称。要查找顾问任务的有效参数,请运行以下查询。将 p_task_name 替换为 p_task_name 的有效值:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

p_value

varchar2

任务参数的值。要查找任务参数的有效值,请运行以下查询。将 p_task_name 替换为 p_task_name 的有效值:

COL PARAMETER_NAME FORMAT a30 COL PARAMETER_VALUE FORMAT a30 SELECT PARAMETER_NAME, PARAMETER_VALUE FROM DBA_ADVISOR_PARAMETERS WHERE TASK_NAME='p_task_name' AND PARAMETER_VALUE != 'UNUSED' ORDER BY PARAMETER_NAME;

对于 SYS_AUTO_SPM_EVOLVE_TASK,以下 PL/SQL 程序可将 ACCEPT_PLANS 设置为 FALSE。SQL Plan Management 自动化任务可验证计划并生成其调查结果的报告,但不会自动发展计划。您可以使用报告来识别新的 SQL 计划基准并手动接受它们。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'SYS_AUTO_SPM_EVOLVE_TASK', p_parameter => 'ACCEPT_PLANS', p_value => 'FALSE'); END;

对于 AUTO_STATS_ADVISOR_TASK,以下 PL/SQL 程序可将 EXECUTION_DAYS_TO_EXPIRE 设置为 10。预定义的任务 AUTO_STATS_ADVISOR_TASK 每天在维护时段自动运行一次。该示例将任务执行的保留周期设置为 10 天。

BEGIN rdsadmin.rdsadmin_util.advisor_task_set_parameter( p_task_name => 'AUTO_STATS_ADVISOR_TASK', p_parameter => 'EXECUTION_DAYS_TO_EXPIRE', p_value => '10'); END;

禁用 AUTO_STATS_ADVISOR_TASK

要禁用 AUTO_STATS_ADVISOR_TASK,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.advisor_task_dropadvisor_task_drop 过程接受以下参数。

注意

此过程在 Oracle Database 12c 第 2 版 (12.2.0.1) 及更高版本中可用。

参数名称 数据类型 默认值 是否必需 描述

p_task_name

varchar2

要禁用的顾问任务的名称。唯一有效值为 AUTO_STATS_ADVISOR_TASK

以下命令可删除 AUTO_STATS_ADVISOR_TASK

EXEC rdsadmin.rdsadmin_util.advisor_task_drop('AUTO_STATS_ADVISOR_TASK')

您可以使用 rdsadmin.rdsadmin_util.dbms_stats_init 重新启用 AUTO_STATS_ADVISOR_TASK

重新启用 AUTO_STATS_ADVISOR_TASK

要重新启用 AUTO_STATS_ADVISOR_TASK,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.dbms_stats_initdbms_stats_init 过程不需要任何参数。

以下命令可重新启用 AUTO_STATS_ADVISOR_TASK

EXEC rdsadmin.rdsadmin_util.dbms_stats_init()

为 Oracle 数据库实例启用大页

Amazon RDS for Oracle 支持 Linux 内核大页,提高了数据库扩展能力。大页会导致页表变小,花在内存管理上的 CPU 时间也减少,从而提高大数据库实例的性能。有关更多信息,请参阅 Oracle 文档中的巨页概述

您可对下列 Oracle 数据库版本使用大页:

  • 19.0.0.0,所有版本

  • 18.0.0.0,所有版本

  • 12.2.0.1,所有版本

  • 12.1.0.2,所有版本

use_large_pages 参数控制是否为数据库实例启用大页。该参数的可能设置包括 ONLYFALSE{DBInstanceClassHugePagesDefault}。在 Oracle 的默认数据库参数组中,use_large_pages 参数设置为 {DBInstanceClassHugePagesDefault}

要控制是否自动为数据库实例启用大页,您可以在参数组中使用 DBInstanceClassHugePagesDefault 公式变量。该值如下所示确定:

  • 对于下表中提及的数据库实例类别,DBInstanceClassHugePagesDefault 默认情况下计算结果始终为 FALSE,而 use_large_pages 的计算结果为 FALSE。如果数据库实例类至少具有 14 GiB 内存,您可为这些数据库实例类手动启用大页。

  • 对于未在下表中提及的数据库实例类别,如果数据库实例类别内存小于 14 GiB,则 DBInstanceClassHugePagesDefault 的计算结果始终为 FALSE。此外,use_large_pages 计算结果为 FALSE

  • 对于未在下表中提及的数据库实例类别,如果实例类别内存至少为 14 GiB 且小于 100 GiB,则 DBInstanceClassHugePagesDefault 默认情况下计算结果为 TRUE。此外,use_large_pages 计算结果为 ONLY。您可以通过将 use_large_pages 设置为 FALSE,手动禁用大页。

  • 对于未在下表中提及的数据库实例类别,如果实例类内存至少为 100 GiB,则 DBInstanceClassHugePagesDefault 的计算结果始终为 TRUE。此外,use_large_pages 的计算结果为 ONLY,并且不能禁用大页。

默认情况下,不为以下数据库实例类启用大页。

数据库实例类系列 默认情况下,不启用具有大页的数据库实例类

db.m5

db.m5.large

db.m4

db.m4.large,db.m4.xlarge,db.m4.2xlarge,db.m4.4xlarge,db.m4.10xlarge

db.t3

db.t3.micro,db.t3.small,db.t3.medium,db.t3.large

有关数据库实例类的更多信息,请参阅 的数据库实例类的硬件规格

要为新的或现有的数据库实例手动启用大页,请将 use_large_pages 参数设置为 ONLY。大页不能与 Oracle 自动内存管理 (AMM) 一起使用。如果将 use_large_pages 参数设置为 ONLY,则还必须将 memory_targetmemory_max_target 都设置为 0.有关为数据库实例设置数据库参数的更多信息,请参阅使用数据库参数组

您也可以设置 sga_targetsga_max_sizepga_aggregate_target 参数。当设置系统全局区域 (SGA) 和程序全局区域 (PGA) 内存参数时,请将这些值加在一起。从可用实例内存 (DBInstanceClassMemory) 中减去此计算得到的总计值,可确定大页分配后的可用内存。必须保留至少 2 GiB 可用内存或总可用实例内存的 10% (取两者中较小的值)。

配置参数之后,必须重启数据库实例才能使更改生效。有关更多信息,请参阅 重启中的数据库实例

注意

Oracle 数据库实例会推迟对与 SGA 相关的初始化参数的更改,直到您重启实例而不进行故障转移。在 Amazon RDS 控制台中,选择重启,但不要 选择通过故障转移重启。在 Amazon CLI 中,调用带 --no-force-failover 参数的 reboot-db-instance 命令。在故障转移期间或导致实例重启的其他维护操作期间,数据库实例不会处理与 SGA 相关的参数。

针对大页,以下示例参数配置手动启用大页。您应根据自己的需要设置这些值。

memory_target = 0 memory_max_target = 0 pga_aggregate_target = {DBInstanceClassMemory*1/8} sga_target = {DBInstanceClassMemory*3/4} sga_max_size = {DBInstanceClassMemory*3/4} use_large_pages = ONLY

假设在参数组中设置以下参数值。

memory_target = IF({DBInstanceClassHugePagesDefault}, 0, {DBInstanceClassMemory*3/4}) memory_max_target = IF({DBInstanceClassHugePagesDefault}, 0, {DBInstanceClassMemory*3/4}) pga_aggregate_target = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*1/8}, 0) sga_target = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*3/4}, 0) sga_max_size = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*3/4}, 0) use_large_pages = {DBInstanceClassHugePagesDefault}

参数组由内存小于 100 GiB 的 db.r4 数据库实例类使用。如果使用这些参数设置并将 use_large_pages 设置为 {DBInstanceClassHugePagesDefault},则会在 db.r4 实例上启用 HugePages。

请考虑在参数组中设置了以下参数值的另一个示例。

memory_target = IF({DBInstanceClassHugePagesDefault}, 0, {DBInstanceClassMemory*3/4}) memory_max_target = IF({DBInstanceClassHugePagesDefault}, 0, {DBInstanceClassMemory*3/4}) pga_aggregate_target = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*1/8}, 0) sga_target = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*3/4}, 0) sga_max_size = IF({DBInstanceClassHugePagesDefault}, {DBInstanceClassMemory*3/4}, 0) use_large_pages = FALSE

该参数组由内存小于 100 GiB 的 db.r4 数据库实例类和 db.r5 数据库实例类使用。使用这些参数设置,则将在 db.r4 和 db.r5 实例上禁用 HugePages。

注意

如果该参数组由具有至少 100 GiB 内存的 db.r4 数据库实例类或 db.r5 数据库实例类使用,则将覆盖 use_large_pagesFALSE 设置并将其设置为 ONLY。在这种情况下,将发送有关覆盖的客户通知。

当大页在数据库实例上处于活动状态后,您可以启用增强监控以查看大页信息。有关更多信息,请参阅 使用增强监测来监控操作系统指标

启用扩展数据类型

Amazon RDS Oracle Database 12c 支持扩展的数据类型。对于扩展数据类型,VARCHAR2、NVARCHAR2 和 RAW 数据类型的最大大小为 32,767 字节。要使用扩展数据类型,请将 MAX_STRING_SIZE 参数设置为 EXTENDED。有关更多信息,请参阅 Oracle 文档中的扩展数据类型

如果您不希望使用扩展数据类型,请将 MAX_STRING_SIZE 参数设置为 STANDARD(默认值)。在将该参数设置为 STANDARD 时,VARCHAR2 和 NVARCHAR2 数据类型的大小限制为 4,000 字节,RAW 数据类型的大小限制为 2,000 字节。

您可以在新的或现有的数据库实例上启用扩展数据类型。对于新的数据库实例,在启用扩展数据类型时,数据库实例的创建时间通常较长。对于现有的数据库实例,数据库实例在转换过程中不可用。

下面是启用了扩展数据类型的数据库实例的注意事项:

  • 在为数据库实例启用扩展数据类型时,您无法将数据库实例改回使用标准数据类型大小。在转换数据库实例以使用扩展数据类型后,如果将 MAX_STRING_SIZE 参数重新设置为 STANDARD,则会导致 incompatible-parameters 状态。

  • 在还原使用扩展数据类型的数据库实例时,您必须指定一个参数组并将 MAX_STRING_SIZE 参数设置为 EXTENDED。在还原期间,如果指定默认参数组或任何其他参数组并将 MAX_STRING_SIZE 设置为 STANDARD,则会导致 incompatible-parameters 状态。

  • 我们建议您不要为在 t2.micro 数据库实例类上运行的 Oracle 数据库实例启用扩展数据类型。

如果由于 MAX_STRING_SIZE 设置而导致数据库实例状态为 incompatible-parameters,数据库实例将保持不可用状态,直到您将 MAX_STRING_SIZE 参数设置为 EXTENDED 并重新引导数据库实例。

为新数据库实例启用扩展数据类型

为新数据库实例启用扩展数据类型

  1. 在参数组中将 MAX_STRING_SIZE 参数设置为 EXTENDED

    要设置该参数,您可以创建新的参数组或修改现有的参数组。

    有关更多信息,请参阅使用数据库参数组

  2. 创建新的 Amazon RDS Oracle 数据库实例,并将 MAX_STRING_SIZE 设置为 EXTENDED 的参数组与该数据库实例相关联。

    有关更多信息,请参阅 创建 Amazon RDS 数据库实例

为现有数据库实例启用扩展数据类型

在修改数据库实例以启用扩展数据类型时,将转换数据库中的数据以使用扩展大小。数据库实例在转换期间不可用。转换数据所需的时间取决于数据库实例使用的数据库实例类和数据库大小。

注意

在启用扩展数据类型后,您无法在转换期间执行时间点还原以还原到某个时间。您可以还原到紧靠转换前或转换后的时间。

为现有数据库实例启用扩展数据类型

  1. 拍摄数据库的快照。

    如果在数据库中具有无效的对象,Amazon RDS 将尝试重新编译这些对象。如果 Amazon RDS 无法重新编译无效的对象,转换为扩展数据类型可能会失败。如果在转换过程中出现问题,您可以使用快照还原数据库。请始终在转换之前检查无效的对象,并修复或删除这些无效的对象。对于生产数据库,我们建议先在数据库实例的副本上测试转换过程。

    有关更多信息,请参阅 创建数据库快照

  2. 在参数组中将 MAX_STRING_SIZE 参数设置为 EXTENDED

    要设置该参数,您可以创建新的参数组或修改现有的参数组。

    有关更多信息,请参阅使用数据库参数组

  3. 修改数据库实例以将其与 MAX_STRING_SIZE 设置为 EXTENDED 的参数组相关联。

    有关更多信息,请参阅 修改 Amazon RDS 数据库实例

  4. 重新引导数据库实例以使参数更改生效。

    有关更多信息,请参阅 重启中的数据库实例