执行 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 还限制了对需要高级权限的某些系统程序和表的访问。

更改数据库的全局名称

要更改数据库的全局名称,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.rename_global_namerename_global_name 过程具有以下参数。

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

p_new_global_name

varchar2

数据库的新全局名称。

数据库必须处于打开状态,才能更改名称。有关更改数据库的全局名称的更多信息,请参阅 Oracle 文档中的 ALTER DATABASE

以下示例将数据库的全局名称更改为 new_global_name

EXEC rdsadmin.rdsadmin_util.rename_global_name(p_new_global_name => 'new_global_name');

创建表空间并配置其大小

Amazon RDS 仅支持数据文件、日志文件和控制文件的 Oracle Managed Files (OMF)。创建数据文件和日志文件时,无法指定物理文件名。

原定设置情况下,如果未指定数据文件大小,则创建的表空间原定设置为 AUTOEXTEND ON,且没有最大大小。在以下示例中,表空间 users1 是可自动扩展的。

CREATE TABLESPACE users1;

由于这些默认设置,表空间会增大以占用所有分配的存储空间。建议您在永久表空间和临时表空间上指定适当的最大大小,并仔细监视空间使用率。

以下示例创建一个名为 users2 的表空间,起始大小为 1GB。由于指定了数据文件大小,但未指定 AUTOEXTEND ON,因此表空间不可自动扩展。

CREATE TABLESPACE users2 DATAFILE SIZE 1G;

以下示例创建一个名为 users3 的表空间,起始大小为 1GB,开启了自动扩展,且最大大小为 10GB。

CREATE TABLESPACE users3 DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 10G;

以下示例创建一个名为 temp01 的临时表空间。

CREATE TEMPORARY TABLESPACE temp01;

建议您不要使用小文件表空间,因为您无法使用 RDS for Oracle 调整小文件表空间的大小。不过,您可以将数据文件添加到小文件表空间中。要确定表空间是大文件还是小文件,请按以下方式查询 DBA_TABLESPACES

SELECT TABLESPACE_NAME, BIGFILE FROM DBA_TABLESPACE;

您可以使用 ALTER TABLESPACE 调整大文件表空间的大小。可以 KB (K)、MB (M)、GB (G) 或 TB (T) 为单位指定大小。以下示例将名为 users_bf 的大文件表空间的大小调整到 200MB。

ALTER TABLESPACE users_bf RESIZE 200M;

以下示例向名为 users_sf 的小文件表空间添加另一个数据文件。

ALTER TABLESPACE users_sf ADD DATAFILE SIZE 100000M AUTOEXTEND ON NEXT 250m MAXSIZE UNLIMITED;

设置默认表空间

要设置默认表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_default_tablespacealter_default_tablespace 过程具有以下参数。

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

tablespace_name

varchar

默认表空间的名称。

以下示例将默认表空间设置为 users2

EXEC rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => 'users2');

设置默认临时表空间

要设置默认临时表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_default_temp_tablespacealter_default_temp_tablespace 过程具有以下参数。

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

tablespace_name

varchar

默认临时表空间的名称。

以下示例将默认临时表空间设置为 temp01

EXEC rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => 'temp01');

在实例存储上创建临时表空间

要在实例存储上创建临时表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspacecreate_inst_store_tmp_tblspace 过程具有以下参数。

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

p_tablespace_name

varchar

临时表空间的名称。

以下示例在实例存储中创建临时表空间 temp01

EXEC rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace(p_tablespace_name => 'temp01');
重要

运行 rdsadmin_util.create_inst_store_tmp_tblspace 时,新创建的临时表空间不会自动设置为原定设置临时表空间。要将其设置为原定设置,请参阅 设置默认临时表空间

有关更多信息,请参阅在 RDS for Oracle 实例存储中存储临时数据

在只读副本上向实例存储中添加临时文件

当您在主数据库实例上创建临时表空间时,只读副本不会创建临时文件。假设由于以下原因之一,只读副本上存在一个空的临时表空间:

  • 您从只读副本上的表空间中删除了一个临时文件。有关更多信息,请参阅删除只读副本上的临时文件

  • 您在主数据库实例上创建了一个新的临时表空间。在这种情况下,RDS for Oracle 会将元数据同步到只读副本。

您可以将临时文件添加到空的临时表空间,并将临时文件存储在实例存储中。要在实例存储中创建临时文件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.add_inst_store_tempfile。您只能在只读副本上使用此过程。 过程具有以下参数。

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

p_tablespace_name

varchar

只读副本上临时表空间的名称。

在以下示例中,您的只读副本上存在空的临时表空间 temp01。运行以下命令以创建此表空间的临时文件,并将其存储在实例存储中。

EXEC rdsadmin.rdsadmin_util.add_inst_store_tempfile(p_tablespace_name => 'temp01');

有关更多信息,请参阅在 RDS for Oracle 实例存储中存储临时数据

删除只读副本上的临时文件

您不能删除只读副本上的现有临时表空间。您可以将只读副本上的临时文件存储从 Amazon EBS 更改为实例存储,或者从实例存储更改为 Amazon EBS。为实现这些目标,请执行以下操作:

  1. 删除只读副本上临时表空间中的当前临时文件。

  2. 在不同的存储上创建新的临时文件。

要删除临时文件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util. drop_replica_tempfiles。您只能在只读副本上使用此过程。drop_replica_tempfiles 过程具有以下参数。

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

p_tablespace_name

varchar

只读副本上临时表空间的名称。

假设一个名为 temp01 的临时表空间位于只读副本上的实例存储中。通过运行以下命令,删除此表空间中的所有临时文件。

EXEC rdsadmin.rdsadmin_util.drop_replica_tempfiles(p_tablespace_name => 'temp01');

有关更多信息,请参阅在 RDS for Oracle 实例存储中存储临时数据

通过检查点检验数据库

要通过检查点检验数据库,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.checkpointcheckpoint 过程没有参数。

以下示例为数据库创建检查点。

EXEC rdsadmin.rdsadmin_util.checkpoint;

设置分布式恢复

要设置分布式恢复,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.enable_distr_recoverydisable_distr_recovery。这些过程没有参数。

以下示例启用分布式恢复。

EXEC rdsadmin.rdsadmin_util.enable_distr_recovery;

以下示例禁用分布式恢复。

EXEC rdsadmin.rdsadmin_util.disable_distr_recovery;

设置数据库时区

您可以通过以下方式设置 Amazon RDS Oracle 数据库的时区:

  • Timezone 选项

    Timezone 选项在主机级别更改时区,并且会影响所有日期列和值(例如 SYSDATE)。有关更多信息,请参阅“Oracle 时区”。

  • Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_db_time_zone

    alter_db_time_zone 步骤仅更改某些数据类型的时区,而不更改 SYSDATE。在 Oracle 文档中列出了与设置时区有关的其他限制。

注意

您还可以为 Oracle Scheduler 设置默认时区。有关更多信息,请参阅“设置 Oracle Scheduler 作业的时区”。

alter_db_time_zone 过程具有以下参数。

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

p_new_tz

varchar2

作为已命名的区域或与协调世界时 (UTC) 的绝对偏移量的时区。有效偏移范围介于 -12:00 到 +14:00 之间。

以下示例将时区更改为 UTC 加 3 小时。

EXEC rdsadmin.rdsadmin_util.alter_db_time_zone(p_new_tz => '+3:00');

以下示例将时区更改为非洲/阿尔及尔时区。

EXEC rdsadmin.rdsadmin_util.alter_db_time_zone(p_new_tz => 'Africa/Algiers');

使用 alter_db_time_zone 过程更改时区后,重启数据库实例以使更改生效。有关更多信息,请参阅“重启中的数据库实例”。有关升级时区的信息,请参阅 时区注意事项

使用 Oracle 外部表

Oracle 外部表是具有不在数据库中数据的表。这些数据位于数据库可以访问的外部文件中。使用外部表,您可以访问数据而无需将其加载到数据库中。有关外部表的更多信息,请参阅 Oracle 文档中的管理外部表

使用 Amazon RDS,您可以将外部表文件存储在目录对象中。您可以创建目录对象,或者使用 Oracle 数据库中预定义的目录对象,例如 DATA_PUMP_DIR 目录。有关创建目录对象的信息,请参阅在主数据存储空间中创建和删除目录。您可以查询 ALL_DIRECTORIES 视图来列出您的 Amazon RDS Oracle 数据库实例的目录对象。

注意

目录对象指向由实例使用的主数据存储空间 (Amazon EBS 卷)。—包括数据文件、重做日志、审核、跟踪和其他文件在内—所用的空间均计入分配的存储中。

您可以使用 DBMS_FILE_TRANSFER 包或 UTL_FILE 包,将外部数据文件从一个 Oracle 数据库移动到另一个。外部数据文件从源数据库上的目录移至目标数据库上的指定目录中。有关使用 DBMS_FILE_TRANSFER 的信息,请参阅 使用 Oracle Data Pump 导入

移动外部数据文件之后,您可以用它来创建外部表。以下示例创建使用 USER_DIR1 目录中 emp_xt_file1.txt 文件的外部表。

CREATE TABLE emp_xt ( emp_id NUMBER, first_name VARCHAR2(50), last_name VARCHAR2(50), user_name VARCHAR2(20) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY USER_DIR1 ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE FIELDS TERMINATED BY ',' MISSING FIELD VALUES ARE NULL (emp_id,first_name,last_name,user_name) ) LOCATION ('emp_xt_file1.txt') ) PARALLEL REJECT LIMIT UNLIMITED;

假设您要将位于 Amazon RDS Oracle 数据库实例中的数据移动到外部数据文件中。在这种情况下,您可以通过创建外部表并从数据库中的表选择数据来填充外部数据文件。例如,以下 SQL 语句通过查询数据库中的 orders_xt 表创建 orders 外部表。

CREATE TABLE orders_xt ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY DATA_PUMP_DIR LOCATION ('orders_xt.dmp') ) AS SELECT * FROM orders;

在此示例中,数据填充到 DATA_PUMP_DIR 目录的 orders_xt.dmp 文件中。

使用 Automatic Workload Repository (AWR) 生成性能报告

要收集性能数据并生成报告,Oracle 建议使用 Automatic Workload Repository (AWR)。AWR 需要 Oracle Database Enterprise Edition 以及 Diagnostics and Tuning 包的许可证。要启用 AWR,请将 CONTROL_MANAGEMENT_PACK_ACCESS 初始化参数设置为 DIAGNOSTICDIAGNOSTIC+TUNING

在 RDS 中使用 AWR 报告

要生成 AWR 报告,您可以运行脚本,例如 awrrpt.sql。这些脚本安装在数据库主机服务器上。在 Amazon RDS 中,您无法直接访问主机。但是,您可以从其他 Oracle 数据库安装中获取 SQL 脚本的副本。

您还可以通过在 SYS.DBMS_WORKLOAD_REPOSITORY PL/SQL 软件包中运行过程来使用 AWR。您可以使用此软件包管理基准和快照,还可以显示 ASH 和 AWR 报告。例如,要生成文本格式的 AWR 报告,请运行 DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT 过程。但是,您无法从Amazon Web Services Management Console访问这些 AWR 报告。

使用 AWR 时,我们建议使用 rdsadmin.rdsadmin_diagnostic_util 过程。您可以使用这些过程生成以下内容:

  • AWR 报告

  • Active Session History (ASH) 报告

  • Automatic Database Diagnostic Monitor (ADDM) 报告

  • AWR 数据的 Oracle Data Pump Export 转储文件

rdsadmin_diagnostic_util 过程将报告保存到数据库实例文件系统。您可以从控制台访问这些报告。您还可以使用 rdsadmin.rds_file_util 过程访问报告,并可以使用 S3 集成访问复制到 Amazon S3 的报告。有关更多信息,请参阅“读取数据库实例目录中的文件”和“Amazon S3 集成”。

您可在以下 Amazon RDS for Oracle 数据库引擎版本中使用 rdsadmin_diagnostic_util 过程:

  • 所有 Oracle Database 21c 版本

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

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

  • 12.1.0.2.v20 或更高的 Oracle Database 12c 第 1 版 (12.1) 版本

有关解释如何在复制场景中使用诊断报告的博客,请参阅为 Amazon RDS for Oracle 只读副本生成 AWR 报告

诊断实用程序软件包的通用参数

通常,您在通过 rdsadmin_diagnostic_util 软件包管理 AWR 和 ADDM 时可以使用以下参数。

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

begin_snap_id

NUMBER

开始快照的 ID。

end_snap_id

NUMBER

结束快照的 ID。

dump_directory

VARCHAR2

BDUMP

将报告写入或将文件导出到的目录。如果您指定非默认目录,则运行 rdsadmin_diagnostic_util 过程的用户必须具有该目录的写入权限。

p_tag

VARCHAR2

可用于区分备份的字符串,以便指示备份的目的或用法,例如 incrementaldaily

您最多可指定 30 个字符。有效字符为 a-zA-Z0-9、下划线 (_)、短划线 (-) 以及点号 (.)。此标签不区分大小写。无论输入标签时使用的大小写如何,RMAN 始终以大写形式存储标签。

标签不一定是唯一的,因此多个备份可以使用相同的标签。如果未指定标签,则 RMAN 会使用 TAGYYYYMMDDTHHMMSS 格式自动分配默认标签,其中 YYYY 表示年份、MM 表示月份、DD 表示某天,HH 表示小时(采用 24 小时格式)、MM 表示分钟、SS 表示秒。日期和时间表示 RMAN 开始备份的时间。例如,备份的默认标签 TAG20190927T214517 表示备份开始于 2019 年 09 月 27 日 21:45:17。

以下 RDS for Oracle 数据库引擎版本支持 p_tag 参数:

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c (19.0.0),使用 19.0.0.0.ru-2021-10.rur-2021-10.r1 及更高版本

  • Oracle Database 12c 第 2 版 (12.2),使用 12.2.0.1.ru-2021-10.rur-2021-10.r1 及更高版本

  • Oracle Database 12c 第 1 版 (12.1),使用 12.1.0.2.V26 及更高版本

report_type

VARCHAR2

HTML

报告的格式。有效值为 TEXTHTML

dbid

NUMBER

Oracle 的有效数据库标识符 (DBID),显示在 DBA_HIST_DATABASE_INSTANCE 中。如果未指定此参数,RDS 将使用 V$DATABASE.DBID 视图中显示的当前 DBID。

使用 rdsadmin_diagnostic_util 软件包管理 ASH 时,通常使用以下参数。

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

begin_time

DATE

ASH 分析的开始时间。

end_time

DATE

ASH 分析的结束时间。

slot_width

NUMBER

0

ASH 报告的“Top Activity (热门活动)”部分中使用的槽的持续时间(以秒为单位)。如果未指定此参数,则 begin_timeend_time 之间的时间间隔不超过 10 个槽。

sid

NUMBER

Null

会话 ID。

sql_id

VARCHAR2

Null

SQL ID。

wait_class

VARCHAR2

Null

等待类名称。

service_hash

NUMBER

Null

服务名称哈希。

module_name

VARCHAR2

Null

模块名称。

action_name

VARCHAR2

Null

操作名称。

client_id

VARCHAR2

Null

数据库会话的特定于应用程序的 ID。

plsql_entry

VARCHAR2

Null

PL/SQL 入口点。

生成 AWR 报告

要生成 AWR 报告,请使用 rdsadmin.rdsadmin_diagnostic_util.awr_report 过程。

以下示例生成快照范围 101–106 的 AWR 报告。输出文本文件名为 awrrpt_101_106.txt。您可以通过Amazon Web Services Management Console访问此报告。

EXEC rdsadmin.rdsadmin_diagnostic_util.awr_report(101,106,'TEXT');

以下示例生成快照范围 63–65 的 HTML 报告。输出 HTML 文件名为 awrrpt_63_65.html。该过程将报告写入名为 AWR_RPT_DUMP 的非默认数据库目录。

EXEC rdsadmin.rdsadmin_diagnostic_util.awr_report(63,65,'HTML','AWR_RPT_DUMP');

将 AWR 数据提取到转储文件

要将 AWR 数据提取到转储文件中,请使用 rdsadmin.rdsadmin_diagnostic_util.awr_extract 过程。

以下示例提取范围 101–106 中的快照。输出转储文件名为 awrextract_101_106.dmp。您可以通过控制台访问此文件。

EXEC rdsadmin.rdsadmin_diagnostic_util.awr_extract(101,106);

以下示例提取范围在 63–65 中的快照。输出转储文件名为 awrextract_63_65.dmp。该文件存储在名为 AWR_RPT_DUMP 的非默认数据库目录中。

EXEC rdsadmin.rdsadmin_diagnostic_util.awr_extract(63,65,'AWR_RPT_DUMP');

生成 ADDM 报告

要生成 ADDM 报告,请使用 rdsadmin.rdsadmin_diagnostic_util.addm_report 过程。

以下示例生成快照范围 101–106 的 ADDM 报告。输出文本文件名为 addmrpt_101_106.txt。您可以通过控制台访问报告。

EXEC rdsadmin.rdsadmin_diagnostic_util.addm_report(101,106);

以下示例生成快照范围 63–65 的 ADDM 报告。输出文本文件名为 addmrpt_63_65.txt。该文件存储在名为 ADDM_RPT_DUMP 的非默认数据库目录中。

EXEC rdsadmin.rdsadmin_diagnostic_util.addm_report(63,65,'ADDM_RPT_DUMP');

生成 ASH 报告

要生成 ASH 报告,请使用 rdsadmin.rdsadmin_diagnostic_util.ash_report 过程。

以下示例生成一个 ASH 报告,其中包含当前时间 14 分钟前的数据。输出文件的名称使用格式 ashrptbegin_timeend_time.txt,其中 begin_timeend_time 使用格式 YYYYMMDDHH24MISS。您可以通过控制台访问文件。

BEGIN rdsadmin.rdsadmin_diagnostic_util.ash_report( begin_time => SYSDATE-14/1440, end_time => SYSDATE, report_type => 'TEXT'); END; /

以下示例生成一个 ASH 报告,其中包括从 2019 年 11 月 18 日下午 6 点 07 分到 2019 年 11 月 18 日下午 6 点 15 分的数据。输出 HTML 报告名为 ashrpt_20190918180700_20190918181500.html。该报告存储在名为 AWR_RPT_DUMP 的非默认数据库目录中。

BEGIN rdsadmin.rdsadmin_diagnostic_util.ash_report( begin_time => TO_DATE('2019-09-18 18:07:00', 'YYYY-MM-DD HH24:MI:SS'), end_time => TO_DATE('2019-09-18 18:15:00', 'YYYY-MM-DD HH24:MI:SS'), report_type => 'html', dump_directory => 'AWR_RPT_DUMP'); END; /

从控制台或 CLI 访问 AWR 报告

要访问 AWR 报告或导出转储文件,您可以使用 Amazon Web Services Management Console 或 Amazon CLI。有关更多信息,请参阅“下载数据库日志文件”。

要在同一 Virtual Private Cloud (VPC) 或对等 VPC 中使用与 Amazon RDS 数据库实例的 Oracle 数据库链接,这两个数据库实例之间应具有有效路由。使用 VPC 路由表和网络访问控制列表 (ACL) 验证数据库实例之间的有效路由。

每个数据库实例的安全组必须允许另一个数据库实例的传入和传出。入站和出站规则可引用同一 VPC 或对等 VPC 中的安全组。有关更多信息,请参阅更新安全组以引用对等的 VPC 安全组

如果您已使用 VPC 中的 DHCP 选项集配置自定义 DNS 服务器,则自定义 DNS 服务器必须能够解析数据库链接目标的名称。有关更多信息,请参阅“设置自定义 DNS 服务器”。

有关将数据库链接用于 Oracle Data Pump 的更多信息,请参阅 使用 Oracle Data Pump 导入

设置数据库实例的默认版本

您可以在私有环境中重新定义称为版本的数据库对象。您可以使用基于版本的重新定义,以最少的停机来升级应用程序的数据库对象。

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_default_edition 设置 Amazon RDS Oracle 数据库实例的默认版本。

以下示例将 Amazon RDS Oracle 数据库实例的默认版本设置为 RELEASE_V1

EXEC rdsadmin.rdsadmin_util.alter_default_edition('RELEASE_V1');

以下示例将 Amazon RDS Oracle 数据库实例的默认版本设置回 Oracle 默认值。

EXEC rdsadmin.rdsadmin_util.alter_default_edition('ORA$BASE');

有关基于 Oracle 版本的重新定义的更多信息,请参阅 Oracle 文档中的关于版本和基于版本的重新定义

为 SYS.AUD$ 表启用审核

要在数据库审核跟踪表 SYS.AUD$ 上启用审核,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_master_util.audit_all_sys_aud_table。唯一受支持的审核属性为 ALL。您无法审核或不审核单个语句或操作。

运行以下版本的 Oracle 数据库实例支持启用审核:

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c(19.0.0)

  • Oracle Database 12c 第 2 版 (12.2)

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

audit_all_sys_aud_table 过程具有以下参数。

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

p_by_access

布尔值

true

设置为 true 以审核 BY ACCESS。设置为 false 以审核 BY SESSION

注意

在单租户 CDB 中,以下操作有效,但没有客户可见的机制可以检测操作的当前状态。无法从 PDB 中获得审计信息。有关更多信息,请参阅“RDS for Oracle CDB 的限制”。

以下查询返回数据库的 SYS.AUD$ 的当前审核配置。

SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER='SYS' AND OBJECT_NAME='AUD$';

以下命令启用 ALL SYS.AUD$ 上的 BY ACCESS 的审核。

EXEC rdsadmin.rdsadmin_master_util.audit_all_sys_aud_table; EXEC rdsadmin.rdsadmin_master_util.audit_all_sys_aud_table(p_by_access => true);

以下命令启用 ALL SYS.AUD$ 上的 BY SESSION 的审核。

EXEC rdsadmin.rdsadmin_master_util.audit_all_sys_aud_table(p_by_access => false);

有关更多信息,请参阅 Oracle 文档中的 AUDIT(传统审核)

为 SYS.AUD$ 表禁用审核

要在数据库审核跟踪表 SYS.AUD$ 上禁用审核,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_master_util.noaudit_all_sys_aud_table。此过程不需要任何参数。

以下查询返回数据库的 SYS.AUD$ 的当前审核配置:

SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER='SYS' AND OBJECT_NAME='AUD$';

以下命令禁用 ALL 上的 SYS.AUD$ 的审计。

EXEC rdsadmin.rdsadmin_master_util.noaudit_all_sys_aud_table;

有关更多信息,请参阅 Oracle 文档中的 NOAUDIT(传统审核)

清理中断的在线索引构建

要清理失败的在线索引构建,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_dbms_repair.online_index_clean

online_index_clean 过程具有以下参数。

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

object_id

binary_integer

ALL_INDEX_ID

索引的对象 ID。通常,您可以使用 ORA-08104 错误文本中的对象 ID。

wait_for_lock

binary_integer

rdsadmin.rdsadmin_dbms_repair.lock_wait

指定 rdsadmin.rdsadmin_dbms_repair.lock_wait(默认值),尝试锁定底层对象,在锁定失败时重试,直至达到内部限制。

指定 rdsadmin.rdsadmin_dbms_repair.lock_nowait,尝试锁定底层对象,但在锁定失败时不重试。

下面的示例清理失败的在线索引构建:

declare is_clean boolean; begin is_clean := rdsadmin.rdsadmin_dbms_repair.online_index_clean( object_id => 1234567890, wait_for_lock => rdsadmin.rdsadmin_dbms_repair.lock_nowait ); end; /

有关更多信息,请参阅 Oracle 文档中的 ONLINE_INDEX_CLEAN 函数

跳过损坏的数据块

要在索引和表扫描期间跳过损坏的数据块,请使用 rdsadmin.rdsadmin_dbms_repair 程序包。

下面的过程封装了 sys.dbms_repair.admin_table 过程的功能,并且不带任何参数:

  • rdsadmin.rdsadmin_dbms_repair.create_repair_table

  • rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table

  • rdsadmin.rdsadmin_dbms_repair.drop_repair_table

  • rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table

  • rdsadmin.rdsadmin_dbms_repair.purge_repair_table

  • rdsadmin.rdsadmin_dbms_repair.purge_orphan_keys_table

下面的过程采用与其 Oracle 数据库 DBMS_REPAIR 程序包中的对应项相同的参数。

  • rdsadmin.rdsadmin_dbms_repair.check_object

  • rdsadmin.rdsadmin_dbms_repair.dump_orphan_keys

  • rdsadmin.rdsadmin_dbms_repair.fix_corrupt_blocks

  • rdsadmin.rdsadmin_dbms_repair.rebuild_freelists

  • rdsadmin.rdsadmin_dbms_repair.segment_fix_status

  • rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks

有关处理数据库损坏的更多信息,请参阅 Oracle 文档中的 DBMS_REPAIR

例 响应损坏的数据块

此示例显示了响应损坏的数据块的基本工作流程。您的步骤将取决于数据块损坏的位置和性质。

重要

在尝试修复损坏的数据块之前,请仔细查看 DBMS_RECH 文档。

在索引和表扫描期间跳过损坏的数据块
  1. 如果还没有修复表,则运行以下程序来创建修复表。

    EXEC rdsadmin.rdsadmin_dbms_repair.create_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table;
  2. 运行以下程序以检查现有记录,适当时清除它们。

    SELECT COUNT(*) FROM SYS.REPAIR_TABLE; SELECT COUNT(*) FROM SYS.ORPHAN_KEY_TABLE; SELECT COUNT(*) FROM SYS.DBA_REPAIR_TABLE; SELECT COUNT(*) FROM SYS.DBA_ORPHAN_KEY_TABLE; EXEC rdsadmin.rdsadmin_dbms_repair.purge_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.purge_orphan_keys_table;
  3. 运行以下程序检查损坏的数据块。

    SET SERVEROUTPUT ON DECLARE v_num_corrupt INT; BEGIN v_num_corrupt := 0; rdsadmin.rdsadmin_dbms_repair.check_object ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', corrupt_count => v_num_corrupt ); dbms_output.put_line('number corrupt: '||to_char(v_num_corrupt)); END; / COL CORRUPT_DESCRIPTION FORMAT a30 COL REPAIR_DESCRIPTION FORMAT a30 SELECT OBJECT_NAME, BLOCK_ID, CORRUPT_TYPE, MARKED_CORRUPT, CORRUPT_DESCRIPTION, REPAIR_DESCRIPTION FROM SYS.REPAIR_TABLE; SELECT SKIP_CORRUPT FROM DBA_TABLES WHERE OWNER = '&corruptionOwner' AND TABLE_NAME = '&corruptionTable';
  4. 使用 skip_corrupt_blocks 过程为受影响的表启用或禁用损坏跳过。根据具体情况,您可能还需要将数据提取到新表,然后删除包含损坏的数据块的表。

    运行以下程序为受影响的表启用损坏跳过。

    begin rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', object_type => rdsadmin.rdsadmin_dbms_repair.table_object, flags => rdsadmin.rdsadmin_dbms_repair.skip_flag); end; / select skip_corrupt from dba_tables where owner = '&corruptionOwner' and table_name = '&corruptionTable';

    运行以下程序禁用损坏跳过。

    begin rdsadmin.rdsadmin_dbms_repair.skip_corrupt_blocks ( schema_name => '&corruptionOwner', object_name => '&corruptionTable', object_type => rdsadmin.rdsadmin_dbms_repair.table_object, flags => rdsadmin.rdsadmin_dbms_repair.noskip_flag); end; / select skip_corrupt from dba_tables where owner = '&corruptionOwner' and table_name = '&corruptionTable';
  5. 完成所有修复工作后,运行以下过程删除修复表。

    EXEC rdsadmin.rdsadmin_dbms_repair.drop_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table;

调整表空间、数据文件和临时文件的大小

原定设置情况下,在开启自动扩展的情况下创建 Oracle 表空间,并且没有最大大小。由于这些原定设置,表空间有时可能会变得过大。建议您在永久表空间和临时表空间上指定适当的最大大小,并仔细监视空间使用率。

调整永久表空间大小

要调整 RDS for Oracle 数据库实例中永久表空间的大小,请使用以下任何 Amazon RDS 过程:

  • rdsadmin.rdsadmin_util.resize_datafile

  • rdsadmin.rdsadmin_util.autoextend_datafile

resize_datafile 过程具有以下参数。

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

p_data_file_id

number

要调整大小的数据文件的标识符。

p_size

varchar2

数据文件的大小。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。

autoextend_datafile 过程具有以下参数。

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

p_data_file_id

number

要调整大小的数据文件的标识符。

p_autoextend_state

varchar2

自动扩展功能的状态。指定 ON 可自动扩展数据文件,指定 OFF 可关闭自动扩展功能。

p_next

varchar2

下一个数据文件增量的大小。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。

p_maxsize

varchar2

允许自动扩展的最大磁盘空间。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。您可以指定 UNLIMITED 以删除文件大小限制。

以下示例将数据文件 4 的大小调整为 500MB。

EXEC rdsadmin.rdsadmin_util.resize_datafile(4,'500M');

以下示例对于数据文件 4 关闭自动扩展功能。该示例还为数据文件 5 开启自动扩展功能,增量为 128MB,且没有最大大小。

EXEC rdsadmin.rdsadmin_util.autoextend_datafile(4,'OFF'); EXEC rdsadmin.rdsadmin_util.autoextend_datafile(5,'ON','128M','UNLIMITED');

调整临时表空间大小

要调整 RDS for Oracle 数据库实例中临时表空间(包括只读副本)的大小,请使用以下任何 Amazon RDS 过程:

  • rdsadmin.rdsadmin_util.resize_temp_tablespace

  • rdsadmin.rdsadmin_util.resize_tempfile

  • rdsadmin.rdsadmin_util.autoextend_tempfile

resize_temp_tablespace 过程具有以下参数。

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

p_temp_tablespace_name

varchar2

要调整大小的临时表空间的名称。

p_size

varchar2

表空间的大小。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。

resize_tempfile 过程具有以下参数。

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

p_temp_file_id

number

要调整大小的临时文件的标识符。

p_size

varchar2

临时文件的大小。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。

autoextend_tempfile 过程具有以下参数。

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

p_temp_file_id

number

要调整大小的临时文件的标识符。

p_autoextend_state

varchar2

自动扩展功能的状态。指定 ON 可自动扩展临时文件,指定 OFF 可关闭自动扩展功能。

p_next

varchar2

下一个临时文件增量的大小。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。

p_maxsize

varchar2

允许自动扩展的最大磁盘空间。以字节数(原定设置)、KB(K)、MB(M)或 GB(G)为单位指定大小。您可以指定 UNLIMITED 以删除文件大小限制。

以下示例将名为 TEMP 的临时表空间的大小调整为 4GB。

EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4G');
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4096000000');

以下示例将基于临时文件(文件标识符为 1)的临时表空间大小调整为 2MB。

EXEC rdsadmin.rdsadmin_util.resize_tempfile(1,'2M');

以下示例对于临时文件 1 关闭自动扩展功能。该示例还将临时文件 2 的最大自动扩展大小设置为 10GB,增量为 100MB。

EXEC rdsadmin.rdsadmin_util.autoextend_tempfile(1,'OFF'); EXEC rdsadmin.rdsadmin_util.autoextend_tempfile(2,'ON','100M','10G');

有关 Oracle 数据库实例的只读副本的更多信息,请参阅使用 Amazon RDS for Oracle 的只读副本

清除回收站

删除表时,Oracle 数据库不会立即清除其存储空间。数据库将重命名表,并将其与所有关联的对象放在回收站中。清除回收站将删除这些项目并释放其存储空间。

要清除整个回收站,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.purge_dba_recyclebin。但是,此过程无法清除回收站中的 SYSRDSADMIN 对象。如果您需要清除这些对象,请联系 Amazon Support。

以下示例清除整个回收站。

EXEC rdsadmin.rdsadmin_util.purge_dba_recyclebin;

为全部编写设置原定设置显示值

要更改 Amazon RDS Oracle 实例上全部编写的原定设置显示值,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.dbms_redact_upd_full_rdct_val。请注意,您使用 DBMS_REDACT PL/SQL 包创建了一个编写策略,如 Oracle 数据库文档中所述。dbms_redact_upd_full_rdct_val 过程为受现有策略影响的不同数据类型指定要显示的字符。

dbms_redact_upd_full_rdct_val 过程具有以下参数。

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

p_number_val

number

Null

修改 NUMBER 数据类型的列的原定设置值。

p_binfloat_val

binary_float

Null

修改 BINARY_FLOAT 数据类型的列的原定设置值。

p_bindouble_val

binary_double

Null

修改 BINARY_DOUBLE 数据类型的列的原定设置值。

p_char_val

char

Null

修改 CHAR 数据类型的列的原定设置值。

p_varchar_val

varchar2

Null

修改 VARCHAR2 数据类型的列的原定设置值。

p_nchar_val

nchar

Null

修改 NCHAR 数据类型的列的原定设置值。

p_nvarchar_val

nvarchar2

Null

修改 NVARCHAR2 数据类型的列的原定设置值。

p_date_val

date

Null

修改 DATE 数据类型的列的原定设置值。

p_ts_val

时间戳

Null

修改 TIMESTAMP 数据类型的列的原定设置值。

p_tswtz_val

timestamp with time zone

Null

修改 TIMESTAMP WITH TIME ZONE 数据类型的列的原定设置值。

p_blob_val

blob

Null

修改 BLOB 数据类型的列的原定设置值。

p_clob_val

clob

Null

修改 CLOB 数据类型的列的原定设置值。

p_nclob_val

nclob

Null

修改 NCLOB 数据类型的列的原定设置值。

以下示例将 CHAR 数据类型的原定设置编写值更改为 *:

EXEC rdsadmin.rdsadmin_util.dbms_redact_upd_full_rdct_val(p_char_val => '*');

以下示例更改 NUMBERDATECHAR 数据类型的原定设置编写值:

BEGIN rdsadmin.rdsadmin_util.dbms_redact_upd_full_rdct_val( p_number_val=>1, p_date_val=>to_date('1900-01-01','YYYY-MM-DD'), p_varchar_val=>'X'); END; /

使用 dbms_redact_upd_full_rdct_val 过程更改全部编写的原定设置值后,请重启数据库实例以使更改生效。有关更多信息,请参阅重启中的数据库实例