如何调整我的 Amazon RDS for Oracle 数据库实例的表空间大小?
我想知道如何管理我的 Amazon Relational Database Service (Amazon RDS) for Oracle 数据库实例的表空间或调整其大小。
简短描述
Amazon RDS for Oracle 数据库实例的默认表空间类型为 bigfile。为 RDS for Oracle 实例使用 smallfile 表空间并不是最佳实践。
使用 smallfile 表空间的 RDS for Oracle 实例具有以下限制:
- 由于 RDS for Oracle 中不支持 ALTER DATABASE 命令,因此您无法运行 ALTER DATABASE 查询来调整数据文件的大小或更改数据文件配置。有关详细信息,请参阅 Oracle DBA 权限的限制。
- 必须手动管理 db_files 参数以定义数据库中数据文件的最大数量。当数据文件的数量接近此限制时,请更改 db_files 参数。
如果未指定数据文件大小,则在创建表空间时,将默认启用 AUTOEXTEND ON。bigfile 表空间的最大大小为 16 TiB(太字节)。当将数据插入表空间时,表空间将增加到表空间所需的配置的最大限制。或者,表空间将增加到为 RDS 实例分配的存储空间的最大限制。
如果为 RDS 实例分配的存储空间已满,则该实例将切换到 STORAGE_FULL 状态,且表空间无法扩展。要解决此问题,必须向实例添加存储空间。有关详细信息,请参阅如何解决 Amazon RDS 数据库实例用尽存储空间时出现的问题?
从表空间删除数据时,表空间的大小不会缩小。插入新数据时,可以重用空闲块。必须手动调整表空间的大小才能回收未使用的空间。
解决方法
要调整 RDS for Oracle 实例的表空间大小,请完成以下步骤。
检查表空间的配置
完成以下步骤:
- 要确定表空间类型,请运行与以下示例类似的查询:
请注意,表空间类型可以是永久、undo、临时、smallfile 或 bigfile。SQL> SELECT TABLESPACE_NAME, CONTENTS, BIGFILE FROM DBA_TABLESPACES;
- 要检查数据文件的大小和配置的最大限制,并检查自动扩展功能是否已启用,请运行以下查询。对于永久表空间和 undo 表空间,请运行以下查询:
对于临时表空间,请运行以下查询:SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;
SQL> SELECT TABLESPACE_NAME, ROUND(SUM(BYTES)/(1024*1024*1024),2) SUM_GB, ROUND(MAXBYTES/(1024*1024*1024),2) MAX_GB, AUTOEXTENSIBLE FROM DBA_TEMP_FILES GROUP BY TABLESPACE_NAME, MAXBYTES,AUTOEXTENSIBLE;
您可能会在这些查询的输出中看到以下详细信息:
- 如果未启用自动扩展功能,则 MAX_GB 的值等于 0。
- 如果表空间类型为 smallfile,则 MAX_GB 的值将取决于用于创建表空间的块大小。例如,如果使用的块大小为 8K,则 MAX_GB 的值为 32 GB。有关详细信息,请参阅 Oracle 网站上的非标准块大小。
- 如果表空间类型为 bigfile,则 MAX_GB 的值显示为 32 TB。RDS for Oracle 数据库实例中单个文件的最大大小为 16 TiB。
要检索表空间的数据描述语言 (DDL),请运行以下查询:
SQL> SET LINESIZE 400
SQL> SET LONG 99999
SQL> SELECT DBMS_METADATA.GET_DDL('TABLESPACE','example-tablespace') FROM DUAL;
您可以从返回的 DDL 中检索有关表空间的所需信息。
增加表空间的大小
如果您启用自动扩展功能,则无需增加表空间的大小。
但是,当您启用自动扩展功能,然后调整表空间大小时,必须满足以下要求。
对于 bigfile 表空间,要调整表空间的大小,请运行 ALTER TABLESPACE 命令:
SQL> ALTER TABLESPACE example-tablespace RESIZE 50G;
有关详细信息,请参阅 Oracle 网站上的 ALTER TABLESPACE。以千字节 (K)、兆字节 (M)、千兆字节 (G) 或兆兆字节 (T) 为单位指定大小。bigfile 表空间只有一个数据文件,且 ALTER TABLESPACE 命令可调整属于该表空间的数据文件的大小。
对于 smallfile 表空间,请添加数据文件以增加表空间的大小:
SQL> ALTER TABLESPACE example-tablespace ADD DATAFILE SIZE 1G AUTOEXTEND ON;
要调整 smallfile 表空间中原始数据文件的大小,请运行 rdsadmin_util.resize_datafile:
SQL> select file_id,file_name, bytes/1024/1024/1024 gb from dba_data_files where tablespace_name='TEST';
您的输出将类似于以下:
FILE_ID FILE_NAME GB ======================================================================= 6 /rdsdbdata/db/TESTDB_A/datafile/o1_mf_test_m03xlfq8_.dbf 1 SQL> exec rdsadmin.rdsadmin_util.resize_datafile(6,'2G') PL/SQL procedure successfully completed. SQL> select file_id,file_name, bytes/1024/1024/1024 gb from dba_data_files where tablespace_name='TEST'; FILE_ID FILE_NAME GB ========================================================================= 6 /rdsdbdata/db/TESTDB_A/datafile/o1_mf_test_m03xlfq8_.dbf 2
减小表空间的大小
要减小 smallfile 表空间的大小,请完成以下步骤:
- 要减小 smallfile 表空间的大小,请运行 rdsadmin_util.resize_datafile。
**注意:**您无法将数据文件的大小减小到数据文件高水位以下的值。 - 创建新的表空间并根据需要配置空间。然后,手动将所有数据移动到新的表空间。
如果您的表空间为 bigfile,要根据您的表空间类型减小表空间的大小,请选择以下方法之一。
对于永久表空间,您无法将永久表空间的大小减小到表空间高水印以下的值。当尝试调整永久表空间的大小时,调整大小操作会失败。然后,您会看到以下错误:
ORA-03297: file contains used data beyond requested RESIZE value
但是,要在表空间大小为 50 GB 且高水印为 40 GB 时将表空间大小减小到 40 GB,请运行以下查询:
SQL> ALTER TABLESPACE example-tablespace RESIZE 40G;
如果您无法将表空间的大小减小到高水印以下的值,请考虑以下选项:
- 重新组织表空间中的对象。
- 创建新的表空间并将所有对象移动到新的表空间。
- 删除旧的表空间。
对于临时表空间,要减小临时表空间的大小,请运行 SHRINK 命令:
SQL> ALTER TABLESPACE example-tablespace SHRINK SPACE KEEP 100M;
要调整只读副本中的临时表空间大小,请运行 rdsadmin.rdsadmin_util.resize_temp_tablespace:
SQL> EXEC rdsadmin.rdsadmin_util.resize_temp_tablespace('example-tablespace','100M');
-or-
创建另一个临时表空间并配置所需的大小。然后,将新的临时表空间设置为默认临时表空间。
-
要查看当前的默认临时表空间,请运行以下查询:
SQL> SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
有关详细信息,请参阅 Oracle 网站上的查看有关表空间的信息。
-
要创建新的临时表空间,请运行以下查询:
SQL> CREATE TEMPORARY TABLESPACE example-tablespace TEMPFILE SIZE 100M;
-
要将新的临时表空间设置为默认临时表空间,请运行以下查询:
SQL> EXEC RDSADMIN.RDSADMIN_UTIL.ALTER_DEFAULT_TEMP_TABLESPACE(TABLESPACE_NAME => 'example-tablespace');
要修改特定用户的临时表空间,请完成以下步骤:
-
要查看用户当前的默认临时表空间,请运行以下查询:
SQL> SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS where USERNAME='example_username';
-
要更改用户的默认临时表空间,请运行以下查询:
SQL> ALTER USER example_username TEMPORARY TABLESPACE example-tablespace;
对于 undo 表空间,请使用 ALTER TABLESPACE 命令来减小 undo 表空间的大小。
要确定当前正在使用的 undo 表空间,请运行以下查询:
SQL> SHOW PARAMETER UNDO_TABLESPACE;
要减小 undo 表空间的大小,请运行与以下示例查询类似的查询:
如果查询未成功运行,请完成以下步骤:
-
SQL> CREATE UNDO TABLESPACE example-new-tablespace DATAFILE SIZE 1G AUTOEXTEND ON MAXSIZE 100G;
-
UNDO_TABLESPACE = example-new-tablespace
在参数组中设置 UNDO_TABLESPACE 初始化参数以指向新创建的表空间。
有关详细信息,请参阅使用参数组。
UNDO_TABLESPACE 初始化参数是一个动态参数,在您应用修改时不会导致停机。但是,最佳做法是在进行更改后重启数据库实例。有关详细信息,请参阅 Oracle 网站上的管理 Undo。
要验证新的 undo 表空间是否为默认表空间,请运行以下查询:SQL> SHOW PARAMETER UNDO_TABLESPACE;
-
要删除旧的 undo 表空间,请运行删除表空间查询:
SQL> DROP TABLESPACE example-tablespace INCLUDING CONTENTS AND DATAFILES;
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前