执行 Oracle 数据库实例的常见系统任务
下文中介绍了如何在运行 Oracle 的 Amazon RDS 数据库实例上,执行与系统相关的特定常见 DBA 任务。为了提供托管服务体验,Amazon RDS 不允许通过 shell 访问数据库实例,而仅限访问某些需要高级权限的系统过程和表。
主题
断开会话连接
要终止专用服务器进程以断开当前会话连接,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.disconnect
。disconnect
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
会话标识符。 |
|
number |
— |
是 |
会话的序列号。 |
|
varchar |
'IMMEDIATE' |
否 |
有效值为 |
以下示例断开一个会话。
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.kill
。kill
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
会话标识符。 |
|
number |
— |
是 |
会话的序列号。 |
|
varchar |
null |
否 |
有效值为
如果您指定 |
要获取会话标识符和会话序列号,请查询 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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
会话标识符。 |
|
number |
— |
是 |
会话的序列号。 |
|
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_session
。restricted_session
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 是 | 描述 |
---|---|---|---|---|
|
布尔值 |
true |
否 |
设置为 |
以下示例介绍了如何启用和禁用受限制的会话。
/* 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_pool
。flush_shared_pool
过程没有参数。
以下示例刷新共享池。
EXEC rdsadmin.rdsadmin_util.flush_shared_pool;
刷新缓冲区缓存
要刷新缓冲区缓存,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_buffer_cache
。flush_buffer_cache
过程没有参数。
以下示例刷新缓冲区缓存。
EXEC rdsadmin.rdsadmin_util.flush_buffer_cache;
刷新数据库智能闪存缓存
要刷新数据库智能闪存缓存,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_flash_cache
。flush_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
myuser
或 CREATE USER MYUSER
,则数据字典将存储 MYUSER
。但是,如果您在 CREATE USER
"MyUser"
中使用双引号,则数据字典将存储 MyUser
。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
要授予其权限的对象的名称。对象可以是目录、函数、包、过程、序列、表或视图。对象名称的拼写必须与其在 |
|
varchar2 |
— |
是 |
要向其授予权限的对象的名称。对象可以是架构或角色。 |
|
varchar2 |
null |
是 |
— |
|
布尔值 |
false |
否 |
设置为 |
以下示例将名为 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_ROLE
和 EXECUTE_CATALOG_ROLE
授予 USER1
。由于使用了 with
admin option
,因此,USER1
现在可向已获得 SELECT_CATALOG_ROLE
的 SYS 对象授予访问权。
GRANT SELECT_CATALOG_ROLE TO
USER1
WITH ADMIN OPTION; GRANT EXECUTE_CATALOG_ROLE toUSER1
WITH ADMIN OPTION;
无需对已获得 PUBLIC
的对象重新授权。如果您使用 grant_sys_object
过程重新授予访问权,则此过程调用将成功。
撤销 SYS 对象的 SELECT 或 EXECUTE 权限
要撤销单个对象的特权,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.revoke_sys_object
。该过程仅撤消已通过角色或直接授权授予主账户的权限。
revoke_sys_object
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
要撤销其权限的对象的名称。对象可以是目录、函数、包、过程、序列、表或视图。对象名称的拼写必须与其在 |
|
varchar2 |
— |
是 |
要撤销其权限的对象的名称。对象可以是架构或角色。 |
|
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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
Null |
是 |
有效的 |
|
布尔值 |
FALSE |
否 |
一个值,表示是否强制为 |
下面的示例基于表 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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
Null |
是 |
有效的 |
以下示例删除了在表 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_ROLE
和 EXECUTE_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 TOuser1
; GRANT SELECT ONsh.sales
TOuser1
;
创建自定义函数来验证密码
您可以通过以下方式创建自定义密码验证函数:
-
要使用标准验证逻辑,并将函数存储在
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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
自定义函数的名称。将在 SYS 架构中为您创建此函数。为用户配置文件分配此函数。 |
|
number |
8 |
否 |
要求的字符的最小数量。 |
|
number |
256 |
否 |
允许的字符的最大数量。 |
|
number |
1 |
否 |
要求的字母的最小数量。 |
|
number |
0 |
否 |
要求的大写字母的最小数量。 |
|
number |
0 |
否 |
要求的小写字母的最小数量。 |
|
number |
1 |
否 |
要求的数字的最小数量。 |
|
number |
0 |
否 |
要求的特殊字符的最小数量。 |
|
number |
3 |
否 |
旧密码和新密码之间需要的不同字符的最小数。 |
|
布尔值 |
true |
否 |
设置为 |
|
布尔值 |
true |
否 |
设置为 |
|
布尔值 |
true |
否 |
设置为 |
|
布尔值 |
true |
否 |
设置为 |
|
布尔值 |
false |
否 |
设置为 |
|
布尔值 |
false |
否 |
设置为 |
可以创建多个密码验证函数。
自定义函数的名称受到一些限制。您的自定义函数不能具有与现有系统对象相同的名称。名称长度不能超过 30 个字符。另外,名称必须包括以下字符串之一:PASSWORD
、VERIFY
、COMPLEXITY
、ENFORCE
或 STRENGTH
。
下面的示例创建一个名为 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_FUNCTIONCUSTOM_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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
自定义验证函数的名称。这是在 SYS 架构中为您创建的包装函数,它不包含任何验证逻辑。为用户配置文件分配此函数。 |
|
varchar2 |
— |
是 |
自定义验证函数的架构所有者。 |
|
varchar2 |
— |
是 |
包含验证逻辑的现有自定义函数的名称。您的自定义函数必须返回布尔值。如果密码有效,您的函数应返回 |
以下示例创建的密码验证函数使用名为 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_FUNCTIONCUSTOM_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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
系统事件编号。此值必须是 |
|
number |
— |
是 |
活动级别。有关不同级别值的说明,请参阅 Oracle 数据库文档或 Oracle 支持。 |
过程 set_system_event
根据以下原则构造和运行所需的 ALTER SYSTEM SET EVENTS
语句:
-
事件类型(
context
或errorstack
)是自动确定的。 -
ALTER SYSTEM SET EVENTS '
表单中的语句设置上下文事件。此符号等同于event
LEVELevent_level
'ALTER SYSTEM SET EVENTS '
。event
TRACE NAME CONTEXT FOREVER, LEVELevent_level
' -
ALTER SYSTEM SET EVENTS '
表单中的语句设置错误堆栈事件。此符号等同于event
ERRORSTACK (event_level
)'ALTER SYSTEM SET EVENTS '
。event
TRACE NAME ERRORSTACK LEVELevent_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
过程接受以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
— |
是 |
系统事件编号。此值必须是 |
以下示例取消设置事件 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.