执行 Oracle 数据库实例的常见数据库任务
下文中介绍了如何在运行 Oracle 的 Amazon RDS 数据库实例上,执行与数据库相关的特定常见 DBA 任务。为了提供托管服务体验,Amazon RDS 未提供数据库实例的 Shell 访问权限。并且 Amazon RDS 还限制了对需要高级权限的某些系统程序和表的访问。
主题
更改数据库的全局名称
要更改数据库的全局名称,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.rename_global_name
。rename_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)。创建数据文件和日志文件时,无法指定物理文件名。
默认情况下,在启用自动扩展的情况下创建表空间,并且没有最大大小。由于这些默认设置,表空间会增大以占用所有分配的存储空间。建议您在永久表空间和临时表空间上指定适当的最大大小,并仔细监视空间使用率。
以下示例创建一个名为 users2
的表空间,其起始大小为 1 GB,最大大小为 10 GB:
CREATE TABLESPACE
users2
DATAFILE SIZE1G
AUTOEXTEND ON MAXSIZE10G
;
以下示例创建了名为 temp01
的临时表空间:
CREATE TEMPORARY TABLESPACE
temp01
;
建议您不要使用小文件表空间,因为您无法使用 Amazon RDS for Oracle 调整小文件表空间的大小。不过,您可以将数据文件添加到小文件表空间中。
您可以使用 ALTER TABLESPACE
调整大文件表空间的大小。可以 KB (K)、MB (M)、GB (G) 或 TB (T) 为单位指定大小。
以下示例将名为 users2
的大文件表空间的大小调整到 200MB。
ALTER TABLESPACE
users2
RESIZE200M
;
以下示例向名为 users2
的小文件表空间添加其他数据文件。
ALTER TABLESPACE
users2
ADD DATAFILE SIZE100000M
AUTOEXTEND ON NEXT250m
MAXSIZEUNLIMITED
;
设置默认表空间
要设置默认表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_default_tablespace
。alter_default_tablespace
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar |
— |
是 |
默认表空间的名称。 |
以下示例将默认表空间设置为 users2
:
EXEC rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => '
users2
');
设置默认临时表空间
要设置默认临时表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.alter_default_temp_tablespace
。alter_default_temp_tablespace
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar |
— |
是 |
默认临时表空间的名称。 |
以下示例将默认临时表空间设置为 temp01
。
EXEC rdsadmin.rdsadmin_util.alter_default_temp_tablespace(tablespace_name => '
temp01
');
在实例存储上创建临时表空间
要在实例存储上创建临时表空间,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.create_inst_store_tmp_tblspace
。create_inst_store_tmp_tblspace
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
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
。您只能在只读副本上使用此过程。 过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar |
— |
是 |
只读副本上临时表空间的名称。 |
在以下示例中,您的只读副本上存在空的临时表空间 temp01
。运行以下命令以创建此表空间的临时文件,并将其存储在实例存储中。
EXEC rdsadmin.rdsadmin_util.add_inst_store_tempfile(p_tablespace_name => '
temp01
');
有关更多信息,请参阅在 RDS for Oracle 实例存储中存储临时数据。
删除只读副本上的临时文件
您不能删除只读副本上的现有临时表空间。您可以将只读副本上的临时文件存储从 Amazon EBS 更改为实例存储,或者从实例存储更改为 Amazon EBS。为实现这些目标,请执行以下操作:
-
删除只读副本上临时表空间中的当前临时文件。
-
在不同的存储上创建新的临时文件。
要删除临时文件,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util. drop_replica_tempfiles
。您只能在只读副本上使用此过程。drop_replica_tempfiles
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar |
— |
是 |
只读副本上临时表空间的名称。 |
假设一个名为 temp01
的临时表空间位于只读副本上的实例存储中。通过运行以下命令,删除此表空间中的所有临时文件。
EXEC rdsadmin.rdsadmin_util.drop_replica_tempfiles(p_tablespace_name => '
temp01
');
有关更多信息,请参阅在 RDS for Oracle 实例存储中存储临时数据。
通过检查点检验数据库
要通过检查点检验数据库,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.checkpoint
。checkpoint
过程没有参数。
以下示例为数据库创建检查点。
EXEC rdsadmin.rdsadmin_util.checkpoint;
设置分布式恢复
要设置分布式恢复,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.enable_distr_recovery
和 disable_distr_recovery
。这些过程没有参数。
以下示例启用分布式恢复。
EXEC rdsadmin.rdsadmin_util.enable_distr_recovery;
以下示例禁用分布式恢复。
EXEC rdsadmin.rdsadmin_util.disable_distr_recovery;
设置数据库时区
您可以通过以下方式设置 Amazon RDS Oracle 数据库的时区:
注意
您还可以为 Oracle Scheduler 设置默认时区。有关更多信息,请参阅“设置 Oracle Scheduler 作业的时区”。
alter_db_time_zone
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
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
移动外部数据文件之后,您可以用它来创建外部表。以下示例创建使用 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
初始化参数设置为 DIAGNOSTIC
或 DIAGNOSTIC+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) 版本
诊断实用程序软件包的通用参数
通常,您在通过 rdsadmin_diagnostic_util
软件包管理 AWR 和 ADDM 时可以使用以下参数。
参数 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
|
— |
是 |
开始快照的 ID。 |
|
|
— |
是 |
结束快照的 ID。 |
|
|
|
否 |
将报告写入或将文件导出到的目录。如果您指定非默认目录,则运行 |
|
|
— |
否 |
可用于区分备份的字符串,以便指示备份的目的或用法,例如 您最多可指定 30 个字符。有效字符为 标签不一定是唯一的,因此多个备份可以使用相同的标签。如果未指定标签,则 RMAN 会使用 以下 RDS for Oracle 数据库引擎版本支持
|
|
|
|
否 |
报告的格式。有效值为 |
|
|
— |
否 |
Oracle 的有效数据库标识符 (DBID),显示在 |
使用 rdsadmin_diagnostic_util 软件包管理 ASH 时,通常使用以下参数。
参数 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
|
— |
是 |
ASH 分析的开始时间。 |
|
|
— |
是 |
ASH 分析的结束时间。 |
|
|
|
否 |
ASH 报告的“Top Activity (热门活动)”部分中使用的槽的持续时间(以秒为单位)。如果未指定此参数,则 |
|
|
Null |
否 |
会话 ID。 |
|
|
Null |
否 |
SQL ID。 |
|
|
Null |
否 |
等待类名称。 |
|
|
Null |
否 |
服务名称哈希。 |
|
|
Null |
否 |
模块名称。 |
|
|
Null |
否 |
操作名称。 |
|
|
Null |
否 |
数据库会话的特定于应用程序的 ID。 |
|
|
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 分钟前的数据。输出文件的名称使用格式 ashrpt
,其中 begin_time
end_time
.txt
和 begin_time
使用格式 end_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。有关更多信息,请参阅“下载数据库日志文件”。
在 VPC 中调整用于数据库实例的数据库链接
要在同一 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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
布尔值 |
true |
否 |
设置为 |
注意
在单租户 CDB 中,以下操作有效,但没有客户可见的机制可以检测操作的当前状态。无法从 PDB 中获得审计信息。有关更多信息,请参阅“单租户 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
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
binary_integer |
|
否 |
索引的对象 ID。通常,您可以使用 ORA-08104 错误文本中的对象 ID。 |
|
binary_integer |
|
否 |
指定 指定 |
下面的示例清理失败的在线索引构建:
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
在索引和表扫描期间跳过损坏的数据块
-
如果还没有修复表,则运行以下程序来创建修复表。
EXEC rdsadmin.rdsadmin_dbms_repair.create_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.create_orphan_keys_table;
-
运行以下程序以检查现有记录,适当时清除它们。
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;
-
运行以下程序检查损坏的数据块。
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';
-
使用
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';
-
完成所有修复工作后,运行以下过程删除修复表。
EXEC rdsadmin.rdsadmin_dbms_repair.drop_repair_table; EXEC rdsadmin.rdsadmin_dbms_repair.drop_orphan_keys_table;
调整只读副本中的临时表空间大小
默认情况下,在启用自动扩展的情况下创建 Oracle 表空间,并且没有最大大小。由于这些默认设置,表空间在某些情况下会变得过大。建议您在永久表空间和临时表空间上指定适当的最大大小,并仔细监视空间使用率。
要调整 Oracle 数据库实例的只读副本中的临时空间大小,请使用 rdsadmin.rdsadmin_util.resize_temp_tablespace
或 rdsadmin.rdsadmin_util.resize_tempfile
Amazon RDS 过程。
resize_temp_tablespace
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
varchar2 |
— |
是 |
要调整大小的临时表空间的名称。 |
|
varchar2 |
— |
是 |
能够以字节(默认)、KB (K)、MB (M) 或 GB (G) 为单位指定大小。 |
resize_tempfile
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
binary_integer |
— |
是 |
要调整大小的临时表空间的文件标识符。 |
|
varchar2 |
— |
是 |
能够以字节(默认)、KB (K)、MB (M) 或 GB (G) 为单位指定大小。 |
以下示例将只读副本上名为 TEMP
的临时表空间的大小调整为 4 GB。
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4G');
EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('TEMP','4096000000');
以下示例将只读副本上基于临时文件(文件标识符为 1
)的临时表空间大小调整为 2 MB。
EXEC rdsadmin.rdsadmin_util.resize_tempfile(1,'2M');
有关 Oracle 数据库实例的只读副本的更多信息,请参阅使用 Amazon RDS for Oracle 的只读副本。
清除回收站
删除表时,Oracle 数据库不会立即清除其存储空间。数据库将重命名表,并将其与所有关联的对象放在回收站中。清除回收站将删除这些项目并释放其存储空间。
要清除整个回收站,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.purge_dba_recyclebin
。但是,此过程无法清除回收站中的 SYS
和 RDSADMIN
对象。如果您需要清除这些对象,请联系 Amazon Support。
以下示例清除整个回收站。
EXEC rdsadmin.rdsadmin_util.purge_dba_recyclebin;
设置全部编写的 Data Redaction 策略
要更改 Amazon RDS Oracle 实例上全部编写的 Data Redaction 策略的默认显示值,请使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.dbms_redact_upd_full_rdct_val
。
dbms_redact_upd_full_rdct_val
过程具有以下参数。
参数名称 | 数据类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
|
number |
Null |
否 |
修改 NUMBER 数据类型列的默认值。 |
|
binary_float |
Null |
否 |
修改 BINARY_FLOAT 数据类型列的默认值。 |
|
binary_double |
Null |
否 |
修改 BINARY_DOUBLE 数据类型列的默认值。 |
|
char |
Null |
否 |
修改 CHAR 数据类型列的默认值。 |
|
varchar2 |
Null |
否 |
修改 VARCHAR2 数据类型列的默认值。 |
|
nchar |
Null |
否 |
修改 NCHAR 数据类型列的默认值。 |
|
nvarchar2 |
Null |
否 |
修改 NVARCHAR2 数据类型列的默认值。 |
|
date |
Null |
否 |
修改 DATE 数据类型列的默认值。 |
|
timestamp |
Null |
否 |
修改 TIMESTAMP 数据类型列的默认值。 |
|
timestamp with time zone |
Null |
否 |
修改 TIMESTAMP WITH TIME ZONE 数据类型列的默认值。 |
|
blob |
Null |
否 |
修改 BLOB 数据类型列的默认值。 |
|
clob |
Null |
否 |
修改 CLOB 数据类型列的默认值。 |
|
nclob |
Null |
否 |
修改 NCLOB 数据类型列的默认值。 |
以下示例将 char 数据类型的默认编写值更改为 *:
EXEC rdsadmin.rdsadmin_util.dbms_redact_upd_full_rdct_val(p_char_val => '*');
以下示例将更改数字、日期和 char 数据类型的默认编写值:
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 过程更改全部编写的默认值后,请重启数据库实例以使更改生效。有关更多信息,请参阅重启中的数据库实例。