执行 Oracle 数据库实例的其他任务 - Amazon Relational Database Service

执行 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.drop_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.listdir。Oracle 副本不支持此过程。listdir 过程具有以下参数。

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

p_directory

varchar2

要列出的目录的名称。

以下示例将目录 PRODUCT_DESCRIPTIONS 的读/写权限授予用户 rdsadmin,然后列出此目录中的文件。

GRANT READ,WRITE ON DIRECTORY PRODUCT_DESCRIPTIONS TO rdsadmin; 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

要读取的文件的名称。

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

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; /

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

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 访问权限。相反,lsinventory-dbv.txt 包含与当前引擎版本相关的修补程序信息。当您执行次要或主要升级时,Amazon RDS 会在应用补丁后的一小时内更新 lsinventory-dbv.txt。要验证应用的补丁,请参阅lsinventory-dbv.txt。该操作类似于运行 opatch lsinventory 命令。

注意

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

清单文件使用 Amazon RDS 命名约定 lsinventory-dbv.txtlsinventory_detail-dbv.txt,其中 dbv 是数据库版本的全名。lsinventory-dbv.txt 文件在所有数据库版本上均可用。对应的 lsinventory_detail-dbv.txt 在 19.0.0.0、ru-2020-01.rur-2020-01.r1 或更高版本上可用。

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

lsinventory-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt lsinventory_detail-19.0.0.0.ru-2021-07.rur-2021-07.r1.txt

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

使用控制台下载清单文件
  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/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 程序包中的过程来管理一些顾问任务。

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

  • Oracle Database 21c (21.0.0)

  • 版本 19.0.0.0.ru-2021-01.rur-2021-01.r1 及更高 Oracle Database 19c 版本

    有关更多信息,请参阅《Amazon RDS for Oracle 发布说明》中的版本 19.0.0.0.ru-2021-01.rur-2021-01.r1

设置顾问任务参数

要为某些顾问任务设置参数,请使用 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;

对于 ACCEPT_PLANS,以下 PL/SQL 程序可将 FALSE 设置为 SYS_AUTO_SPM_EVOLVE_TASK。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;

对于 EXECUTION_DAYS_TO_EXPIRE,以下 PL/SQL 程序可将 10 设置为 AUTO_STATS_ADVISOR_TASK。预定义的任务 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 过程接受以下参数。

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

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()