执行 Oracle 数据库实例的其他任务
下文中介绍了如何在运行 Oracle 的 Amazon RDS 数据库实例上执行其他 DBA 任务。为了提供托管服务体验,Amazon RDS 不允许通过 shell 访问数据库实例,而仅限访问某些需要高级权限的系统过程和表。
在主数据存储空间中创建和删除目录
要创建目录,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.create_directory
。您可以创建最多 10000 个目录 (全部位于主数据存储空间中)。要删除目录,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.drop_directory
。
create_directory
和 drop_directory
过程具有以下必需参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
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_file
。read_text_file
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
包含文件的目录的名称。 |
|
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-
包含与当前引擎版本相关的修补程序信息。当您执行次要或主要升级时,Amazon RDS 会在应用补丁后的一小时内更新 dbv
.txtlsinventory-
。要验证应用的补丁,请参阅dbv
.txtlsinventory-
。该操作类似于运行 dbv
.txtopatch lsinventory
命令。
注意
本节中的示例假定 BDUMP 目录名为 BDUMP
。在只读副本上,BDUMP 目录名称不同。要了解如何通过对只读副本查询 V$DATABASE.DB_UNIQUE_NAME
来获取 BDUMP 名称,请参阅列出文件。
清单文件使用 Amazon RDS 命名约定 lsinventory-
和 dbv
.txtlsinventory_detail-
,其中 dbv
.txtdbv
是数据库版本的全名。lsinventory-
文件在所有数据库版本上均可用。对应的 dbv
.txtlsinventory_detail-
在 19.0.0.0、ru-2020-01.rur-2020-01.r1 或更高版本上可用。dbv
.txt
例如,如果您的数据库版本为 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
确保下载与当前版本的数据库引擎匹配的文件。
使用控制台下载清单文件
通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases (数据库)。
-
选择要查看其日志文件的数据库实例的名称。
-
选择 Logs & events (日志和事件) 选项卡。
-
向下滚动到日志部分。
-
在日志部分中,搜索
lsinventory
。 -
选择要访问的文件,然后选择下载。
要在 SQL 客户端中读取 lsinventory-
,您可以使用 dbv
.txtSELECT
语句。对于此技术,请使用以下任一 rdsadmin
函数:rdsadmin.rds_file_util.read_text_file
或 rdsadmin.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-
,您可以编写 PL/SQL 程序。此程序使用 dbv
.txtutl_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_parameter
。advisor_task_set_parameter
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
要更改其参数的顾问任务的名称。有效值有:
|
|
varchar2 |
— |
是 |
任务参数的名称。要查找顾问任务的有效参数,请运行以下查询。将
|
|
varchar2 |
— |
是 |
任务参数的值。要查找任务参数的有效值,请运行以下查询。将
|
对于 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_drop
。advisor_task_drop
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
要禁用的顾问任务的名称。唯一有效值为 |
以下命令可删除 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_init
。dbms_stats_init
过程不需要任何参数。
以下命令可重新启用 AUTO_STATS_ADVISOR_TASK
。
EXEC rdsadmin.rdsadmin_util.dbms_stats_init()