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

执行 Oracle 数据库实例的常见系统任务

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

断开会话连接

要终止专用服务器进程以断开当前会话连接,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.disconnectdisconnect 过程具有以下参数。

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

sid

number

会话标识符。

serial

number

会话的序列号。

method

varchar

'IMMEDIATE'

有效值为 'IMMEDIATE''POST_TRANSACTION'

以下示例断开一个会话。

begin rdsadmin.rdsadmin_util.disconnect( sid => sid, serial => serial_number); end; /

要获取会话标识符和会话序列号,请查询 V$SESSION 视图。以下示例获取用户 AWSUSER 的所有会话。

SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';

数据库必须处于打开状态,才能使用此方法。有关断开会话连接的更多信息,请参阅 Oracle 文档中的 ALTER SYSTEM

终止会话

要终止会话,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.killkill 过程具有以下参数。

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

sid

number

会话标识符。

serial

number

会话的序列号。

method

varchar

null

有效值为 'IMMEDIATE''PROCESS'。如果您指定 IMMEDIATE,其效果与运行以下语句相同:

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE

如果您指定 PROCESS,将终止与会话关联的进程。仅当终止使用 IMMEDIATE 的会话失败时,才指定 PROCESS

要获取会话标识符和会话序列号,请查询 V$SESSION 视图。以下示例获取用户 AWSUSER 的所有会话。

SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE USERNAME = 'AWSUSER';

以下示例终止会话。

BEGIN rdsadmin.rdsadmin_util.kill( sid => sid, serial => serial_number, method => 'IMMEDIATE'); END; /

以下示例终止与会话关联的进程。

BEGIN rdsadmin.rdsadmin_util.kill( sid => sid, serial => serial_number, method => 'PROCESS'); END; /

在会话中取消 SQL 语句

要在会话中取消 SQL 语句,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.cancel

注意

Oracle Database 19c (19.0.0) 和 RDS for Oracle 的所有更高主要和次要版本均支持此过程。

cancel 过程具有以下参数。

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

sid

number

会话标识符。

serial

number

会话的序列号。

sql_id

varchar2

null

SQL 语句的 SQL 标识符。

以下示例在会话中取消 SQL 语句。

begin rdsadmin.rdsadmin_util.cancel( sid => sid, serial => serial_number, sql_id => sql_id); end; /

要获取会话标识符、会话序列号和 SQL 语句的 SQL 标识符,请查询 V$SESSION 视图。以下示例获取用户 AWSUSER 的所有会话和 SQL 标识符。

select SID, SERIAL#, SQL_ID, STATUS from V$SESSION where USERNAME = 'AWSUSER';

启用和禁用受限制的会话

要启用和禁用受限制的会话,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.restricted_sessionrestricted_session 过程具有以下参数。

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

p_enable

布尔值

true

设置为 true 则启用受限制的会话;设置为 false 则禁用受限制的会话。

以下示例介绍了如何启用和禁用受限制的会话。

/* Verify that the database is currently unrestricted. */ SELECT LOGINS FROM V$INSTANCE; LOGINS ------- ALLOWED /* Enable restricted sessions */ EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => true); /* Verify that the database is now restricted. */ SELECT LOGINS FROM V$INSTANCE; LOGINS ---------- RESTRICTED /* Disable restricted sessions */ EXEC rdsadmin.rdsadmin_util.restricted_session(p_enable => false); /* Verify that the database is now unrestricted again. */ SELECT LOGINS FROM V$INSTANCE; LOGINS ------- ALLOWED

刷新共享池

要刷新共享池,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_shared_poolflush_shared_pool 过程没有参数。

以下示例刷新共享池。

EXEC rdsadmin.rdsadmin_util.flush_shared_pool;

刷新缓冲区缓存

要刷新缓冲区缓存,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_buffer_cacheflush_buffer_cache 过程没有参数。

以下示例刷新缓冲区缓存。

EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;

刷新数据库智能闪存缓存

要刷新数据库智能闪存缓存,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_flash_cacheflush_flash_cache 过程没有参数。以下示例刷新数据库智能闪存缓存。

EXEC rdsadmin.rdsadmin_util.flush_flash_cache;

有关将数据库智能闪存缓存与 RDS for Oracle 结合使用的更多信息,请参阅 在 RDS for Oracle 实例存储中存储临时数据

向 SYS 对象授予 SELECT 或 EXECUTE 权限

通常,您使用可包含多个对象的角色来传输权限。要为单个对象授予权限,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.grant_sys_object。此过程仅授予已通过角色或直接授权授予主用户的权限。

grant_sys_object 过程具有以下参数。

重要

对于所有参数值,除非您使用区分大小写的标识符创建了用户,否则请使用大写字母。例如,如果您运行 CREATE USER myuserCREATE USER MYUSER,则数据字典将存储 MYUSER。但是,如果您在 CREATE USER "MyUser" 中使用双引号,则数据字典将存储 MyUser

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

p_obj_name

varchar2

要授予其权限的对象的名称。对象可以是目录、函数、包、过程、序列、表或视图。对象名称的拼写必须与其在 DBA_OBJECTS 中出现时的拼写完全相同。由于大多数系统对象都是用大写形式定义的,因此,建议您先尝试这样做。

p_grantee

varchar2

要向其授予权限的对象的名称。对象可以是架构或角色。

p_privilege

varchar2

null

p_grant_option

布尔值

false

设置为 true,则使用 with grant option。12.1.0.2.v4 和更高版本、所有 12.2.0.1 版本以及所有 19.0.0 版本支持 p_grant_option 参数。

以下示例将名为 V_$SESSION 的对象的 select 权限授予名为 USER1 的用户。

begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SESSION', p_grantee => 'USER1', p_privilege => 'SELECT'); end; /

以下示例使用授予选项将名为 V_$SESSION 的对象的 select 权限授予名为 USER1 的用户。

begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SESSION', p_grantee => 'USER1', p_privilege => 'SELECT', p_grant_option => true); end; /

要能够授予针对某个对象的权限,您的账户必须具有通过使用授权选项或通过使用 with admin option 授予的角色直接为其授予的这些权限。在最常见的情况下,您可能希望授予已授予给 SELECT 角色的针对 DBA 视图的 SELECT_CATALOG_ROLE 权限。如果尚未使用 with admin option 将该角色直接授予您的用户,则您将无法转让此权限。如果您具有 DBA 权限,则可直接将该角色授予其他用户。

以下示例将 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 授予 USER1。由于使用了 with admin option,因此,USER1 现在可向已获得 SELECT_CATALOG_ROLE 的 SYS 对象授予访问权。

GRANT SELECT_CATALOG_ROLE TO USER1 WITH ADMIN OPTION; GRANT EXECUTE_CATALOG_ROLE to USER1 WITH ADMIN OPTION;

无需对已获得 PUBLIC 的对象重新授权。如果您使用 grant_sys_object 过程重新授予访问权,则此过程调用将成功。

撤销 SYS 对象的 SELECT 或 EXECUTE 权限

要撤销单个对象的特权,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.revoke_sys_object。该过程仅撤消已通过角色或直接授权授予主账户的权限。

revoke_sys_object 过程具有以下参数。

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

p_obj_name

varchar2

要撤销其权限的对象的名称。对象可以是目录、函数、包、过程、序列、表或视图。对象名称的拼写必须与其在 DBA_OBJECTS 中出现时的拼写完全相同。由于大多数系统对象都是用大写形式定义的,因此,建议您先尝试这样做。

p_revokee

varchar2

要撤销其权限的对象的名称。对象可以是架构或角色。

p_privilege

varchar2

null

以下示例从名为 V_$SESSION 的用户撤销名为 USER1 的对象的 select 权限。

begin rdsadmin.rdsadmin_util.revoke_sys_object( p_obj_name => 'V_$SESSION', p_revokee => 'USER1', p_privilege => 'SELECT'); end; /

管理 Oracle 数据库实例的 RDS_X$ 视图

您可能需要访问 SYS.X$ 固定表,这些表只能由 SYS 访问。要在符合条件的 X$ 表上创建 SYS.RDS_X$ 视图,请使用 rdsadmin.rdsadmin_util 包中的过程。您的主用户将自动获得对于 RDS_X$ 视图的权限 SELECT … WITH GRANT OPTION

以下数据库引擎版本中提供了 rdsadmin.rdsadmin_util 过程:

  • 21.0.0.0.ru-2023-10.rur-2023-10.r1 以及更高的 Oracle Database 21c 版本

  • 19.0.0.0.ru-2023-10.rur-2023-10.r1 以及更高的 Oracle Database 19c 版本

重要

在内部,rdsadmin.rdsadmin_util 包在 X$ 表上创建视图。X$ 表是内部系统对象,Oracle 数据库文档中未对此进行描述。我们建议您在非生产数据库中测试特定的视图,并且在 Oracle 支持的指导下仅在生产数据库中创建视图。

列出符合条件在 RDS_X$ 视图中使用的 X$ 固定表

要列出符合条件在 RDS_X$ 视图中使用的 X$ 表,请使用 RDS 过程 rdsadmin.rdsadmin_util.list_allowed_sys_x$_views。此过程不接受任何参数。以下语句列出了所有符合条件的 X$ 表(包括示例输出)。

SQL> SET SERVEROUTPUT ON SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_allowed_sys_x$_views); 'X$BH' 'X$K2GTE' 'X$KCBWBPD' 'X$KCBWDS' 'X$KGLLK' 'X$KGLOB' 'X$KGLPN' 'X$KSLHOT' 'X$KSMSP' 'X$KSPPCV' 'X$KSPPI' 'X$KSPPSV' 'X$KSQEQ' 'X$KSQRS' 'X$KTUXE' 'X$KQRFP'

符合条件的 X$ 表的列表可能随时间推移而变化。要确保符合条件的 X$ 固定表的列表是最新的,请定期重新运行 list_allowed_sys_x$_views

创建 SYS.RDS_X$ 视图

要在符合条件的 X$ 表上创建 RDS_X$ 视图,请使用 RDS 过程 rdsadmin.rdsadmin_util.create_sys_x$_view。您只能为 rdsadmin.rdsadmin_util.list_allowed_sys_x$_views 的输出中列出的表创建视图。create_sys_x$_view 过程接受以下参数。

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

p_x$_tbl

varchar2

Null

有效的 X$ 表名称。此值必须是 list_allowed_sys_x$_views 报告的 X$ 表之一。

p_force_creation

布尔值

FALSE

一个值,表示是否强制为 X$ 表创建已存在的 RDS_X$ 视图。默认情况下,如果视图已经存在,RDS 将不会创建该视图。要强制创建,请将此参数设置为 TRUE

下面的示例基于表 X$KGLOB 创建 SYS.RDS_X$KGLOB 视图。视图名称的格式为 RDS_X$tablename

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.create_sys_x$_view('X$KGLOB'); PL/SQL procedure successfully completed.

以下数据字典查询列出视图 SYS.RDS_X$KGLOB 并显示其状态。您的主用户将自动获得对该视图的 SELECT ... WITH GRANT OPTION 权限。

SQL> SET SERVEROUTPUT ON SQL> COL OWNER FORMAT A30 SQL> COL OBJECT_NAME FORMAT A30 SQL> COL STATUS FORMAT A30 SQL> SET LINESIZE 200 SQL> SELECT OWNER, OBJECT_NAME, STATUS FROM DBA_OBJECTS WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB'; OWNER OBJECT_NAME STATUS ------------------------------ ------------------------------ ------------------------------ SYS RDS_X$KGLOB VALID
重要

不能保证 X$ 表在升级前后保持不变。在引擎升级期间,RDS for Oracle 会删除并重新创建 X$ 表上的 RDS_X$ 视图。然后它向主用户授予 SELECT ... WITH GRANT OPTION 权限。升级后,根据需要向数据库用户授予对相应 RDS_X$ 视图的权限。

列出 SYS.RDS_X$ 视图

要列出现有 RDS_X$ 视图,请使用 RDS 过程 rdsadmin.rdsadmin_util.list_created_sys_x$_views。该过程仅列出由过程 create_sys_x$_view 创建的视图。以下示例列出了具有相应 RDS_X$ 视图的 X$ 表(包括示例输出)。

SQL> SET SERVEROUTPUT ON SQL> COL XD_TBL_NAME FORMAT A30 SQL> COL STATUS FORMAT A30 SQL> SET LINESIZE 200 SQL> SELECT * FROM TABLE(rdsadmin.rdsadmin_util.list_created_sys_x$_views); XD_TBL_NAME STATUS ------------------------------ ------------------------------ X$BH VALID X$K2GTE VALID X$KCBWBPD VALID 3 rows selected.

删除 RDS_X$ 视图

要删除 SYS.RDS_X$ 视图,请使用 RDS 过程 rdsadmin.rdsadmin_util.drop_sys_x$_view。您只能删除 rdsadmin.rdsadmin_util.list_allowed_sys_x$_views 的输出中列出的视图。drop_sys_x$_view 过程接受以下参数。

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

p_x$_tbl

varchar2

Null

有效的 X$ 固定表名称。此值必须是 list_created_sys_x$_views 报告的 X$ 固定表之一。

以下示例删除了在表 X$KGLOB 上创建的 RDS_X$KGLOB 视图。

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.drop_sys_x$_view('X$KGLOB'); PL/SQL procedure successfully completed.

以下示例显示视图 SYS.RDS_X$KGLOB 已被删除(包括示例输出)。

SQL> SET SERVEROUTPUT ON SQL> COL OWNER FORMAT A30 SQL> COL OBJECT_NAME FORMAT A30 SQL> COL STATUS FORMAT A30 SQL> SET LINESIZE 200 SQL> SELECT OWNER, OBJECT_NAME, STATUS FROM DBA_OBJECTS WHERE OWNER = 'SYS' AND OBJECT_NAME = 'RDS_X$KGLOB'; no rows selected

向非主用户授予权限

您可以使用 SYS 角色向 SELECT_CATALOG_ROLE 架构中的多个对象授予 select 权限。SELECT_CATALOG_ROLE 角色向用户授予对数据字典视图的 SELECT 权限。以下示例向名为 SELECT_CATALOG_ROLE 的用户授予角色 user1

GRANT SELECT_CATALOG_ROLE TO user1;

您可以使用 EXECUTE 角色向 SYS 架构中的多个对象授予 EXECUTE_CATALOG_ROLE 权限。EXECUTE_CATALOG_ROLE 角色向用户授予对数据字典中的包和过程的 EXECUTE 权限。以下示例向名为 user1 的用户授予角色 EXECUTE_CATALOG_ROLE

GRANT EXECUTE_CATALOG_ROLE TO user1;

以下示例获取角色 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 允许的权限。

SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE IN ('SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE') ORDER BY ROLE, TABLE_NAME ASC;

以下示例将创建一个名为 user1 的非主用户,授予 CREATE SESSION 权限并授予对名为 sh.sales 的数据库的 SELECT 权限。

CREATE USER user1 IDENTIFIED BY PASSWORD; GRANT CREATE SESSION TO user1; GRANT SELECT ON sh.sales TO user1;

创建自定义函数来验证密码

您可以通过以下方式创建自定义密码验证函数:

  • 要使用标准验证逻辑,并将函数存储在 SYS 架构中,请使用 create_verify_function 过程。

  • 要使用自定义验证逻辑,或者避免将函数存储在 SYS 架构中,请使用 create_passthrough_verify_fcn 过程。

create_verify_function 过程

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_password_verify.create_verify_function 创建自定义函数来验证密码。RDS for Oracle 版本 12.1.0.2.v5 和所有更高的主要和次要版本都支持 create_verify_function 过程。

create_verify_function 过程具有以下参数。

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

p_verify_function_name

varchar2

自定义函数的名称。将在 SYS 架构中为您创建此函数。为用户配置文件分配此函数。

p_min_length

number

8

要求的字符的最小数量。

p_max_length

number

256

允许的字符的最大数量。

p_min_letters

number

1

要求的字母的最小数量。

p_min_uppercase

number

0

要求的大写字母的最小数量。

p_min_lowercase

number

0

要求的小写字母的最小数量。

p_min_digits

number

1

要求的数字的最小数量。

p_min_special

number

0

要求的特殊字符的最小数量。

p_min_different_chars

number

3

旧密码和新密码之间需要的不同字符的最小数。

p_disallow_username

布尔值

true

设置为 true 可禁止在密码中使用用户名。

p_disallow_reverse

布尔值

true

设置为 true 则禁止在密码中使用反向用户名。

p_disallow_db_name

布尔值

true

设置为 true 则禁止在密码中使用数据库或服务器名称。

p_disallow_simple_strings

布尔值

true

设置为 true 则禁止将简单字符串用作密码。

p_disallow_whitespace

布尔值

false

设置为 true 则禁止在密码中使用空格字符。

p_disallow_at_sign

布尔值

false

设置为 true 以禁止在密码中使用 @ 字符。

可以创建多个密码验证函数。

自定义函数的名称受到一些限制。您的自定义函数不能具有与现有系统对象相同的名称。名称长度不能超过 30 个字符。另外,名称必须包括以下字符串之一:PASSWORDVERIFYCOMPLEXITYENFORCESTRENGTH

下面的示例创建一个名为 CUSTOM_PASSWORD_FUNCTION 的函数。此函数要求密码具有至少 12 个字符、2 个大写字符、1 个数字和 1 个特殊字符,并且该密码禁止使用 @ 字符。

begin rdsadmin.rdsadmin_password_verify.create_verify_function( p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', p_min_length => 12, p_min_uppercase => 2, p_min_digits => 1, p_min_special => 1, p_disallow_at_sign => true); end; /

要查看验证函数的文本,请查询 DBA_SOURCE。以下示例获取名为 CUSTOM_PASSWORD_FUNCTION 的自定义密码函数的文本。

COL TEXT FORMAT a150 SELECT TEXT FROM DBA_SOURCE WHERE OWNER = 'SYS' AND NAME = 'CUSTOM_PASSWORD_FUNCTION' ORDER BY LINE;

要将您的验证函数与用户配置文件关联,请使用 alter profile。以下示例将验证函数与 DEFAULT 用户配置文件关联。

ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;

要查看哪些用户配置文件与哪些验证函数关联,请查询 DBA_PROFILES。以下示例获取与名为 CUSTOM_PASSWORD_FUNCTION 的自定义验证函数关联的配置文件。

SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD' AND LIMIT = 'CUSTOM_PASSWORD_FUNCTION'; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------- -------------------------------- -------- ------------------------ DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD CUSTOM_PASSWORD_FUNCTION

以下示例获取所有配置文件以及与之关联的密码验证函数。

SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION'; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------- -------------------------------- -------- ------------------------ DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD CUSTOM_PASSWORD_FUNCTION RDSADMIN PASSWORD_VERIFY_FUNCTION PASSWORD NULL

create_passthrough_verify_fcn 过程

RDS for Oracle 版本 12.1.0.2.v7 和所有更高的主要和次要版本都支持 create_passthrough_verify_fcn 过程。

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn 创建自定义函数来验证密码。create_passthrough_verify_fcn 过程具有以下参数。

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

p_verify_function_name

varchar2

自定义验证函数的名称。这是在 SYS 架构中为您创建的包装函数,它不包含任何验证逻辑。为用户配置文件分配此函数。

p_target_owner

varchar2

自定义验证函数的架构所有者。

p_target_function_name

varchar2

包含验证逻辑的现有自定义函数的名称。您的自定义函数必须返回布尔值。如果密码有效,您的函数应返回 true;如果密码无效应返回 false

以下示例创建的密码验证函数使用名为 PASSWORD_LOGIC_EXTRA_STRONG 的函数的逻辑。

begin rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn( p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', p_target_owner => 'TEST_USER', p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG'); end; /

要将验证函数与用户配置文件关联,请使用 alter profile。以下示例将验证函数与 DEFAULT 用户配置文件关联。

ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;

设置自定义 DNS 服务器

Amazon RDS 支持对运行 Oracle 的数据库实例进行出站网络访问。有关出站网络访问(包括先决条件)的更多信息,请参阅使用证书和 Oracle Wallet 配置 UTL_HTTP 访问

Amazon RDS Oracle 支持通过客户拥有的自定义域名服务 (DNS) 服务器解析 DNS。通过自定义 DNS 服务器,您可以仅解析 Amazon RDS 数据库实例中的完全限定域名。

自定义 DNS 名称服务器设置完成后,它需要 30 分钟将更改传播到数据库实例中。将更改传播到数据库实例后,需要进行 DNS 查找的所有出站网络流量将通过端口 53 查询您的 DNS 服务器。

要为您的 Amazon RDS for Oracle 数据库实例设置自定义 DNS 服务器,请执行以下操作:

  • 在附加到 Virtual Private Cloud (VPC) 的 DHCP 选项集中,将 domain-name-servers 选项设置为您的 DNS 名称服务器的 IP 地址。有关更多信息,请参阅 DHCP 选项集

    注意

    domain-name-servers 选项最多可接受四个值,但您的 Amazon RDS 数据库实例只使用第一个值。

  • 请确保您的 DNS 服务器可以解析所有查找查询,包括公有 DNS 名称、Amazon EC2 私有 DNS 名称和特定客户的 DNS 名称。如果出站网络流量中包含您的 DNS 服务器不能处理的 DNS 查找,您的 DNS 服务器必须已配置适当的上游 DNS 提供程序。

  • 请配置您的 DNS 服务器,以生成等于或小于 512 字节的用户数据报协议 (UDP) 响应。

  • 请配置您的 DNS 服务器,以生成等于或小于 1024 字节的传输控制协议 (TCP) 响应。

  • 配置您的 DNS 服务器,允许流量通过 Amazon RDS 数据库实例的端口 53 入站。如果您的 DNS 服务器在 Amazon VPC 中,此 VPC 的安全组必须包含以下入站规则:允许端口 53 上的 UDP 和 TCP 流量。如果您的 DNS 服务器不在 Amazon VPC 中,它必须具有适当的防火墙允许名单,以允许端口 53 上的 UDP 和 TCP 入站流量。

    有关更多信息,请参阅您的 VPC 的安全组添加和删除规则

  • 配置您的 Amazon RDS 数据库实例的 VPC,允许流量通过端口 53 出站。您的 VPC 安全组必须包含以下出站规则:允许端口 53 上的 UDP 和 TCP 流量。

    有关更多信息,请参阅您的 VPC 的安全组添加和删除规则

  • 必须正确配置 Amazon RDS 数据库实例和 DNS 服务器之间的路由路径,允许 DNS 流量。

    • 如果 Amazon RDS 数据库实例和 DNS 服务器不在同一 VPC 中,必须在它们之间设置对等连接。有关更多信息,请参阅什么是 VPC 对等连接?

设置和取消设置系统诊断事件

要在会话级别设置和取消设置诊断事件,可以使用 Oracle SQL 语句 ALTER SESSION SET EVENTS。但是,要在系统级别设置事件,您不能使用 Oracle SQL。相反,请使用 rdsadmin.rdsadmin_util 软件包中的系统事件过程。以下引擎版本中提供系统事件过程:

  • 所有 Oracle Database 21c 版本

  • 19.0.0.0.ru-2020-10.rur-2020-10.r1 或更高的 Oracle Database 19c 版本

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

  • 12.2.0.1.ru-2020-10.rur-2020-10.r1 及更高的 Oracle Database 12c 第 2 版 (12.2.0.1) 版本

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

  • 12.1.0.2.V22 及更高的 Oracle Database 12c 第 1 版 (12.1.0.2) 版本

    有关更多信息,请参阅《Amazon RDS for Oracle 发布说明》中的版本 12.1.0.2.v22

para

重要

rdsadmin.rdsadmin_util 软件包内部使用 ALTER SYSTEM SET EVENTS 语句设置事件。Oracle 数据库文档中没有记录此 ALTER SYSTEM 语句。某些系统诊断事件可能会生成大量跟踪信息、引起争用或影响数据库可用性。我们建议您在非生产数据库中测试特定的诊断事件,并且在 Oracle 支持的指导下仅在生产数据库中设置事件。

列出允许的系统诊断事件

要列出可以设置的系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.list_allowed_system_events。此过程不接受任何参数。

以下示例列出了您可以设置的所有系统事件。

SET SERVEROUTPUT ON EXEC rdsadmin.rdsadmin_util.list_allowed_system_events;

以下示例输出列出了事件编号及其描述。使用 Amazon RDS 过程 set_system_event 来设置这些事件并使用 unset_system_event 来取消设置它们。

604 - error occurred at recursive SQL level 942 - table or view does not exist 1401 - inserted value too large for column 1403 - no data found 1410 - invalid ROWID 1422 - exact fetch returns more than requested number of rows 1426 - numeric overflow 1427 - single-row subquery returns more than one row 1476 - divisor is equal to zero 1483 - invalid length for DATE or NUMBER bind variable 1489 - result of string concatenation is too long 1652 - unable to extend temp segment by in tablespace 1858 - a non-numeric character was found where a numeric was expected 4031 - unable to allocate bytes of shared memory ("","","","") 6502 - PL/SQL: numeric or value error 10027 - Specify Deadlock Trace Information to be Dumped 10046 - enable SQL statement timing 10053 - CBO Enable optimizer trace 10173 - Dynamic Sampling time-out error 10442 - enable trace of kst for ORA-01555 diagnostics 12008 - error in materialized view refresh path 12012 - error on auto execute of job 12504 - TNS:listener was not given the SERVICE_NAME in CONNECT_DATA 14400 - inserted partition key does not map to any partition 31693 - Table data object failed to load/unload and is being skipped due to error:
注意

允许的系统事件列表可能会随着时间的推移而变化。要确保您拥有最新的符合条件的活动列表,请使用 rdsadmin.rdsadmin_util.list_allowed_system_events

设置系统诊断事件

要设置系统事件,请使用Amazon RDS过程rdsadmin.rdsadmin_util.set_system_event。您只能设置 rdsadmin.rdsadmin_util.list_allowed_system_events 输出中列出的事件。set_system_event 过程接受以下参数。

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

p_event

number

系统事件编号。此值必须是 list_allowed_system_events 报告的事件编号之一。

p_level

number

活动级别。有关不同级别值的说明,请参阅 Oracle 数据库文档或 Oracle 支持。

过程 set_system_event 根据以下原则构造和运行所需的 ALTER SYSTEM SET EVENTS 语句:

  • 事件类型(contexterrorstack)是自动确定的。

  • ALTER SYSTEM SET EVENTS 'event LEVEL event_level' 表单中的语句设置上下文事件。此符号等同于 ALTER SYSTEM SET EVENTS 'event TRACE NAME CONTEXT FOREVER, LEVEL event_level'

  • ALTER SYSTEM SET EVENTS 'event ERRORSTACK (event_level)' 表单中的语句设置错误堆栈事件。此符号等同于 ALTER SYSTEM SET EVENTS 'event TRACE NAME ERRORSTACK LEVEL event_level'

以下示例将事件 942 设置为级别 3,将事件 10442 设置为级别 10。示例输出包括在内。

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(942,3); Setting system event 942 with: alter system set events '942 errorstack (3)' PL/SQL procedure successfully completed. SQL> EXEC rdsadmin.rdsadmin_util.set_system_event(10442,10); Setting system event 10442 with: alter system set events '10442 level 10' PL/SQL procedure successfully completed.

列出设置的系统诊断事件

要列出当前设置的系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.list_set_system_events。此过程仅报告 set_system_event 在系统级别设置的事件。

以下示例列出了活动的系统事件。

SET SERVEROUTPUT ON EXEC rdsadmin.rdsadmin_util.list_set_system_events;

以下示例输出显示了事件列表、事件类型、当前设置事件的级别以及设置事件的时间。

942 errorstack (3) - set at 2020-11-03 11:42:27 10442 level 10 - set at 2020-11-03 11:42:41 PL/SQL procedure successfully completed.

取消设置系统诊断事件

要取消设置系统事件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.unset_system_event。您只能取消设置 rdsadmin.rdsadmin_util.list_allowed_system_events 输出中列出的事件。unset_system_event 过程接受以下参数。

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

p_event

number

系统事件编号。此值必须是 list_allowed_system_events 报告的事件编号之一。

以下示例取消设置事件 942 和 10442。示例输出包括在内。

SQL> SET SERVEROUTPUT ON SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(942); Unsetting system event 942 with: alter system set events '942 off' PL/SQL procedure successfully completed. SQL> EXEC rdsadmin.rdsadmin_util.unset_system_event(10442); Unsetting system event 10442 with: alter system set events '10442 off' PL/SQL procedure successfully completed.